From ade9e77b6bc0dc3f234b2504fd22af5ed434a18e Mon Sep 17 00:00:00 2001 From: SoftFever <103989404+SoftFever@users.noreply.github.com> Date: Wed, 16 Sep 2026 19:53:23 +0800 Subject: [PATCH] Run every profile maintenance job from one tool (#15726) * Run every profile maintenance job from one tool orca_id_tool.py becomes orca_profile_tool.py, and orca_extra_profile_check.py and orca_filament_lib.py fold into it as subcommands: check, generate-id, fix, trim, update-index and update-snapshot. The three scripts already overlapped -- the checker imported half of its rules from the id tool, which in turn kept a copy-pasted set of output helpers to avoid the resulting import cycle -- while disagreeing on how a vendor is enumerated, how a JSON file is read and what the exit code means. One file settles all three. check, normalize, trim and update-index reproduce their predecessors exactly; normalize and update-index were diffed byte-for-byte against the old scripts over a copy of the whole tree. Deliberate changes: the compatible-printers check no longer switches itself off when --check-materials is passed, an error exits 1 rather than -1, update-index honours --profile-type and reports a profile it cannot place instead of dropping it from the index, fix and update-index gained --dry-run, trim keeps an unindexed file some surviving profile still inherits from, and vendors are enumerated as directories with an index -- which is why blacklist.json, a data file that an unscoped index rebuild once wrote four empty list sections into, loses them here and will not collect them again. The dead rename_filament_system() helper is gone. The suite under scripts/tests now covers the maintenance commands too, and CI runs it; nothing there ran in CI before. No shipped profile data changes apart from those four keys. * update vendor index files with "python3 ./scripts/orca_profile_tool.py update-index" and "python3 ./scripts/orca_profile_tool.py normalize" --- .github/workflows/check_profiles.yml | 37 +- docs/HLSD/filament_id.md | 149 +- resources/profiles/Anycubic.json | 840 ++- resources/profiles/BBL.json | 2922 +++++----- .../filament/addnorth/addnorth ABS rABS.json | 3 +- .../addnorth/addnorth PA Adura FDA.json | 3 +- .../filament/addnorth/addnorth PA Adura.json | 3 +- .../addnorth/addnorth PA-CF Adura X.json | 3 +- .../addnorth/addnorth PA6 Addlantis.json | 3 +- .../addnorth/addnorth PC BLend HT LCF.json | 3 +- .../filament/addnorth/addnorth PETG Base.json | 3 +- .../filament/addnorth/addnorth PETG ESD.json | 3 +- .../addnorth/addnorth PETG Economy.json | 3 +- .../addnorth/addnorth PETG Flame v0.json | 3 +- .../addnorth/addnorth PETG PRO Matte.json | 3 +- .../addnorth/addnorth PETG rPETG Matte.json | 3 +- .../addnorth/addnorth PETG-CF Rigid X.json | 3 +- .../filament/addnorth/addnorth PLA E-PLA.json | 3 +- .../addnorth/addnorth PLA Economy.json | 3 +- .../addnorth PLA HT-PLA PRO Matte.json | 3 +- .../addnorth/addnorth PLA Premium Silk.json | 3 +- .../addnorth/addnorth PLA Textura.json | 3 +- .../filament/addnorth/addnorth PLA Wood.json | 3 +- .../addnorth PLA X-PLA High Speed.json | 3 +- .../filament/addnorth/addnorth PLA X-PLA.json | 3 +- .../addnorth/addnorth PLA rPLA RE-ADD.json | 3 +- .../addnorth PLA-CF Carbon Fiber.json | 3 +- .../addnorth/addnorth PVDF Adamant S1.json | 3 +- .../addnorth/addnorth TPU EasyFlex.json | 3 +- .../addnorth/addnorth TPU Pro Matte 85A.json | 3 +- .../addnorth/addnorth TPU Pro Matte 95A.json | 3 +- resources/profiles/Chuanying.json | 8 +- resources/profiles/CoLiDo.json | 24 +- resources/profiles/Creality.json | 3456 +++++------ .../filament/CR-ABS @Ender-5 Max-all.json | 160 - .../filament/CR-Nylon @Ender-5 Max-all.json | 185 - .../filament/CR-PETG @Ender-5 Max-all.json | 163 - .../filament/CR-PLA @Ender-5 Max-all.json | 157 - .../filament/CR-Silk @Ender-5 Max-all.json | 157 - .../Generic ABS @Ender-5 Max-all.json | 163 - .../Generic ASA @Ender-5 Max-all.json | 175 - .../Generic PETG @Ender-5 Max-all.json | 163 - .../Generic PLA @Ender-5 Max-all.json | 161 - .../Generic PLA-CF @Ender-5 Max-all.json | 161 - .../Generic PLA-Silk @Ender-5 Max-all.json | 155 - .../Generic TPU @Ender-5 Max-all.json | 166 - .../filament/HP-ASA @Ender-5 Max-all.json | 175 - .../filament/HP-TPU @Ender-5 Max-all.json | 168 - .../filament/Hyper ABS @Ender-5 Max-all.json | 166 - .../filament/Hyper PETG @Ender-5 Max-all.json | 163 - .../filament/Hyper PLA @Ender-5 Max-all.json | 160 - .../Hyper PLA-CF @Ender-5 Max-all.json | 163 - resources/profiles/Elegoo.json | 5090 ++++++++--------- .../Elegoo/filament/fdm_filament_paht.json | 91 - ...30mm Standard @Elegoo Giga 0.6 nozzle.json | 3 +- .../process/fdm_process_elegoo_02010.json | 1 - resources/profiles/FLSun.json | 32 +- resources/profiles/Flashforge.json | 748 +-- resources/profiles/InfiMech.json | 6 +- .../machine/HSN/fdm_klipper_common.json | 201 - .../machine/HSN/fdm_machine_common.json | 197 - .../InfiMech/machine/fdm_klipper_common.json | 2 +- .../InfiMech/machine/fdm_machine_common.json | 2 +- resources/profiles/OrcaFilamentLibrary.json | 744 +-- resources/profiles/Phrozen.json | 2 +- .../Phrozen/machine/_fdm_machine_common.json | 139 - resources/profiles/Prusa.json | 672 +-- resources/profiles/Qidi.json | 2828 ++++----- resources/profiles/Ratrig.json | 60 +- resources/profiles/SeeMeCNC.json | 262 +- .../SeeMeCNC/filament/SeeMeCNC_ABS_0_4mm.json | 65 - .../SeeMeCNC/filament/SeeMeCNC_ABS_0_5mm.json | 65 - .../SeeMeCNC/filament/SeeMeCNC_ABS_0_7mm.json | 65 - .../SeeMeCNC/filament/SeeMeCNC_ABS_1_0mm.json | 65 - .../filament/SeeMeCNC_PA_CF_0_4mm.json | 65 - .../filament/SeeMeCNC_PA_CF_0_5mm.json | 65 - .../filament/SeeMeCNC_PA_CF_0_7mm.json | 65 - .../filament/SeeMeCNC_PA_CF_1_0mm.json | 65 - .../filament/SeeMeCNC_PETG_0_4mm.json | 65 - .../filament/SeeMeCNC_PETG_0_5mm.json | 65 - .../filament/SeeMeCNC_PETG_0_7mm.json | 65 - .../filament/SeeMeCNC_PETG_1_0mm.json | 65 - .../filament/SeeMeCNC_PETG_CF_0_4mm.json | 65 - .../filament/SeeMeCNC_PETG_CF_0_5mm.json | 65 - .../filament/SeeMeCNC_PETG_CF_0_7mm.json | 65 - .../filament/SeeMeCNC_PETG_CF_1_0mm.json | 65 - .../SeeMeCNC/filament/SeeMeCNC_PLA_0_4mm.json | 65 - .../SeeMeCNC/filament/SeeMeCNC_PLA_0_5mm.json | 65 - .../SeeMeCNC/filament/SeeMeCNC_PLA_0_7mm.json | 65 - .../SeeMeCNC/filament/SeeMeCNC_PLA_1_0mm.json | 65 - .../SeeMeCNC/filament/SeeMeCNC_TPU_0_7mm.json | 51 - resources/profiles/Snapmaker.json | 704 +-- resources/profiles/Sovol.json | 156 +- resources/profiles/Tiertime.json | 72 +- resources/profiles/TwoTrees.json | 8 +- resources/profiles/blacklist.json | 6 +- resources/profiles/iQ.json | 24 +- resources/profiles/re3D.json | 396 +- scripts/check_profile.ps1 | 27 +- scripts/check_profile.sh | 28 +- scripts/orca_extra_profile_check.py | 660 --- scripts/orca_filament_lib.py | 310 - scripts/orca_id_tool.py | 1429 ----- scripts/orca_profile_tool.py | 2618 +++++++++ scripts/tests/test_filament_id.py | 166 +- scripts/tests/test_profile_tool.py | 854 +++ scripts/tests/test_setting_id.py | 14 +- scripts/update_bambu_filament_ids.py | 4 +- src/libslic3r/Preset.cpp | 2 +- src/libslic3r/Preset.hpp | 4 +- src/libslic3r/PresetBundle.cpp | 2 +- tests/libslic3r/test_preset_setting_id.cpp | 4 +- 112 files changed, 13257 insertions(+), 17140 deletions(-) delete mode 100644 resources/profiles/Creality/filament/CR-ABS @Ender-5 Max-all.json delete mode 100644 resources/profiles/Creality/filament/CR-Nylon @Ender-5 Max-all.json delete mode 100644 resources/profiles/Creality/filament/CR-PETG @Ender-5 Max-all.json delete mode 100644 resources/profiles/Creality/filament/CR-PLA @Ender-5 Max-all.json delete mode 100644 resources/profiles/Creality/filament/CR-Silk @Ender-5 Max-all.json delete mode 100644 resources/profiles/Creality/filament/Generic ABS @Ender-5 Max-all.json delete mode 100644 resources/profiles/Creality/filament/Generic ASA @Ender-5 Max-all.json delete mode 100644 resources/profiles/Creality/filament/Generic PETG @Ender-5 Max-all.json delete mode 100644 resources/profiles/Creality/filament/Generic PLA @Ender-5 Max-all.json delete mode 100644 resources/profiles/Creality/filament/Generic PLA-CF @Ender-5 Max-all.json delete mode 100644 resources/profiles/Creality/filament/Generic PLA-Silk @Ender-5 Max-all.json delete mode 100644 resources/profiles/Creality/filament/Generic TPU @Ender-5 Max-all.json delete mode 100644 resources/profiles/Creality/filament/HP-ASA @Ender-5 Max-all.json delete mode 100644 resources/profiles/Creality/filament/HP-TPU @Ender-5 Max-all.json delete mode 100644 resources/profiles/Creality/filament/Hyper ABS @Ender-5 Max-all.json delete mode 100644 resources/profiles/Creality/filament/Hyper PETG @Ender-5 Max-all.json delete mode 100644 resources/profiles/Creality/filament/Hyper PLA @Ender-5 Max-all.json delete mode 100644 resources/profiles/Creality/filament/Hyper PLA-CF @Ender-5 Max-all.json delete mode 100644 resources/profiles/Elegoo/filament/fdm_filament_paht.json delete mode 100644 resources/profiles/InfiMech/machine/HSN/fdm_klipper_common.json delete mode 100644 resources/profiles/InfiMech/machine/HSN/fdm_machine_common.json delete mode 100644 resources/profiles/Phrozen/machine/_fdm_machine_common.json delete mode 100644 resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS_0_4mm.json delete mode 100644 resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS_0_5mm.json delete mode 100644 resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS_0_7mm.json delete mode 100644 resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS_1_0mm.json delete mode 100644 resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA_CF_0_4mm.json delete mode 100644 resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA_CF_0_5mm.json delete mode 100644 resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA_CF_0_7mm.json delete mode 100644 resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA_CF_1_0mm.json delete mode 100644 resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_0_4mm.json delete mode 100644 resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_0_5mm.json delete mode 100644 resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_0_7mm.json delete mode 100644 resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_1_0mm.json delete mode 100644 resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_CF_0_4mm.json delete mode 100644 resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_CF_0_5mm.json delete mode 100644 resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_CF_0_7mm.json delete mode 100644 resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_CF_1_0mm.json delete mode 100644 resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA_0_4mm.json delete mode 100644 resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA_0_5mm.json delete mode 100644 resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA_0_7mm.json delete mode 100644 resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA_1_0mm.json delete mode 100644 resources/profiles/SeeMeCNC/filament/SeeMeCNC_TPU_0_7mm.json delete mode 100644 scripts/orca_extra_profile_check.py delete mode 100644 scripts/orca_filament_lib.py delete mode 100755 scripts/orca_id_tool.py create mode 100755 scripts/orca_profile_tool.py create mode 100644 scripts/tests/test_profile_tool.py diff --git a/.github/workflows/check_profiles.yml b/.github/workflows/check_profiles.yml index b855d09da7..7e714e2def 100644 --- a/.github/workflows/check_profiles.yml +++ b/.github/workflows/check_profiles.yml @@ -9,8 +9,9 @@ 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. + # orca_profile_tool.py also validates resources/printers/bambu_filament_ids.json, and + # both it and its tests live in scripts/, so a PR touching only those must still run + # this workflow. - 'resources/printers/**' - 'scripts/**' - ".github/workflows/check_profiles.yml" @@ -36,12 +37,23 @@ jobs: - name: Checkout repository uses: actions/checkout@v7 - - name: Run extra JSON check - id: extra_json_check + # Deliberately not continue-on-error, unlike every check below: if the tool itself is + # broken, nothing it then reports about the profiles is worth reading. + - name: Run the profile tool's own unit tests + run: python3 -m unittest discover -s scripts/tests -t scripts + + # What the validator below cannot see. It loads the tree the way the slicer does, so + # it never notices a profile no .json indexes, a preset name two files claim, + # an id that is not the mint of its own triple, or a file that normalize and + # update-index would still rewrite. + # The step id is the handle the PR comment and the failure gate below use; renaming it + # silently disables them. + - name: Check profiles (orca_profile_tool.py) + id: profile_tool continue-on-error: true run: | set +e - python3 ./scripts/orca_extra_profile_check.py 2>&1 | tee ${{ runner.temp }}/extra_json_check.log + python3 ./scripts/orca_profile_tool.py check 2>&1 | tee ${{ runner.temp }}/profile_tool.log exit ${PIPESTATUS[0]} # download @@ -186,7 +198,7 @@ jobs: echo "${{ github.event.pull_request.number }}" > ${{ runner.temp }}/profile-check-results/pr_number.txt - name: Prepare comment artifact - if: ${{ always() && github.event_name == 'pull_request' && (steps.extra_json_check.outcome == 'failure' || steps.validate_system.outcome == 'failure' || steps.validate_slice.outcome == 'failure' || steps.validate_filament_subtypes.outcome == 'failure' || steps.validate_custom.outcome == 'failure') }} + if: ${{ always() && github.event_name == 'pull_request' && (steps.profile_tool.outcome == 'failure' || steps.validate_system.outcome == 'failure' || steps.validate_slice.outcome == 'failure' || steps.validate_filament_subtypes.outcome == 'failure' || steps.validate_custom.outcome == 'failure') }} run: | { # Marker matched by check_profiles_comment.yml to delete prior comments. @@ -194,11 +206,11 @@ jobs: echo "## :x: Profile Validation Errors" echo "" - if [ "${{ steps.extra_json_check.outcome }}" = "failure" ]; then - echo "### Extra JSON Check Failed" + if [ "${{ steps.profile_tool.outcome }}" = "failure" ]; then + echo "### Profile Check Failed (orca_profile_tool.py)" echo "" echo '```' - head -c 30000 ${{ runner.temp }}/extra_json_check.log || echo "No output captured" + head -c 30000 ${{ runner.temp }}/profile_tool.log || echo "No output captured" echo '```' echo "" fi @@ -240,7 +252,7 @@ jobs: fi echo "---" - echo "*Please fix the above errors and push a new commit.*" + echo '*Fix the errors above and push a new commit. To reproduce this run locally: `scripts/check_profile.sh`, or `scripts\check_profile.bat` on Windows.*' } > ${{ runner.temp }}/profile-check-results/pr_comment.md - name: Upload comment artifact @@ -252,7 +264,8 @@ jobs: retention-days: 1 - name: Fail if any check failed - if: ${{ always() && (steps.extra_json_check.outcome == 'failure' || steps.validate_system.outcome == 'failure' || steps.validate_slice.outcome == 'failure' || steps.validate_filament_subtypes.outcome == 'failure' || steps.validate_custom.outcome == 'failure') }} + if: ${{ always() && (steps.profile_tool.outcome == 'failure' || steps.validate_system.outcome == 'failure' || steps.validate_slice.outcome == 'failure' || steps.validate_filament_subtypes.outcome == 'failure' || steps.validate_custom.outcome == 'failure') }} run: | - echo "One or more profile checks failed. See above for details." + echo "One or more profile checks failed; see the step logs above." + echo 'Reproduce the whole run locally with scripts/check_profile.sh (scripts\check_profile.bat on Windows).' exit 1 diff --git a/docs/HLSD/filament_id.md b/docs/HLSD/filament_id.md index 0aaf845909..3f8827f720 100644 --- a/docs/HLSD/filament_id.md +++ b/docs/HLSD/filament_id.md @@ -9,7 +9,7 @@ OrcaFilamentLibrary (OFL), Qidi, or Snapmaker bundle. The granularity is the nam 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/orca_id_tool.py` +**How it is generated:** an id is computed, never invented. `scripts/orca_profile_tool.py` mints it as a deterministic hash of the product's identity — the triple `(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 @@ -34,7 +34,7 @@ This page is the rule for authoring `filament_id` in system profiles > [!IMPORTANT] > **Never write a `filament_id` value by hand.** A new filament gets its id from -> `python scripts/orca_id_tool.py --generate`; one already in the tree has one — inherit it. +> `python scripts/orca_profile_tool.py generate-id`; one already in the tree has one — inherit it. ## The design, in two pieces @@ -160,8 +160,8 @@ key needed). Tuning a generic material → **join the OrcaFilamentLibrary filame 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, filament name)`, so correcting any of them re-mints the id - **by design**, applied by `--generate` (preview with `--dry-run`, confine with `--vendor`) and - gated by the `--update-snapshot` diff; the exact sequence is in the FAQ. Nothing forwards + **by design**, applied by `generate-id` (preview with `--dry-run`, confine with `--vendor`) + and gated by the `update-snapshot` diff; 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. @@ -170,7 +170,7 @@ key needed). Tuning a generic material → **join the OrcaFilamentLibrary filame ## Minting — nobody invents ids New ids are deterministic, computed exactly like the `setting_id` precedent -(the `setting_id` half of `scripts/orca_id_tool.py`): +(the `setting_id` half of `scripts/orca_profile_tool.py generate-id`): ```text FILAMENT_ID_NAMESPACE = uuid5(setting-id NAMESPACE, "filament_id") @@ -199,10 +199,10 @@ purely through inheritance from the OFL preset. 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 +is a mismatch `check` reports and `generate-id` 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 +few thousand products); nothing salts past it: `check` reports it naming both products, +`generate-id` 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 @@ -212,15 +212,14 @@ Workflow for a new filament: ```bash # 1. Author the filament with NO filament_id key anywhere. -python scripts/orca_id_tool.py --dry-run # 2. preview the ids — writes nothing -python scripts/orca_id_tool.py --generate # 3. apply them to the profile file(s) -python scripts/orca_id_tool.py --update-snapshot # 4. record the new claims in the snapshot -python scripts/orca_id_tool.py --check # 5. validate the filament_id state -python scripts/orca_extra_profile_check.py # 6. ...and everything else CI checks -# 7. Commit the profile edits together with scripts/filament_id_snapshot.json, for review. +python scripts/orca_profile_tool.py generate-id --dry-run # 2. preview the ids — writes nothing +python scripts/orca_profile_tool.py generate-id # 3. apply them to the profile file(s) +python scripts/orca_profile_tool.py update-snapshot # 4. record the new claims in the snapshot +python scripts/orca_profile_tool.py check # 5. validate — everything CI checks +# 6. Commit the profile edits together with scripts/filament_id_snapshot.json, for review. ``` -`--generate` makes every filament's id equal the mint of its own +`generate-id` makes every filament's id equal the mint of its own `(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 @@ -232,60 +231,63 @@ and machine preset of every vendor except BBL, which keeps its authoritative `G* `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 byte-preserving (indentation, BOM, and line endings intact, every edited file re-parsed to fail -loudly), and a no-op on a tree that already passes `scripts/orca_extra_profile_check.py` — the -check CI runs over both id kinds, of which `--check` is the `filament_id` half. +loudly), and a no-op on a tree that already passes `check`. - `--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 id is a function of the - triple alone, so a narrowed run writes exactly what a full one would; `--check` reports + 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. +- `--dry-run` reports what the run would do and writes nothing, so + `generate-id --dry-run --vendor ` previews just that bundle. - `--profiles DIR` points the tooling at a different profile tree (default - `resources/profiles`). `--check` and `--update-snapshot` read and write the sanctioned state of + `resources/profiles`). `check` and `update-snapshot` read and write the sanctioned state of the tree they are given, so pointing them elsewhere needs `--snapshot PATH` for that tree too — `scripts/filament_id_snapshot.json` describes `resources/profiles` and no other tree. -**Identity fixes need no separate mode.** `--generate` re-derives an id that no longer matches its -triple exactly the way it fills in a missing one, so a rename or a `filament_vendor` / -`filament_type` correction is just: fix the config, run `--generate` (confine it with `--vendor`, -preview it with `--dry-run`), then `--update-snapshot` and review the diff. +The tool's other commands maintain the tree around the ids: `fix` normalises profile files, +`trim` drops files no `.json` list references, and `update-index` rebuilds those lists. +They do not touch ids; `--help` documents them. + +**Identity fixes need no separate command.** `generate-id` re-derives an id that no longer matches +its triple exactly the way it fills in a missing one, so a rename or a `filament_vendor` / +`filament_type` correction is just: fix the config, run `generate-id` (confine it with +`--vendor`, preview it with `--dry-run`), then `update-snapshot` and review the diff. If you skip the tooling, CI fails and prints the remedy: the expected id for your filament and -the instruction to run `python scripts/orca_id_tool.py --generate`; once the id is minted, the -snapshot checks likewise point at `--update-snapshot` and tell you to commit the resulting +the instruction to run `python scripts/orca_profile_tool.py generate-id`; 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 +## Ids other systems compose -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. +Every filament profile carries a minted id, with no exceptions and no spellings held back for +anyone. There is therefore no reserved namespace to respect and no bundle that owns one: an id +some other system composes for its own purposes is simply not the mint of a triple, so it +cannot be a system profile's `filament_id`, and the format check rejects it for that reason +alone — same error, same remedy, whoever wrote it. -| Space | Status | Rule | -| --- | --- | --- | -| `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 | +Three such spaces exist around us, and are worth recognising so nobody mistakes one for an id +to copy into a profile: -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 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 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 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. +- **Bambu's `GF*` catalog.** Bambu's device / RFID / cloud catalog is external and opaque. 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. Note that `GF` is a *prefix*, not a namespace the tree + avoids: BBL's authoritative `setting_id` values include `GF`-prefixed ones, and + `resources/profiles/blacklist.json` and `BBL/filament/filaments_color_codes.json` both + reference Bambu catalog ids by design. The rule is about `filament_id` and nothing else. +- **Qidi's `QD_*` protocol ids.** The Qidi box composes `QD___` 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 filament's id belongs in `QidiPrinterAgent`. 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. +- **`P` + 7 hex chars, and `"null"`.** What `CreatePresetsDialog.cpp` gives a filament a *user* + creates. Those are user presets, not system profiles, and the two never meet in the tree. ## The Bambu catalog map @@ -337,7 +339,7 @@ OrcaFilamentLibrary. **135 is the number to expect at every regeneration** — 1 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 6** lives in `check_filament_ids`, so profile CI runs it alongside the other five. It +**Check 5** lives in `check_filament_ids`, so profile CI runs it alongside the other four. 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)` @@ -426,11 +428,11 @@ map would silently reproduce the bug. ## 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/orca_profile_tool.py check`. 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 +and gate in a PR**. Never edit the snapshot by hand — `update-snapshot` regenerates it 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 @@ -450,8 +452,6 @@ The checks, in brief: 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 `filament_type` (generics use `"Generic"`), and all declarers of one filament within a bundle must agree on the triple. @@ -461,16 +461,15 @@ The checks, in brief: tree claims. See [The Bambu catalog map](#the-bambu-catalog-map); the remedy is always to regenerate, never to hand-edit. -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. +A profile that declares an id no triple mints — a Bambu catalog id, a composed Qidi one, a +hand-typed value, whatever its vendor — fails the format check. For a Bambu-cataloged product +the catalog map is where the correspondence belongs. 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 -references (a file the index never loads cannot break AMS matching). +The same `check` run 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 @@ -488,21 +487,21 @@ ambiguity check behind structure rule 3. `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/orca_id_tool.py --generate` to mint it. Inheritance never changes the id. + `python scripts/orca_profile_tool.py generate-id` to mint it. Inheritance never changes the id. - **I need to fix a filament's `filament_vendor` or `filament_type`.** Fix the config, run - `--generate --vendor ` (preview with `--dry-run`), then `--update-snapshot`, and commit + `generate-id --vendor ` (preview with `--dry-run`), 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 filament.** Rename the presets (adding `renamed_from`, which keeps the - preset *name* resolving), then `--generate --vendor ` (preview with `--dry-run`), then - `--update-snapshot`. The id follows the new filament name; as with any identity fix, the old id + preset *name* resolving), then `generate-id --vendor ` (preview with `--dry-run`), then + `update-snapshot`. The id follows 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 filament needs an id.** Run `python scripts/orca_id_tool.py --generate`, then - `--update-snapshot`, and commit both diffs. Do not type an id by hand. +- **Can I reuse a `QD_*` id for a Qidi profile?** No — it is not a mint, so it is not a + `filament_id`. Those values are composed by the box at runtime, and no preset carries one. + Author Qidi filaments like any other vendor's. +- **CI says my filament needs an id.** Run `python scripts/orca_profile_tool.py generate-id`, 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/resources/profiles/Anycubic.json b/resources/profiles/Anycubic.json index 205fd359d8..1c44d6ec69 100644 --- a/resources/profiles/Anycubic.json +++ b/resources/profiles/Anycubic.json @@ -64,10 +64,10 @@ "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 S1 Max", + "sub_path": "machine/Anycubic Kobra S1 Max.json" + }, { "name": "Anycubic Kobra X", "sub_path": "machine/Anycubic Kobra X.json" @@ -90,6 +90,10 @@ "name": "fdm_process_common", "sub_path": "process/fdm_process_common.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 HighDetail @Anycubic Kobra 3 0.4 nozzle", "sub_path": "process/0.08mm HighDetail @Anycubic Kobra 3 0.4 nozzle.json" @@ -98,6 +102,14 @@ "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 S1 Max 0.25 nozzle", + "sub_path": "process/0.08mm Standard @Anycubic Kobra S1 Max 0.25 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.08mm Standard @Anycubic Kobra X", "sub_path": "process/0.08mm Standard @Anycubic Kobra X 0.4 nozzle.json" @@ -106,6 +118,10 @@ "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.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.12mm Detail @Anycubic Kobra 2 Neo 0.4 nozzle", "sub_path": "process/0.12mm Detail @Anycubic Kobra 2 Neo 0.4 nozzle.json" @@ -126,10 +142,22 @@ "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 S1 Max 0.25 nozzle", + "sub_path": "process/0.12mm Standard @Anycubic Kobra S1 Max 0.25 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.12mm Standard @Anycubic Kobra X", "sub_path": "process/0.12mm Standard @Anycubic Kobra X 0.4 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.15mm Optimal @Anycubic 4MaxPro2", "sub_path": "process/0.15mm Optimal @Anycubic 4MaxPro2.json" @@ -162,6 +190,10 @@ "name": "0.15mm Optimal @Anycubic i3MegaS", "sub_path": "process/0.15mm Optimal @Anycubic i3MegaS.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.16mm High Quality @Anycubic Kobra X", "sub_path": "process/0.16mm High Quality @Anycubic Kobra X 0.4 nozzle.json" @@ -186,6 +218,10 @@ "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 S1 Max 0.4 nozzle", + "sub_path": "process/0.16mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, { "name": "0.16mm Standard @Anycubic Kobra X", "sub_path": "process/0.16mm Standard @Anycubic Kobra X 0.4 nozzle.json" @@ -194,6 +230,14 @@ "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.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.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 High Quality @Anycubic Kobra X", "sub_path": "process/0.20mm High Quality @Anycubic Kobra X 0.4 nozzle.json" @@ -250,6 +294,10 @@ "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 S1 Max 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, { "name": "0.20mm Standard @Anycubic Kobra X", "sub_path": "process/0.20mm Standard @Anycubic Kobra X 0.4 nozzle.json" @@ -294,6 +342,18 @@ "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 S1 Max 0.4 nozzle", + "sub_path": "process/0.24mm Standard @Anycubic Kobra S1 Max 0.4 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.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.24mm Standard @Anycubic Kobra X", "sub_path": "process/0.24mm Standard @Anycubic Kobra X 0.4 nozzle.json" @@ -314,6 +374,10 @@ "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 S1 Max 0.4 nozzle", + "sub_path": "process/0.28mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, { "name": "0.28mm Standard @Anycubic Kobra X", "sub_path": "process/0.28mm Standard @Anycubic Kobra X 0.4 nozzle.json" @@ -362,14 +426,26 @@ "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.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.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.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.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.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.40mm Standard @Anycubic Kobra 3 0.8 nozzle", "sub_path": "process/0.40mm Standard @Anycubic Kobra 3 0.8 nozzle.json" @@ -378,110 +454,30 @@ "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.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.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.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.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.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.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" - } - + { + "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": [ { @@ -536,6 +532,22 @@ "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 S1 Max 0.25 nozzle", + "sub_path": "filament/Anycubic ABS @Anycubic Kobra S1 Max 0.25 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 ABS @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic ABS @Anycubic Kobra S1 Max 0.6 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 ABS @Anycubic Kobra X 0.4 nozzle", "sub_path": "filament/Anycubic ABS @Anycubic Kobra X 0.4 nozzle.json" @@ -556,6 +568,22 @@ "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 S1 Max 0.25 nozzle", + "sub_path": "filament/Anycubic ASA @Anycubic Kobra S1 Max 0.25 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 ASA @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic ASA @Anycubic Kobra S1 Max 0.6 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 ASA @Anycubic Kobra X 0.4 nozzle", "sub_path": "filament/Anycubic ASA @Anycubic Kobra X 0.4 nozzle.json" @@ -564,6 +592,46 @@ "name": "Generic ASA @Anycubic", "sub_path": "filament/Generic ASA @Anycubic.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 PA @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PA @Anycubic Kobra S1 Max 0.6 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.4 nozzle", + "sub_path": "filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.4 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 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.4 nozzle", + "sub_path": "filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.4 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 PAHT-CF @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Fiberon PA6-CF20 @Anycubic Kobra S1", + "sub_path": "filament/Polymaker/Fiberon PA6-CF20 @Anycubic Kobra S1.json" + }, { "name": "Generic PA @Anycubic", "sub_path": "filament/Generic PA @Anycubic.json" @@ -573,16 +641,56 @@ "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": "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 @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PC @Anycubic Kobra S1 Max 0.6 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.4 nozzle", + "sub_path": "filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.4 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-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.4 nozzle", + "sub_path": "filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.4 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 PC-GF @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.8 nozzle.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 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 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 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 @Anycubic Kobra 3 Max 0.4 nozzle", @@ -600,10 +708,46 @@ "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 S1 Max 0.25 nozzle", + "sub_path": "filament/Anycubic PETG @Anycubic Kobra S1 Max 0.25 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 PETG @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PETG @Anycubic Kobra S1 Max 0.6 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 PETG @Anycubic Kobra X 0.4 nozzle", "sub_path": "filament/Anycubic PETG @Anycubic Kobra X 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 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 PETG-CF @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Generic PETG @Anycubic", + "sub_path": "filament/Generic PETG @Anycubic.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": "Generic PETG @Anycubic Kobra X 0.4 nozzle", "sub_path": "filament/Generic PETG @Anycubic Kobra X 0.4 nozzle.json" @@ -612,14 +756,6 @@ "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" @@ -636,6 +772,22 @@ "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 S1 Max 0.25 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra S1 Max 0.25 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 PLA @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PLA @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 PLA @Anycubic Kobra X 0.4 nozzle", "sub_path": "filament/Anycubic PLA @Anycubic Kobra X 0.4 nozzle.json" @@ -652,6 +804,18 @@ "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 S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.4 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 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 High Speed @Anycubic Kobra X 0.4 nozzle", "sub_path": "filament/Anycubic PLA High Speed @Anycubic Kobra X 0.4 nozzle.json" @@ -664,6 +828,18 @@ "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 S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.4 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 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 Matte @Anycubic Kobra X 0.4 nozzle", "sub_path": "filament/Anycubic PLA Matte @Anycubic Kobra X 0.4 nozzle.json" @@ -676,10 +852,26 @@ "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 S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.4 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 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 Silk @Anycubic Kobra X 0.4 nozzle", "sub_path": "filament/Anycubic PLA Silk @Anycubic Kobra X 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 3 Max 0.4 nozzle", "sub_path": "filament/Anycubic PLA+ @Anycubic Kobra 3 Max 0.4 nozzle.json" @@ -688,10 +880,30 @@ "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 S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.4 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+ @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, { "name": "Anycubic PLA+ @Anycubic Kobra X 0.4 nozzle", "sub_path": "filament/Anycubic PLA+ @Anycubic Kobra X 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": "Panchroma PLA @Anycubic Kobra S1", "sub_path": "filament/Polymaker/Panchroma PLA @Anycubic Kobra S1.json" @@ -705,21 +917,53 @@ "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 S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PVA @Anycubic Kobra S1 Max 0.4 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 PVA @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PVA @Anycubic Kobra S1 Max 0.8 nozzle.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": "Generic PVA @Anycubic", + "sub_path": "filament/Generic PVA @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 PEBA @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.4 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 PEBA @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.8 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 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 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 95A @Anycubic Kobra X 0.4 nozzle", "sub_path": "filament/Anycubic TPU 95A @Anycubic Kobra X 0.4 nozzle.json" @@ -740,10 +984,26 @@ "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 S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.4 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 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" + }, { "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 TPU @Anycubic", + "sub_path": "filament/Generic TPU @Anycubic.json" + }, { "name": "Generic ABS @Anycubic Kobra 3 0.4 nozzle", "sub_path": "filament/Generic ABS @Anycubic Kobra 3 0.4 nozzle.json" @@ -796,6 +1056,18 @@ "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 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 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 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 3 0.4 nozzle", "sub_path": "filament/Anycubic PLA High Speed @Anycubic Kobra 3 0.4 nozzle.json" @@ -816,302 +1088,22 @@ "name": "Anycubic PLA+ @Anycubic Kobra 3 0.4 nozzle", "sub_path": "filament/Anycubic PLA+ @Anycubic Kobra 3 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 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 PLA-CF @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.8 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": [ { @@ -1198,22 +1190,22 @@ "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 S1 Max 0.25 nozzle", + "sub_path": "machine/Anycubic Kobra S1 Max 0.25 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.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" diff --git a/resources/profiles/BBL.json b/resources/profiles/BBL.json index 9641788cf7..d7ee1e6b6c 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.24", + "version": "02.01.00.25", "force_update": "0", "description": "BBL configurations", "machine_model_list": [ @@ -251,6 +251,10 @@ "name": "0.08mm Extra Fine @BBL H2DP 0.2 nozzle", "sub_path": "process/0.08mm Extra Fine @BBL H2DP 0.2 nozzle.json" }, + { + "name": "0.08mm High Quality @BBL H2C 0.2 nozzle", + "sub_path": "process/0.08mm High Quality @BBL H2C 0.2 nozzle.json" + }, { "name": "0.08mm High Quality @BBL X2D 0.2 nozzle", "sub_path": "process/0.08mm High Quality @BBL X2D 0.2 nozzle.json" @@ -263,10 +267,18 @@ "name": "0.08mm Extra Fine @BBL H2DP", "sub_path": "process/0.08mm Extra Fine @BBL H2DP.json" }, + { + "name": "0.08mm High Quality @BBL H2C", + "sub_path": "process/0.08mm High Quality @BBL H2C.json" + }, { "name": "0.08mm High Quality @BBL X2D", "sub_path": "process/0.08mm High Quality @BBL X2D.json" }, + { + "name": "0.10mm Standard @BBL H2C 0.2 nozzle", + "sub_path": "process/0.10mm Standard @BBL H2C 0.2 nozzle.json" + }, { "name": "0.10mm Standard @BBL H2D 0.2 nozzle", "sub_path": "process/0.10mm Standard @BBL H2D 0.2 nozzle.json" @@ -279,6 +291,10 @@ "name": "0.10mm Standard @BBL X2D 0.2 nozzle", "sub_path": "process/0.10mm Standard @BBL X2D 0.2 nozzle.json" }, + { + "name": "0.12mm Balanced Quality @BBL H2C 0.2 nozzle", + "sub_path": "process/0.12mm Balanced Quality @BBL H2C 0.2 nozzle.json" + }, { "name": "0.12mm Balanced Quality @BBL H2D 0.2 nozzle", "sub_path": "process/0.12mm Balanced Quality @BBL H2D 0.2 nozzle.json" @@ -299,6 +315,10 @@ "name": "0.12mm Fine @BBL H2DP", "sub_path": "process/0.12mm Fine @BBL H2DP.json" }, + { + "name": "0.12mm High Quality @BBL H2C", + "sub_path": "process/0.12mm High Quality @BBL H2C.json" + }, { "name": "0.12mm High Quality @BBL X2D", "sub_path": "process/0.12mm High Quality @BBL X2D.json" @@ -311,10 +331,18 @@ "name": "0.16mm Balanced Quality @BBL H2DP", "sub_path": "process/0.16mm Balanced Quality @BBL H2DP.json" }, + { + "name": "0.16mm High Quality @BBL H2C", + "sub_path": "process/0.16mm High Quality @BBL H2C.json" + }, { "name": "0.16mm High Quality @BBL X2D", "sub_path": "process/0.16mm High Quality @BBL X2D.json" }, + { + "name": "0.16mm Standard @BBL H2C", + "sub_path": "process/0.16mm Standard @BBL H2C.json" + }, { "name": "0.16mm Standard @BBL H2D", "sub_path": "process/0.16mm Standard @BBL H2D.json" @@ -327,6 +355,10 @@ "name": "0.16mm Standard @BBL X2D", "sub_path": "process/0.16mm Standard @BBL X2D.json" }, + { + "name": "0.18mm Balanced Quality @BBL H2C 0.6 nozzle", + "sub_path": "process/0.18mm Balanced Quality @BBL H2C 0.6 nozzle.json" + }, { "name": "0.18mm Balanced Quality @BBL H2D 0.6 nozzle", "sub_path": "process/0.18mm Balanced Quality @BBL H2D 0.6 nozzle.json" @@ -347,10 +379,18 @@ "name": "0.20mm Balanced Strength @BBL H2DP", "sub_path": "process/0.20mm Balanced Strength @BBL H2DP.json" }, + { + "name": "0.20mm High Quality @BBL H2C", + "sub_path": "process/0.20mm High Quality @BBL H2C.json" + }, { "name": "0.20mm High Quality @BBL X2D", "sub_path": "process/0.20mm High Quality @BBL X2D.json" }, + { + "name": "0.20mm Standard @BBL H2C", + "sub_path": "process/0.20mm Standard @BBL H2C.json" + }, { "name": "0.20mm Standard @BBL H2D", "sub_path": "process/0.20mm Standard @BBL H2D.json" @@ -363,6 +403,10 @@ "name": "0.20mm Standard @BBL X2D", "sub_path": "process/0.20mm Standard @BBL X2D.json" }, + { + "name": "0.24mm Standard @BBL H2C", + "sub_path": "process/0.24mm Standard @BBL H2C.json" + }, { "name": "0.24mm Standard @BBL H2D", "sub_path": "process/0.24mm Standard @BBL H2D.json" @@ -379,6 +423,10 @@ "name": "0.24mm Balanced Quality @BBL X2D 0.6 nozzle", "sub_path": "process/0.24mm Balanced Quality @BBL X2D 0.6 nozzle.json" }, + { + "name": "0.24mm Balanced Strength @BBL H2C 0.6 nozzle", + "sub_path": "process/0.24mm Balanced Strength @BBL H2C 0.6 nozzle.json" + }, { "name": "0.24mm Balanced Strength @BBL H2D 0.6 nozzle", "sub_path": "process/0.24mm Balanced Strength @BBL H2D 0.6 nozzle.json" @@ -387,6 +435,10 @@ "name": "0.24mm Balanced Strength @BBL H2DP 0.6 nozzle", "sub_path": "process/0.24mm Balanced Strength @BBL H2DP 0.6 nozzle.json" }, + { + "name": "0.24mm Balanced Quality @BBL H2C 0.8 nozzle", + "sub_path": "process/0.24mm Balanced Quality @BBL H2C 0.8 nozzle.json" + }, { "name": "0.24mm Balanced Quality @BBL H2D 0.8 nozzle", "sub_path": "process/0.24mm Balanced Quality @BBL H2D 0.8 nozzle.json" @@ -399,6 +451,10 @@ "name": "0.24mm Balanced Quality @BBL X2D 0.8 nozzle", "sub_path": "process/0.24mm Balanced Quality @BBL X2D 0.8 nozzle.json" }, + { + "name": "0.30mm Standard @BBL H2C 0.6 nozzle", + "sub_path": "process/0.30mm Standard @BBL H2C 0.6 nozzle.json" + }, { "name": "0.30mm Standard @BBL H2D 0.6 nozzle", "sub_path": "process/0.30mm Standard @BBL H2D 0.6 nozzle.json" @@ -415,6 +471,10 @@ "name": "0.32mm Balanced Quality @BBL X2D 0.8 nozzle", "sub_path": "process/0.32mm Balanced Quality @BBL X2D 0.8 nozzle.json" }, + { + "name": "0.32mm Balanced Strength @BBL H2C 0.8 nozzle", + "sub_path": "process/0.32mm Balanced Strength @BBL H2C 0.8 nozzle.json" + }, { "name": "0.32mm Balanced Strength @BBL H2D 0.8 nozzle", "sub_path": "process/0.32mm Balanced Strength @BBL H2D 0.8 nozzle.json" @@ -423,6 +483,10 @@ "name": "0.32mm Balanced Strength @BBL H2DP 0.8 nozzle", "sub_path": "process/0.32mm Balanced Strength @BBL H2DP 0.8 nozzle.json" }, + { + "name": "0.40mm Standard @BBL H2C 0.8 nozzle", + "sub_path": "process/0.40mm Standard @BBL H2C 0.8 nozzle.json" + }, { "name": "0.40mm Standard @BBL H2D 0.8 nozzle", "sub_path": "process/0.40mm Standard @BBL H2D 0.8 nozzle.json" @@ -491,6 +555,10 @@ "name": "0.08mm High Quality @BBL A1M", "sub_path": "process/0.08mm High Quality @BBL A1M.json" }, + { + "name": "0.08mm High Quality @BBL A2L", + "sub_path": "process/0.08mm High Quality @BBL A2L.json" + }, { "name": "0.08mm High Quality @BBL H2S", "sub_path": "process/0.08mm High Quality @BBL H2S.json" @@ -515,6 +583,10 @@ "name": "0.08mm High Quality @BBL A1M 0.2 nozzle", "sub_path": "process/0.08mm High Quality @BBL A1M 0.2 nozzle.json" }, + { + "name": "0.08mm High Quality @BBL A2L 0.2 nozzle", + "sub_path": "process/0.08mm High Quality @BBL A2L 0.2 nozzle.json" + }, { "name": "0.08mm High Quality @BBL H2S 0.2 nozzle", "sub_path": "process/0.08mm High Quality @BBL H2S 0.2 nozzle.json" @@ -571,6 +643,10 @@ "name": "0.10mm Standard @BBL A1M 0.2 nozzle", "sub_path": "process/0.10mm Standard @BBL A1M 0.2 nozzle.json" }, + { + "name": "0.10mm Standard @BBL A2L 0.2 nozzle", + "sub_path": "process/0.10mm Standard @BBL A2L 0.2 nozzle.json" + }, { "name": "0.10mm Standard @BBL H2S 0.2 nozzle", "sub_path": "process/0.10mm Standard @BBL H2S 0.2 nozzle.json" @@ -611,6 +687,10 @@ "name": "0.12mm High Quality @BBL A1M", "sub_path": "process/0.12mm High Quality @BBL A1M.json" }, + { + "name": "0.12mm High Quality @BBL A2L", + "sub_path": "process/0.12mm High Quality @BBL A2L.json" + }, { "name": "0.12mm High Quality @BBL H2S", "sub_path": "process/0.12mm High Quality @BBL H2S.json" @@ -627,6 +707,10 @@ "name": "0.12mm High Quality @BBL X1C", "sub_path": "process/0.12mm High Quality @BBL X1C.json" }, + { + "name": "0.12mm Balanced Quality @BBL A2L 0.2 nozzle", + "sub_path": "process/0.12mm Balanced Quality @BBL A2L 0.2 nozzle.json" + }, { "name": "0.12mm Balanced Quality @BBL H2S 0.2 nozzle", "sub_path": "process/0.12mm Balanced Quality @BBL H2S 0.2 nozzle.json" @@ -675,6 +759,10 @@ "name": "0.16mm High Quality @BBL A1M", "sub_path": "process/0.16mm High Quality @BBL A1M.json" }, + { + "name": "0.16mm High Quality @BBL A2L", + "sub_path": "process/0.16mm High Quality @BBL A2L.json" + }, { "name": "0.16mm High Quality @BBL H2S", "sub_path": "process/0.16mm High Quality @BBL H2S.json" @@ -707,6 +795,10 @@ "name": "0.16mm Optimal @BBL X1C", "sub_path": "process/0.16mm Optimal @BBL X1C.json" }, + { + "name": "0.16mm Standard @BBL A2L", + "sub_path": "process/0.16mm Standard @BBL A2L.json" + }, { "name": "0.16mm Standard @BBL H2S", "sub_path": "process/0.16mm Standard @BBL H2S.json" @@ -715,6 +807,10 @@ "name": "0.16mm Standard @BBL P2S", "sub_path": "process/0.16mm Standard @BBL P2S.json" }, + { + "name": "0.18mm Balanced Quality @BBL A2L 0.6 nozzle", + "sub_path": "process/0.18mm Balanced Quality @BBL A2L 0.6 nozzle.json" + }, { "name": "0.18mm Balanced Quality @BBL H2S 0.6 nozzle", "sub_path": "process/0.18mm Balanced Quality @BBL H2S 0.6 nozzle.json" @@ -739,6 +835,10 @@ "name": "0.18mm Standard @BBL X1C 0.6 nozzle", "sub_path": "process/0.18mm Standard @BBL X1C 0.6 nozzle.json" }, + { + "name": "0.20mm High Quality @BBL A2L", + "sub_path": "process/0.20mm High Quality @BBL A2L.json" + }, { "name": "0.20mm High Quality @BBL H2S", "sub_path": "process/0.20mm High Quality @BBL H2S.json" @@ -755,6 +855,10 @@ "name": "0.20mm Standard @BBL A1M", "sub_path": "process/0.20mm Standard @BBL A1M.json" }, + { + "name": "0.20mm Standard @BBL A2L", + "sub_path": "process/0.20mm Standard @BBL A2L.json" + }, { "name": "0.20mm Standard @BBL H2S", "sub_path": "process/0.20mm Standard @BBL H2S.json" @@ -771,6 +875,10 @@ "name": "0.20mm Standard @BBL X1C", "sub_path": "process/0.20mm Standard @BBL X1C.json" }, + { + "name": "0.20mm Steady @BBL A2L", + "sub_path": "process/0.20mm Steady @BBL A2L.json" + }, { "name": "0.20mm Strength @BBL A1", "sub_path": "process/0.20mm Strength @BBL A1.json" @@ -803,6 +911,10 @@ "name": "0.24mm Draft @BBL X1C", "sub_path": "process/0.24mm Draft @BBL X1C.json" }, + { + "name": "0.24mm Standard @BBL A2L", + "sub_path": "process/0.24mm Standard @BBL A2L.json" + }, { "name": "0.24mm Standard @BBL H2S", "sub_path": "process/0.24mm Standard @BBL H2S.json" @@ -811,6 +923,10 @@ "name": "0.24mm Standard @BBL P2S", "sub_path": "process/0.24mm Standard @BBL P2S.json" }, + { + "name": "0.24mm Balanced Quality @BBL A2L 0.6 nozzle", + "sub_path": "process/0.24mm Balanced Quality @BBL A2L 0.6 nozzle.json" + }, { "name": "0.24mm Balanced Quality @BBL H2S 0.6 nozzle", "sub_path": "process/0.24mm Balanced Quality @BBL H2S 0.6 nozzle.json" @@ -835,6 +951,10 @@ "name": "0.24mm Standard @BBL X1C 0.6 nozzle", "sub_path": "process/0.24mm Standard @BBL X1C 0.6 nozzle.json" }, + { + "name": "0.24mm Balanced Quality @BBL A2L 0.8 nozzle", + "sub_path": "process/0.24mm Balanced Quality @BBL A2L 0.8 nozzle.json" + }, { "name": "0.24mm Balanced Quality @BBL H2S 0.8 nozzle", "sub_path": "process/0.24mm Balanced Quality @BBL H2S 0.8 nozzle.json" @@ -883,6 +1003,10 @@ "name": "0.30mm Standard @BBL A1M 0.6 nozzle", "sub_path": "process/0.30mm Standard @BBL A1M 0.6 nozzle.json" }, + { + "name": "0.30mm Standard @BBL A2L 0.6 nozzle", + "sub_path": "process/0.30mm Standard @BBL A2L 0.6 nozzle.json" + }, { "name": "0.30mm Standard @BBL H2S 0.6 nozzle", "sub_path": "process/0.30mm Standard @BBL H2S 0.6 nozzle.json" @@ -919,6 +1043,10 @@ "name": "0.30mm Strength @BBL X1C 0.6 nozzle", "sub_path": "process/0.30mm Strength @BBL X1C 0.6 nozzle.json" }, + { + "name": "0.32mm Balanced Quality @BBL A2L 0.8 nozzle", + "sub_path": "process/0.32mm Balanced Quality @BBL A2L 0.8 nozzle.json" + }, { "name": "0.32mm Balanced Quality @BBL H2S 0.8 nozzle", "sub_path": "process/0.32mm Balanced Quality @BBL H2S 0.8 nozzle.json" @@ -967,6 +1095,10 @@ "name": "0.40mm Standard @BBL A1M 0.8 nozzle", "sub_path": "process/0.40mm Standard @BBL A1M 0.8 nozzle.json" }, + { + "name": "0.40mm Standard @BBL A2L 0.8 nozzle", + "sub_path": "process/0.40mm Standard @BBL A2L 0.8 nozzle.json" + }, { "name": "0.40mm Standard @BBL H2S 0.8 nozzle", "sub_path": "process/0.40mm Standard @BBL H2S 0.8 nozzle.json" @@ -1034,138 +1166,6 @@ { "name": "0.56mm Standard @BBL X1C 0.8 nozzle", "sub_path": "process/0.56mm Standard @BBL X1C 0.8 nozzle.json" - }, - { - "name": "0.08mm High Quality @BBL A2L", - "sub_path": "process/0.08mm High Quality @BBL A2L.json" - }, - { - "name": "0.08mm High Quality @BBL A2L 0.2 nozzle", - "sub_path": "process/0.08mm High Quality @BBL A2L 0.2 nozzle.json" - }, - { - "name": "0.08mm High Quality @BBL H2C", - "sub_path": "process/0.08mm High Quality @BBL H2C.json" - }, - { - "name": "0.08mm High Quality @BBL H2C 0.2 nozzle", - "sub_path": "process/0.08mm High Quality @BBL H2C 0.2 nozzle.json" - }, - { - "name": "0.10mm Standard @BBL A2L 0.2 nozzle", - "sub_path": "process/0.10mm Standard @BBL A2L 0.2 nozzle.json" - }, - { - "name": "0.10mm Standard @BBL H2C 0.2 nozzle", - "sub_path": "process/0.10mm Standard @BBL H2C 0.2 nozzle.json" - }, - { - "name": "0.12mm Balanced Quality @BBL A2L 0.2 nozzle", - "sub_path": "process/0.12mm Balanced Quality @BBL A2L 0.2 nozzle.json" - }, - { - "name": "0.12mm Balanced Quality @BBL H2C 0.2 nozzle", - "sub_path": "process/0.12mm Balanced Quality @BBL H2C 0.2 nozzle.json" - }, - { - "name": "0.12mm High Quality @BBL A2L", - "sub_path": "process/0.12mm High Quality @BBL A2L.json" - }, - { - "name": "0.12mm High Quality @BBL H2C", - "sub_path": "process/0.12mm High Quality @BBL H2C.json" - }, - { - "name": "0.16mm High Quality @BBL A2L", - "sub_path": "process/0.16mm High Quality @BBL A2L.json" - }, - { - "name": "0.16mm High Quality @BBL H2C", - "sub_path": "process/0.16mm High Quality @BBL H2C.json" - }, - { - "name": "0.16mm Standard @BBL A2L", - "sub_path": "process/0.16mm Standard @BBL A2L.json" - }, - { - "name": "0.16mm Standard @BBL H2C", - "sub_path": "process/0.16mm Standard @BBL H2C.json" - }, - { - "name": "0.18mm Balanced Quality @BBL A2L 0.6 nozzle", - "sub_path": "process/0.18mm Balanced Quality @BBL A2L 0.6 nozzle.json" - }, - { - "name": "0.18mm Balanced Quality @BBL H2C 0.6 nozzle", - "sub_path": "process/0.18mm Balanced Quality @BBL H2C 0.6 nozzle.json" - }, - { - "name": "0.20mm High Quality @BBL A2L", - "sub_path": "process/0.20mm High Quality @BBL A2L.json" - }, - { - "name": "0.20mm High Quality @BBL H2C", - "sub_path": "process/0.20mm High Quality @BBL H2C.json" - }, - { - "name": "0.20mm Standard @BBL A2L", - "sub_path": "process/0.20mm Standard @BBL A2L.json" - }, - { - "name": "0.20mm Standard @BBL H2C", - "sub_path": "process/0.20mm Standard @BBL H2C.json" - }, - { - "name": "0.20mm Steady @BBL A2L", - "sub_path": "process/0.20mm Steady @BBL A2L.json" - }, - { - "name": "0.24mm Balanced Quality @BBL A2L 0.6 nozzle", - "sub_path": "process/0.24mm Balanced Quality @BBL A2L 0.6 nozzle.json" - }, - { - "name": "0.24mm Balanced Quality @BBL A2L 0.8 nozzle", - "sub_path": "process/0.24mm Balanced Quality @BBL A2L 0.8 nozzle.json" - }, - { - "name": "0.24mm Balanced Quality @BBL H2C 0.8 nozzle", - "sub_path": "process/0.24mm Balanced Quality @BBL H2C 0.8 nozzle.json" - }, - { - "name": "0.24mm Balanced Strength @BBL H2C 0.6 nozzle", - "sub_path": "process/0.24mm Balanced Strength @BBL H2C 0.6 nozzle.json" - }, - { - "name": "0.24mm Standard @BBL A2L", - "sub_path": "process/0.24mm Standard @BBL A2L.json" - }, - { - "name": "0.24mm Standard @BBL H2C", - "sub_path": "process/0.24mm Standard @BBL H2C.json" - }, - { - "name": "0.30mm Standard @BBL A2L 0.6 nozzle", - "sub_path": "process/0.30mm Standard @BBL A2L 0.6 nozzle.json" - }, - { - "name": "0.30mm Standard @BBL H2C 0.6 nozzle", - "sub_path": "process/0.30mm Standard @BBL H2C 0.6 nozzle.json" - }, - { - "name": "0.32mm Balanced Quality @BBL A2L 0.8 nozzle", - "sub_path": "process/0.32mm Balanced Quality @BBL A2L 0.8 nozzle.json" - }, - { - "name": "0.32mm Balanced Strength @BBL H2C 0.8 nozzle", - "sub_path": "process/0.32mm Balanced Strength @BBL H2C 0.8 nozzle.json" - }, - { - "name": "0.40mm Standard @BBL A2L 0.8 nozzle", - "sub_path": "process/0.40mm Standard @BBL A2L 0.8 nozzle.json" - }, - { - "name": "0.40mm Standard @BBL H2C 0.8 nozzle", - "sub_path": "process/0.40mm Standard @BBL H2C 0.8 nozzle.json" } ], "filament_list": [ @@ -1733,6 +1733,10 @@ "name": "Bambu PLA Metal @base", "sub_path": "filament/Bambu PLA Metal @base.json" }, + { + "name": "Bambu PLA Pure @base", + "sub_path": "filament/Bambu PLA Pure @base.json" + }, { "name": "Bambu PLA Silk @base", "sub_path": "filament/Bambu PLA Silk @base.json" @@ -2077,6 +2081,22 @@ "name": "Bambu ABS @BBL A1 0.2 nozzle", "sub_path": "filament/Bambu ABS @BBL A1 0.2 nozzle.json" }, + { + "name": "Bambu ABS @BBL H2C", + "sub_path": "filament/Bambu ABS @BBL H2C.json" + }, + { + "name": "Bambu ABS @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu ABS @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu ABS @BBL H2C 0.6 nozzle", + "sub_path": "filament/Bambu ABS @BBL H2C 0.6 nozzle.json" + }, + { + "name": "Bambu ABS @BBL H2C 0.8 nozzle", + "sub_path": "filament/Bambu ABS @BBL H2C 0.8 nozzle.json" + }, { "name": "Bambu ABS @BBL H2D", "sub_path": "filament/Bambu ABS @BBL H2D.json" @@ -2193,6 +2213,14 @@ "name": "Bambu ABS-GF @BBL A1", "sub_path": "filament/Bambu ABS-GF @BBL A1.json" }, + { + "name": "Bambu ABS-GF @BBL H2C", + "sub_path": "filament/Bambu ABS-GF @BBL H2C.json" + }, + { + "name": "Bambu ABS-GF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu ABS-GF @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu ABS-GF @BBL H2D", "sub_path": "filament/Bambu ABS-GF @BBL H2D.json" @@ -2229,6 +2257,14 @@ "name": "Bambu Support for ABS @BBL A1", "sub_path": "filament/Bambu Support for ABS @BBL A1.json" }, + { + "name": "Bambu Support for ABS @BBL H2C", + "sub_path": "filament/Bambu Support for ABS @BBL H2C.json" + }, + { + "name": "Bambu Support for ABS @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu Support for ABS @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu Support for ABS @BBL H2D", "sub_path": "filament/Bambu Support for ABS @BBL H2D.json" @@ -2273,6 +2309,18 @@ "name": "Generic ABS @BBL A1 0.2 nozzle", "sub_path": "filament/Generic ABS @BBL A1 0.2 nozzle.json" }, + { + "name": "Generic ABS @BBL H2C", + "sub_path": "filament/Generic ABS @BBL H2C.json" + }, + { + "name": "Generic ABS @BBL H2C 0.2 nozzle", + "sub_path": "filament/Generic ABS @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Generic ABS @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic ABS @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic ABS @BBL H2D", "sub_path": "filament/Generic ABS @BBL H2D.json" @@ -2385,6 +2433,22 @@ "name": "Bambu ASA @BBL A1 0.6 nozzle", "sub_path": "filament/Bambu ASA @BBL A1 0.6 nozzle.json" }, + { + "name": "Bambu ASA @BBL H2C", + "sub_path": "filament/Bambu ASA @BBL H2C.json" + }, + { + "name": "Bambu ASA @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu ASA @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu ASA @BBL H2C 0.6 nozzle", + "sub_path": "filament/Bambu ASA @BBL H2C 0.6 nozzle.json" + }, + { + "name": "Bambu ASA @BBL H2C 0.8 nozzle", + "sub_path": "filament/Bambu ASA @BBL H2C 0.8 nozzle.json" + }, { "name": "Bambu ASA @BBL H2D 0.2 nozzle", "sub_path": "filament/Bambu ASA @BBL H2D 0.2 nozzle.json" @@ -2497,6 +2561,14 @@ "name": "Bambu ASA-Aero @BBL A1", "sub_path": "filament/Bambu ASA-Aero @BBL A1.json" }, + { + "name": "Bambu ASA-Aero @BBL H2C", + "sub_path": "filament/Bambu ASA-Aero @BBL H2C.json" + }, + { + "name": "Bambu ASA-Aero @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu ASA-Aero @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu ASA-Aero @BBL H2D", "sub_path": "filament/Bambu ASA-Aero @BBL H2D.json" @@ -2537,6 +2609,14 @@ "name": "Bambu ASA-CF @BBL A1 0.6 nozzle", "sub_path": "filament/Bambu ASA-CF @BBL A1 0.6 nozzle.json" }, + { + "name": "Bambu ASA-CF @BBL H2C", + "sub_path": "filament/Bambu ASA-CF @BBL H2C.json" + }, + { + "name": "Bambu ASA-CF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu ASA-CF @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu ASA-CF @BBL H2D 0.4 nozzle", "sub_path": "filament/Bambu ASA-CF @BBL H2D 0.4 nozzle.json" @@ -2605,6 +2685,18 @@ "name": "Generic ASA @BBL A1 0.2 nozzle", "sub_path": "filament/Generic ASA @BBL A1 0.2 nozzle.json" }, + { + "name": "Generic ASA @BBL H2C", + "sub_path": "filament/Generic ASA @BBL H2C.json" + }, + { + "name": "Generic ASA @BBL H2C 0.2 nozzle", + "sub_path": "filament/Generic ASA @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Generic ASA @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic ASA @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic ASA @BBL H2D", "sub_path": "filament/Generic ASA @BBL H2D.json" @@ -2693,6 +2785,18 @@ "name": "Generic BVOH @BBL A1M", "sub_path": "filament/Generic BVOH @BBL A1M.json" }, + { + "name": "Generic BVOH @BBL A2L", + "sub_path": "filament/Generic BVOH @BBL A2L.json" + }, + { + "name": "Generic BVOH @BBL H2C", + "sub_path": "filament/Generic BVOH @BBL H2C.json" + }, + { + "name": "Generic BVOH @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic BVOH @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic BVOH @BBL H2D", "sub_path": "filament/Generic BVOH @BBL H2D.json" @@ -2729,6 +2833,18 @@ "name": "Generic EVA @BBL A1M", "sub_path": "filament/Generic EVA @BBL A1M.json" }, + { + "name": "Generic EVA @BBL A2L", + "sub_path": "filament/Generic EVA @BBL A2L.json" + }, + { + "name": "Generic EVA @BBL H2C", + "sub_path": "filament/Generic EVA @BBL H2C.json" + }, + { + "name": "Generic EVA @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic EVA @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic EVA @BBL H2D", "sub_path": "filament/Generic EVA @BBL H2D.json" @@ -2781,6 +2897,26 @@ "name": "Generic HIPS @BBL A1M 0.2 nozzle", "sub_path": "filament/Generic HIPS @BBL A1M 0.2 nozzle.json" }, + { + "name": "Generic HIPS @BBL A2L", + "sub_path": "filament/Generic HIPS @BBL A2L.json" + }, + { + "name": "Generic HIPS @BBL A2L 0.2 nozzle", + "sub_path": "filament/Generic HIPS @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Generic HIPS @BBL H2C", + "sub_path": "filament/Generic HIPS @BBL H2C.json" + }, + { + "name": "Generic HIPS @BBL H2C 0.2 nozzle", + "sub_path": "filament/Generic HIPS @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Generic HIPS @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic HIPS @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic HIPS @BBL H2D", "sub_path": "filament/Generic HIPS @BBL H2D.json" @@ -2849,6 +2985,14 @@ "name": "Bambu PA-CF @BBL A1", "sub_path": "filament/Bambu PA-CF @BBL A1.json" }, + { + "name": "Bambu PA-CF @BBL H2C", + "sub_path": "filament/Bambu PA-CF @BBL H2C.json" + }, + { + "name": "Bambu PA-CF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PA-CF @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PA-CF @BBL H2D", "sub_path": "filament/Bambu PA-CF @BBL H2D.json" @@ -2889,6 +3033,14 @@ "name": "Bambu PA6-CF @BBL A1", "sub_path": "filament/Bambu PA6-CF @BBL A1.json" }, + { + "name": "Bambu PA6-CF @BBL H2C", + "sub_path": "filament/Bambu PA6-CF @BBL H2C.json" + }, + { + "name": "Bambu PA6-CF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PA6-CF @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PA6-CF @BBL H2D", "sub_path": "filament/Bambu PA6-CF @BBL H2D.json" @@ -2925,6 +3077,14 @@ "name": "Bambu PA6-GF @BBL A1", "sub_path": "filament/Bambu PA6-GF @BBL A1.json" }, + { + "name": "Bambu PA6-GF @BBL H2C", + "sub_path": "filament/Bambu PA6-GF @BBL H2C.json" + }, + { + "name": "Bambu PA6-GF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PA6-GF @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PA6-GF @BBL H2D", "sub_path": "filament/Bambu PA6-GF @BBL H2D.json" @@ -2961,6 +3121,14 @@ "name": "Bambu PAHT-CF @BBL A1", "sub_path": "filament/Bambu PAHT-CF @BBL A1.json" }, + { + "name": "Bambu PAHT-CF @BBL H2C", + "sub_path": "filament/Bambu PAHT-CF @BBL H2C.json" + }, + { + "name": "Bambu PAHT-CF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PAHT-CF @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PAHT-CF @BBL H2D", "sub_path": "filament/Bambu PAHT-CF @BBL H2D.json" @@ -2997,6 +3165,14 @@ "name": "Bambu Support For PA/PET @BBL A1", "sub_path": "filament/Bambu Support For PA PET @BBL A1.json" }, + { + "name": "Bambu Support For PA/PET @BBL H2C", + "sub_path": "filament/Bambu Support For PA PET @BBL H2C.json" + }, + { + "name": "Bambu Support For PA/PET @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu Support For PA PET @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu Support For PA/PET @BBL H2D", "sub_path": "filament/Bambu Support For PA PET @BBL H2D.json" @@ -3033,6 +3209,14 @@ "name": "Bambu Support G @BBL A1", "sub_path": "filament/Bambu Support G @BBL A1.json" }, + { + "name": "Bambu Support G @BBL H2C", + "sub_path": "filament/Bambu Support G @BBL H2C.json" + }, + { + "name": "Bambu Support G @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu Support G @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu Support G @BBL H2D", "sub_path": "filament/Bambu Support G @BBL H2D.json" @@ -3121,6 +3305,14 @@ "name": "Generic PA", "sub_path": "filament/Generic PA.json" }, + { + "name": "Generic PA @BBL H2C", + "sub_path": "filament/Generic PA @BBL H2C.json" + }, + { + "name": "Generic PA @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PA @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PA @BBL H2D", "sub_path": "filament/Generic PA @BBL H2D.json" @@ -3201,6 +3393,22 @@ "name": "Bambu PC @BBL A1 0.2 nozzle", "sub_path": "filament/Bambu PC @BBL A1 0.2 nozzle.json" }, + { + "name": "Bambu PC @BBL H2C", + "sub_path": "filament/Bambu PC @BBL H2C.json" + }, + { + "name": "Bambu PC @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu PC @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu PC @BBL H2C 0.6 nozzle", + "sub_path": "filament/Bambu PC @BBL H2C 0.6 nozzle.json" + }, + { + "name": "Bambu PC @BBL H2C 0.8 nozzle", + "sub_path": "filament/Bambu PC @BBL H2C 0.8 nozzle.json" + }, { "name": "Bambu PC @BBL H2D 0.2 nozzle", "sub_path": "filament/Bambu PC @BBL H2D 0.2 nozzle.json" @@ -3321,6 +3529,18 @@ "name": "Bambu PC FR @BBL A1 0.2 nozzle", "sub_path": "filament/Bambu PC FR @BBL A1 0.2 nozzle.json" }, + { + "name": "Bambu PC FR @BBL H2C", + "sub_path": "filament/Bambu PC FR @BBL H2C.json" + }, + { + "name": "Bambu PC FR @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu PC FR @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu PC FR @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PC FR @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PC FR @BBL H2D 0.2 nozzle", "sub_path": "filament/Bambu PC FR @BBL H2D 0.2 nozzle.json" @@ -3457,6 +3677,18 @@ "name": "Generic PC @BBL A1 0.2 nozzle", "sub_path": "filament/Generic PC @BBL A1 0.2 nozzle.json" }, + { + "name": "Generic PC @BBL H2C", + "sub_path": "filament/Generic PC @BBL H2C.json" + }, + { + "name": "Generic PC @BBL H2C 0.2 nozzle", + "sub_path": "filament/Generic PC @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Generic PC @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PC @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PC @BBL H2D", "sub_path": "filament/Generic PC @BBL H2D.json" @@ -3505,6 +3737,18 @@ "name": "Generic PCTG @BBL A1M", "sub_path": "filament/Generic PCTG @BBL A1M.json" }, + { + "name": "Generic PCTG @BBL A2L", + "sub_path": "filament/Generic PCTG @BBL A2L.json" + }, + { + "name": "Generic PCTG @BBL H2C", + "sub_path": "filament/Generic PCTG @BBL H2C.json" + }, + { + "name": "Generic PCTG @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PCTG @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PCTG @BBL H2D", "sub_path": "filament/Generic PCTG @BBL H2D.json" @@ -3541,6 +3785,18 @@ "name": "Generic PE @BBL A1M", "sub_path": "filament/Generic PE @BBL A1M.json" }, + { + "name": "Generic PE @BBL A2L", + "sub_path": "filament/Generic PE @BBL A2L.json" + }, + { + "name": "Generic PE @BBL H2C", + "sub_path": "filament/Generic PE @BBL H2C.json" + }, + { + "name": "Generic PE @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PE @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PE @BBL H2D", "sub_path": "filament/Generic PE @BBL H2D.json" @@ -3577,6 +3833,18 @@ "name": "Generic PE-CF @BBL A1M", "sub_path": "filament/Generic PE-CF @BBL A1M.json" }, + { + "name": "Generic PE-CF @BBL A2L", + "sub_path": "filament/Generic PE-CF @BBL A2L.json" + }, + { + "name": "Generic PE-CF @BBL H2C", + "sub_path": "filament/Generic PE-CF @BBL H2C.json" + }, + { + "name": "Generic PE-CF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PE-CF @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PE-CF @BBL H2D", "sub_path": "filament/Generic PE-CF @BBL H2D.json" @@ -3841,6 +4109,14 @@ "name": "Bambu PET-CF @BBL A1", "sub_path": "filament/Bambu PET-CF @BBL A1.json" }, + { + "name": "Bambu PET-CF @BBL H2C", + "sub_path": "filament/Bambu PET-CF @BBL H2C.json" + }, + { + "name": "Bambu PET-CF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PET-CF @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PET-CF @BBL H2D", "sub_path": "filament/Bambu PET-CF @BBL H2D.json" @@ -3901,6 +4177,34 @@ "name": "Bambu PETG Basic @BBL A1M 0.8 nozzle", "sub_path": "filament/Bambu PETG Basic @BBL A1M 0.8 nozzle.json" }, + { + "name": "Bambu PETG Basic @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu PETG Basic @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu PETG Basic @BBL A2L 0.4 nozzle", + "sub_path": "filament/Bambu PETG Basic @BBL A2L 0.4 nozzle.json" + }, + { + "name": "Bambu PETG Basic @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PETG Basic @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PETG Basic @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PETG Basic @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PETG Basic @BBL H2C", + "sub_path": "filament/Bambu PETG Basic @BBL H2C.json" + }, + { + "name": "Bambu PETG Basic @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu PETG Basic @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu PETG Basic @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PETG Basic @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PETG Basic @BBL H2D 0.2 nozzle", "sub_path": "filament/Bambu PETG Basic @BBL H2D 0.2 nozzle.json" @@ -3997,6 +4301,38 @@ "name": "Bambu PETG HF @BBL A1M 0.8 nozzle", "sub_path": "filament/Bambu PETG HF @BBL A1M 0.8 nozzle.json" }, + { + "name": "Bambu PETG HF @BBL A2L", + "sub_path": "filament/Bambu PETG HF @BBL A2L.json" + }, + { + "name": "Bambu PETG HF @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu PETG HF @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu PETG HF @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PETG HF @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PETG HF @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PETG HF @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PETG HF @BBL H2C", + "sub_path": "filament/Bambu PETG HF @BBL H2C.json" + }, + { + "name": "Bambu PETG HF @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu PETG HF @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu PETG HF @BBL H2C 0.6 nozzle", + "sub_path": "filament/Bambu PETG HF @BBL H2C 0.6 nozzle.json" + }, + { + "name": "Bambu PETG HF @BBL H2C 0.8 nozzle", + "sub_path": "filament/Bambu PETG HF @BBL H2C 0.8 nozzle.json" + }, { "name": "Bambu PETG HF @BBL H2D 0.2 nozzle", "sub_path": "filament/Bambu PETG HF @BBL H2D 0.2 nozzle.json" @@ -4105,6 +4441,34 @@ "name": "Bambu PETG Translucent @BBL A1M 0.8 nozzle", "sub_path": "filament/Bambu PETG Translucent @BBL A1M 0.8 nozzle.json" }, + { + "name": "Bambu PETG Translucent @BBL A2L", + "sub_path": "filament/Bambu PETG Translucent @BBL A2L.json" + }, + { + "name": "Bambu PETG Translucent @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu PETG Translucent @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu PETG Translucent @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PETG Translucent @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PETG Translucent @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PETG Translucent @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PETG Translucent @BBL H2C", + "sub_path": "filament/Bambu PETG Translucent @BBL H2C.json" + }, + { + "name": "Bambu PETG Translucent @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu PETG Translucent @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu PETG Translucent @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PETG Translucent @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PETG Translucent @BBL H2D 0.2 nozzle", "sub_path": "filament/Bambu PETG Translucent @BBL H2D 0.2 nozzle.json" @@ -4189,6 +4553,26 @@ "name": "Bambu PETG-CF @BBL A1M", "sub_path": "filament/Bambu PETG-CF @BBL A1M.json" }, + { + "name": "Bambu PETG-CF @BBL A2L", + "sub_path": "filament/Bambu PETG-CF @BBL A2L.json" + }, + { + "name": "Bambu PETG-CF @BBL A2L 0.4 nozzle", + "sub_path": "filament/Bambu PETG-CF @BBL A2L 0.4 nozzle.json" + }, + { + "name": "Bambu PETG-CF @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PETG-CF @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PETG-CF @BBL H2C", + "sub_path": "filament/Bambu PETG-CF @BBL H2C.json" + }, + { + "name": "Bambu PETG-CF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PETG-CF @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PETG-CF @BBL H2D 0.4 nozzle", "sub_path": "filament/Bambu PETG-CF @BBL H2D 0.4 nozzle.json" @@ -4305,6 +4689,26 @@ "name": "Generic PETG @BBL A1M 0.2 nozzle", "sub_path": "filament/Generic PETG @BBL A1M 0.2 nozzle.json" }, + { + "name": "Generic PETG @BBL A2L", + "sub_path": "filament/Generic PETG @BBL A2L.json" + }, + { + "name": "Generic PETG @BBL A2L 0.2 nozzle", + "sub_path": "filament/Generic PETG @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Generic PETG @BBL H2C", + "sub_path": "filament/Generic PETG @BBL H2C.json" + }, + { + "name": "Generic PETG @BBL H2C 0.2 nozzle", + "sub_path": "filament/Generic PETG @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Generic PETG @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PETG @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PETG @BBL H2D", "sub_path": "filament/Generic PETG @BBL H2D.json" @@ -4397,6 +4801,26 @@ "name": "Generic PETG HF @BBL A1M 0.2 nozzle", "sub_path": "filament/Generic PETG HF @BBL A1M 0.2 nozzle.json" }, + { + "name": "Generic PETG HF @BBL A2L", + "sub_path": "filament/Generic PETG HF @BBL A2L.json" + }, + { + "name": "Generic PETG HF @BBL A2L 0.2 nozzle", + "sub_path": "filament/Generic PETG HF @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Generic PETG HF @BBL H2C", + "sub_path": "filament/Generic PETG HF @BBL H2C.json" + }, + { + "name": "Generic PETG HF @BBL H2C 0.2 nozzle", + "sub_path": "filament/Generic PETG HF @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Generic PETG HF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PETG HF @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PETG HF @BBL H2D", "sub_path": "filament/Generic PETG HF @BBL H2D.json" @@ -4469,6 +4893,18 @@ "name": "Generic PETG-CF @BBL A1M", "sub_path": "filament/P1P/Generic PETG-CF @BBL A1M.json" }, + { + "name": "Generic PETG-CF @BBL A2L", + "sub_path": "filament/Generic PETG-CF @BBL A2L.json" + }, + { + "name": "Generic PETG-CF @BBL H2C", + "sub_path": "filament/Generic PETG-CF @BBL H2C.json" + }, + { + "name": "Generic PETG-CF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PETG-CF @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PETG-CF @BBL H2D", "sub_path": "filament/Generic PETG-CF @BBL H2D.json" @@ -4593,6 +5029,18 @@ "name": "Generic PHA @BBL A1M", "sub_path": "filament/Generic PHA @BBL A1M.json" }, + { + "name": "Generic PHA @BBL A2L", + "sub_path": "filament/Generic PHA @BBL A2L.json" + }, + { + "name": "Generic PHA @BBL H2C", + "sub_path": "filament/Generic PHA @BBL H2C.json" + }, + { + "name": "Generic PHA @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PHA @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PHA @BBL H2D", "sub_path": "filament/Generic PHA @BBL H2D.json" @@ -5049,6 +5497,26 @@ "name": "Bambu PLA Aero @BBL A1M", "sub_path": "filament/Bambu PLA Aero @BBL A1M.json" }, + { + "name": "Bambu PLA Aero @BBL A2L", + "sub_path": "filament/Bambu PLA Aero @BBL A2L.json" + }, + { + "name": "Bambu PLA Aero @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PLA Aero @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Aero @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PLA Aero @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Aero @BBL H2C", + "sub_path": "filament/Bambu PLA Aero @BBL H2C.json" + }, + { + "name": "Bambu PLA Aero @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PLA Aero @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PLA Aero @BBL H2D", "sub_path": "filament/Bambu PLA Aero @BBL H2D.json" @@ -5101,6 +5569,38 @@ "name": "Bambu PLA Basic @BBL A1M 0.2 nozzle", "sub_path": "filament/Bambu PLA Basic @BBL A1M 0.2 nozzle.json" }, + { + "name": "Bambu PLA Basic @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu PLA Basic @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Basic @BBL A2L 0.4 nozzle", + "sub_path": "filament/Bambu PLA Basic @BBL A2L 0.4 nozzle.json" + }, + { + "name": "Bambu PLA Basic @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PLA Basic @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Basic @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PLA Basic @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Basic @BBL H2C", + "sub_path": "filament/Bambu PLA Basic @BBL H2C.json" + }, + { + "name": "Bambu PLA Basic @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu PLA Basic @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Basic @BBL H2C 0.6 nozzle", + "sub_path": "filament/Bambu PLA Basic @BBL H2C 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Basic @BBL H2C 0.8 nozzle", + "sub_path": "filament/Bambu PLA Basic @BBL H2C 0.8 nozzle.json" + }, { "name": "Bambu PLA Basic @BBL H2D", "sub_path": "filament/Bambu PLA Basic @BBL H2D.json" @@ -5217,6 +5717,34 @@ "name": "Bambu PLA Dynamic @BBL A1M 0.2 nozzle", "sub_path": "filament/Bambu PLA Dynamic @BBL A1M 0.2 nozzle.json" }, + { + "name": "Bambu PLA Dynamic @BBL A2L", + "sub_path": "filament/Bambu PLA Dynamic @BBL A2L.json" + }, + { + "name": "Bambu PLA Dynamic @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu PLA Dynamic @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Dynamic @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PLA Dynamic @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Dynamic @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PLA Dynamic @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Dynamic @BBL H2C", + "sub_path": "filament/Bambu PLA Dynamic @BBL H2C.json" + }, + { + "name": "Bambu PLA Dynamic @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu PLA Dynamic @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Dynamic @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PLA Dynamic @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PLA Dynamic @BBL H2D", "sub_path": "filament/Bambu PLA Dynamic @BBL H2D.json" @@ -5309,6 +5837,34 @@ "name": "Bambu PLA Galaxy @BBL A1M 0.2 nozzle", "sub_path": "filament/Bambu PLA Galaxy @BBL A1M 0.2 nozzle.json" }, + { + "name": "Bambu PLA Galaxy @BBL A2L", + "sub_path": "filament/Bambu PLA Galaxy @BBL A2L.json" + }, + { + "name": "Bambu PLA Galaxy @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu PLA Galaxy @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Galaxy @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PLA Galaxy @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Galaxy @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PLA Galaxy @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Galaxy @BBL H2C", + "sub_path": "filament/Bambu PLA Galaxy @BBL H2C.json" + }, + { + "name": "Bambu PLA Galaxy @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu PLA Galaxy @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Galaxy @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PLA Galaxy @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PLA Galaxy @BBL H2D", "sub_path": "filament/Bambu PLA Galaxy @BBL H2D.json" @@ -5401,6 +5957,26 @@ "name": "Bambu PLA Glow @BBL A1M 0.2 nozzle", "sub_path": "filament/Bambu PLA Glow @BBL A1M 0.2 nozzle.json" }, + { + "name": "Bambu PLA Glow @BBL A2L 0.4 nozzle", + "sub_path": "filament/Bambu PLA Glow @BBL A2L 0.4 nozzle.json" + }, + { + "name": "Bambu PLA Glow @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PLA Glow @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Glow @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PLA Glow @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Glow @BBL H2C", + "sub_path": "filament/Bambu PLA Glow @BBL H2C.json" + }, + { + "name": "Bambu PLA Glow @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PLA Glow @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PLA Glow @BBL H2D", "sub_path": "filament/Bambu PLA Glow @BBL H2D.json" @@ -5477,6 +6053,34 @@ "name": "Bambu PLA Lite @BBL A1M 0.2 nozzle", "sub_path": "filament/Bambu PLA Lite @BBL A1M 0.2 nozzle.json" }, + { + "name": "Bambu PLA Lite @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu PLA Lite @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Lite @BBL A2L 0.4 nozzle", + "sub_path": "filament/Bambu PLA Lite @BBL A2L 0.4 nozzle.json" + }, + { + "name": "Bambu PLA Lite @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PLA Lite @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Lite @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PLA Lite @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Lite @BBL H2C", + "sub_path": "filament/Bambu PLA Lite @BBL H2C.json" + }, + { + "name": "Bambu PLA Lite @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu PLA Lite @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Lite @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PLA Lite @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PLA Lite @BBL H2D", "sub_path": "filament/Bambu PLA Lite @BBL H2D.json" @@ -5569,6 +6173,26 @@ "name": "Bambu PLA Marble @BBL A1M", "sub_path": "filament/Bambu PLA Marble @BBL A1M.json" }, + { + "name": "Bambu PLA Marble @BBL A2L", + "sub_path": "filament/Bambu PLA Marble @BBL A2L.json" + }, + { + "name": "Bambu PLA Marble @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PLA Marble @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Marble @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PLA Marble @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Marble @BBL H2C", + "sub_path": "filament/Bambu PLA Marble @BBL H2C.json" + }, + { + "name": "Bambu PLA Marble @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PLA Marble @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PLA Marble @BBL H2D", "sub_path": "filament/Bambu PLA Marble @BBL H2D.json" @@ -5625,6 +6249,38 @@ "name": "Bambu PLA Matte @BBL A1M 0.2 nozzle", "sub_path": "filament/Bambu PLA Matte @BBL A1M 0.2 nozzle.json" }, + { + "name": "Bambu PLA Matte @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu PLA Matte @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Matte @BBL A2L 0.4 nozzle", + "sub_path": "filament/Bambu PLA Matte @BBL A2L 0.4 nozzle.json" + }, + { + "name": "Bambu PLA Matte @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PLA Matte @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Matte @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PLA Matte @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Matte @BBL H2C", + "sub_path": "filament/Bambu PLA Matte @BBL H2C.json" + }, + { + "name": "Bambu PLA Matte @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu PLA Matte @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Matte @BBL H2C 0.6 nozzle", + "sub_path": "filament/Bambu PLA Matte @BBL H2C 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Matte @BBL H2C 0.8 nozzle", + "sub_path": "filament/Bambu PLA Matte @BBL H2C 0.8 nozzle.json" + }, { "name": "Bambu PLA Matte @BBL H2D", "sub_path": "filament/Bambu PLA Matte @BBL H2D.json" @@ -5741,6 +6397,34 @@ "name": "Bambu PLA Metal @BBL A1M 0.2 nozzle", "sub_path": "filament/Bambu PLA Metal @BBL A1M 0.2 nozzle.json" }, + { + "name": "Bambu PLA Metal @BBL A2L", + "sub_path": "filament/Bambu PLA Metal @BBL A2L.json" + }, + { + "name": "Bambu PLA Metal @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu PLA Metal @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Metal @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PLA Metal @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Metal @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PLA Metal @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Metal @BBL H2C", + "sub_path": "filament/Bambu PLA Metal @BBL H2C.json" + }, + { + "name": "Bambu PLA Metal @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu PLA Metal @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Metal @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PLA Metal @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PLA Metal @BBL H2D", "sub_path": "filament/Bambu PLA Metal @BBL H2D.json" @@ -5813,6 +6497,62 @@ "name": "Bambu PLA Metal @BBL X2D 0.4 nozzle", "sub_path": "filament/Bambu PLA Metal @BBL X2D 0.4 nozzle.json" }, + { + "name": "Bambu PLA Pure @BBL A2L", + "sub_path": "filament/Bambu PLA Pure @BBL A2L.json" + }, + { + "name": "Bambu PLA Pure @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu PLA Pure @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Pure @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PLA Pure @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Pure @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PLA Pure @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Pure @BBL H2C", + "sub_path": "filament/Bambu PLA Pure @BBL H2C.json" + }, + { + "name": "Bambu PLA Pure @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu PLA Pure @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Pure @BBL H2D", + "sub_path": "filament/Bambu PLA Pure @BBL H2D.json" + }, + { + "name": "Bambu PLA Pure @BBL H2D 0.2 nozzle", + "sub_path": "filament/Bambu PLA Pure @BBL H2D 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Pure @BBL H2D 0.8 nozzle", + "sub_path": "filament/Bambu PLA Pure @BBL H2D 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Pure @BBL H2DP", + "sub_path": "filament/Bambu PLA Pure @BBL H2DP.json" + }, + { + "name": "Bambu PLA Pure @BBL H2DP 0.2 nozzle", + "sub_path": "filament/Bambu PLA Pure @BBL H2DP 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Pure @BBL H2DP 0.8 nozzle", + "sub_path": "filament/Bambu PLA Pure @BBL H2DP 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Pure @BBL H2S", + "sub_path": "filament/Bambu PLA Pure @BBL H2S.json" + }, + { + "name": "Bambu PLA Pure @BBL H2S 0.2 nozzle", + "sub_path": "filament/Bambu PLA Pure @BBL H2S 0.2 nozzle.json" + }, { "name": "Bambu PLA Silk @BBL A1", "sub_path": "filament/Bambu PLA Silk @BBL A1.json" @@ -5829,6 +6569,34 @@ "name": "Bambu PLA Silk @BBL A1M 0.2 nozzle", "sub_path": "filament/Bambu PLA Silk @BBL A1M 0.2 nozzle.json" }, + { + "name": "Bambu PLA Silk @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu PLA Silk @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Silk @BBL A2L 0.4 nozzle", + "sub_path": "filament/Bambu PLA Silk @BBL A2L 0.4 nozzle.json" + }, + { + "name": "Bambu PLA Silk @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PLA Silk @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Silk @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PLA Silk @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Silk @BBL H2C", + "sub_path": "filament/Bambu PLA Silk @BBL H2C.json" + }, + { + "name": "Bambu PLA Silk @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu PLA Silk @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Silk @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PLA Silk @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PLA Silk @BBL H2D", "sub_path": "filament/Bambu PLA Silk @BBL H2D.json" @@ -5917,6 +6685,34 @@ "name": "Bambu PLA Silk+ @BBL A1M 0.2 nozzle", "sub_path": "filament/Bambu PLA Silk+ @BBL A1M 0.2 nozzle.json" }, + { + "name": "Bambu PLA Silk+ @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu PLA Silk+ @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Silk+ @BBL A2L 0.4 nozzle", + "sub_path": "filament/Bambu PLA Silk+ @BBL A2L 0.4 nozzle.json" + }, + { + "name": "Bambu PLA Silk+ @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PLA Silk+ @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Silk+ @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PLA Silk+ @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Silk+ @BBL H2C", + "sub_path": "filament/Bambu PLA Silk+ @BBL H2C.json" + }, + { + "name": "Bambu PLA Silk+ @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu PLA Silk+ @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Silk+ @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PLA Silk+ @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PLA Silk+ @BBL H2D", "sub_path": "filament/Bambu PLA Silk+ @BBL H2D.json" @@ -5997,6 +6793,26 @@ "name": "Bambu PLA Sparkle @BBL A1M", "sub_path": "filament/Bambu PLA Sparkle @BBL A1M.json" }, + { + "name": "Bambu PLA Sparkle @BBL A2L", + "sub_path": "filament/Bambu PLA Sparkle @BBL A2L.json" + }, + { + "name": "Bambu PLA Sparkle @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PLA Sparkle @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Sparkle @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PLA Sparkle @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Sparkle @BBL H2C", + "sub_path": "filament/Bambu PLA Sparkle @BBL H2C.json" + }, + { + "name": "Bambu PLA Sparkle @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PLA Sparkle @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PLA Sparkle @BBL H2D", "sub_path": "filament/Bambu PLA Sparkle @BBL H2D.json" @@ -6057,6 +6873,26 @@ "name": "Bambu PLA Tough @BBL A1M 0.2 nozzle", "sub_path": "filament/Bambu PLA Tough @BBL A1M 0.2 nozzle.json" }, + { + "name": "Bambu PLA Tough @BBL A2L", + "sub_path": "filament/Bambu PLA Tough @BBL A2L.json" + }, + { + "name": "Bambu PLA Tough @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu PLA Tough @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Tough @BBL H2C", + "sub_path": "filament/Bambu PLA Tough @BBL H2C.json" + }, + { + "name": "Bambu PLA Tough @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu PLA Tough @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Tough @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PLA Tough @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PLA Tough @BBL H2D", "sub_path": "filament/Bambu PLA Tough @BBL H2D.json" @@ -6137,6 +6973,38 @@ "name": "Bambu PLA Tough+ @BBL A1M 0.2 nozzle", "sub_path": "filament/Bambu PLA Tough+ @BBL A1M 0.2 nozzle.json" }, + { + "name": "Bambu PLA Tough+ @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu PLA Tough+ @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Tough+ @BBL A2L 0.4 nozzle", + "sub_path": "filament/Bambu PLA Tough+ @BBL A2L 0.4 nozzle.json" + }, + { + "name": "Bambu PLA Tough+ @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PLA Tough+ @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Tough+ @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PLA Tough+ @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Tough+ @BBL H2C", + "sub_path": "filament/Bambu PLA Tough+ @BBL H2C.json" + }, + { + "name": "Bambu PLA Tough+ @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu PLA Tough+ @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Tough+ @BBL H2C 0.6 nozzle", + "sub_path": "filament/Bambu PLA Tough+ @BBL H2C 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Tough+ @BBL H2C 0.8 nozzle", + "sub_path": "filament/Bambu PLA Tough+ @BBL H2C 0.8 nozzle.json" + }, { "name": "Bambu PLA Tough+ @BBL H2D", "sub_path": "filament/Bambu PLA Tough+ @BBL H2D.json" @@ -6261,6 +7129,30 @@ "name": "Bambu PLA Translucent @BBL A1M 0.8 nozzle", "sub_path": "filament/Bambu PLA Translucent @BBL A1M 0.8 nozzle.json" }, + { + "name": "Bambu PLA Translucent @BBL A2L", + "sub_path": "filament/Bambu PLA Translucent @BBL A2L.json" + }, + { + "name": "Bambu PLA Translucent @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu PLA Translucent @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Translucent @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PLA Translucent @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Translucent @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PLA Translucent @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Translucent @BBL H2C", + "sub_path": "filament/Bambu PLA Translucent @BBL H2C.json" + }, + { + "name": "Bambu PLA Translucent @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu PLA Translucent @BBL H2C 0.2 nozzle.json" + }, { "name": "Bambu PLA Translucent @BBL H2D", "sub_path": "filament/Bambu PLA Translucent @BBL H2D.json" @@ -6357,6 +7249,26 @@ "name": "Bambu PLA Wood @BBL A1M", "sub_path": "filament/Bambu PLA Wood @BBL A1M.json" }, + { + "name": "Bambu PLA Wood @BBL A2L", + "sub_path": "filament/Bambu PLA Wood @BBL A2L.json" + }, + { + "name": "Bambu PLA Wood @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PLA Wood @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Wood @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PLA Wood @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Wood @BBL H2C", + "sub_path": "filament/Bambu PLA Wood @BBL H2C.json" + }, + { + "name": "Bambu PLA Wood @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PLA Wood @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PLA Wood @BBL H2D", "sub_path": "filament/Bambu PLA Wood @BBL H2D.json" @@ -6429,6 +7341,26 @@ "name": "Bambu PLA-CF @BBL A1M 0.8 nozzle", "sub_path": "filament/Bambu PLA-CF @BBL A1M 0.8 nozzle.json" }, + { + "name": "Bambu PLA-CF @BBL A2L", + "sub_path": "filament/Bambu PLA-CF @BBL A2L.json" + }, + { + "name": "Bambu PLA-CF @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PLA-CF @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PLA-CF @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PLA-CF @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PLA-CF @BBL H2C", + "sub_path": "filament/Bambu PLA-CF @BBL H2C.json" + }, + { + "name": "Bambu PLA-CF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PLA-CF @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PLA-CF @BBL H2D 0.4 nozzle", "sub_path": "filament/Bambu PLA-CF @BBL H2D 0.4 nozzle.json" @@ -6497,6 +7429,34 @@ "name": "Bambu Support For PLA @BBL A1M 0.2 nozzle", "sub_path": "filament/Bambu Support For PLA @BBL A1M 0.2 nozzle.json" }, + { + "name": "Bambu Support For PLA @BBL A2L", + "sub_path": "filament/Bambu Support For PLA @BBL A2L.json" + }, + { + "name": "Bambu Support For PLA @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu Support For PLA @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu Support For PLA @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu Support For PLA @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu Support For PLA @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu Support For PLA @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu Support For PLA @BBL H2C", + "sub_path": "filament/Bambu Support For PLA @BBL H2C.json" + }, + { + "name": "Bambu Support For PLA @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu Support For PLA @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu Support For PLA @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu Support For PLA @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu Support For PLA @BBL H2D", "sub_path": "filament/Bambu Support For PLA @BBL H2D.json" @@ -6573,6 +7533,26 @@ "name": "Bambu Support For PLA/PETG @BBL A1M 0.2 nozzle", "sub_path": "filament/Bambu Support For PLA-PETG @BBL A1M 0.2 nozzle.json" }, + { + "name": "Bambu Support For PLA/PETG @BBL A2L", + "sub_path": "filament/Bambu Support For PLA-PETG @BBL A2L.json" + }, + { + "name": "Bambu Support For PLA/PETG @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu Support For PLA-PETG @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu Support For PLA/PETG @BBL H2C", + "sub_path": "filament/Bambu Support For PLA-PETG @BBL H2C.json" + }, + { + "name": "Bambu Support For PLA/PETG @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu Support For PLA-PETG @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu Support For PLA/PETG @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu Support For PLA-PETG @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu Support For PLA/PETG @BBL H2D", "sub_path": "filament/Bambu Support For PLA-PETG @BBL H2D.json" @@ -6649,6 +7629,26 @@ "name": "Bambu Support W @BBL A1M 0.2 nozzle", "sub_path": "filament/Bambu Support W @BBL A1M 0.2 nozzle.json" }, + { + "name": "Bambu Support W @BBL A2L", + "sub_path": "filament/Bambu Support W @BBL A2L.json" + }, + { + "name": "Bambu Support W @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu Support W @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu Support W @BBL H2C", + "sub_path": "filament/Bambu Support W @BBL H2C.json" + }, + { + "name": "Bambu Support W @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu Support W @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu Support W @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu Support W @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu Support W @BBL H2D", "sub_path": "filament/Bambu Support W @BBL H2D.json" @@ -6737,6 +7737,26 @@ "name": "Generic PLA @BBL A1M 0.2 nozzle", "sub_path": "filament/Generic PLA @BBL A1M 0.2 nozzle.json" }, + { + "name": "Generic PLA @BBL A2L", + "sub_path": "filament/Generic PLA @BBL A2L.json" + }, + { + "name": "Generic PLA @BBL A2L 0.2 nozzle", + "sub_path": "filament/Generic PLA @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Generic PLA @BBL H2C", + "sub_path": "filament/Generic PLA @BBL H2C.json" + }, + { + "name": "Generic PLA @BBL H2C 0.2 nozzle", + "sub_path": "filament/Generic PLA @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Generic PLA @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PLA @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PLA @BBL H2D", "sub_path": "filament/Generic PLA @BBL H2D.json" @@ -6829,6 +7849,26 @@ "name": "Generic PLA High Speed @BBL A1M", "sub_path": "filament/Generic PLA High Speed @BBL A1M.json" }, + { + "name": "Generic PLA High Speed @BBL A2L", + "sub_path": "filament/Generic PLA High Speed @BBL A2L.json" + }, + { + "name": "Generic PLA High Speed @BBL A2L 0.2 nozzle", + "sub_path": "filament/Generic PLA High Speed @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Generic PLA High Speed @BBL H2C", + "sub_path": "filament/Generic PLA High Speed @BBL H2C.json" + }, + { + "name": "Generic PLA High Speed @BBL H2C 0.2 nozzle", + "sub_path": "filament/Generic PLA High Speed @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Generic PLA High Speed @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PLA High Speed @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PLA High Speed @BBL H2D", "sub_path": "filament/Generic PLA High Speed @BBL H2D.json" @@ -6893,6 +7933,18 @@ "name": "Generic PLA Silk @BBL A1M", "sub_path": "filament/Generic PLA Silk @BBL A1M.json" }, + { + "name": "Generic PLA Silk @BBL A2L", + "sub_path": "filament/Generic PLA Silk @BBL A2L.json" + }, + { + "name": "Generic PLA Silk @BBL H2C", + "sub_path": "filament/Generic PLA Silk @BBL H2C.json" + }, + { + "name": "Generic PLA Silk @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PLA Silk @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PLA Silk @BBL H2D", "sub_path": "filament/Generic PLA Silk @BBL H2D.json" @@ -6937,6 +7989,18 @@ "name": "Generic PLA-CF @BBL A1M", "sub_path": "filament/Generic PLA-CF @BBL A1M.json" }, + { + "name": "Generic PLA-CF @BBL A2L", + "sub_path": "filament/Generic PLA-CF @BBL A2L.json" + }, + { + "name": "Generic PLA-CF @BBL H2C", + "sub_path": "filament/Generic PLA-CF @BBL H2C.json" + }, + { + "name": "Generic PLA-CF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PLA-CF @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PLA-CF @BBL H2D", "sub_path": "filament/Generic PLA-CF @BBL H2D.json" @@ -8401,6 +9465,18 @@ "name": "Generic PP @BBL A1M", "sub_path": "filament/Generic PP @BBL A1M.json" }, + { + "name": "Generic PP @BBL A2L", + "sub_path": "filament/Generic PP @BBL A2L.json" + }, + { + "name": "Generic PP @BBL H2C", + "sub_path": "filament/Generic PP @BBL H2C.json" + }, + { + "name": "Generic PP @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PP @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PP @BBL H2D", "sub_path": "filament/Generic PP @BBL H2D.json" @@ -8433,6 +9509,14 @@ "name": "Generic PP-CF @BBL A1", "sub_path": "filament/Generic PP-CF @BBL A1.json" }, + { + "name": "Generic PP-CF @BBL H2C", + "sub_path": "filament/Generic PP-CF @BBL H2C.json" + }, + { + "name": "Generic PP-CF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PP-CF @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PP-CF @BBL H2D", "sub_path": "filament/Generic PP-CF @BBL H2D.json" @@ -8465,6 +9549,14 @@ "name": "Generic PP-GF @BBL A1", "sub_path": "filament/Generic PP-GF @BBL A1.json" }, + { + "name": "Generic PP-GF @BBL H2C", + "sub_path": "filament/Generic PP-GF @BBL H2C.json" + }, + { + "name": "Generic PP-GF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PP-GF @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PP-GF @BBL H2D", "sub_path": "filament/Generic PP-GF @BBL H2D.json" @@ -8493,6 +9585,14 @@ "name": "Generic PP-GF @BBL X2D 0.4 nozzle", "sub_path": "filament/Generic PP-GF @BBL X2D 0.4 nozzle.json" }, + { + "name": "Bambu PPA-CF @BBL H2C", + "sub_path": "filament/Bambu PPA-CF @BBL H2C.json" + }, + { + "name": "Bambu PPA-CF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PPA-CF @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PPA-CF @BBL H2D", "sub_path": "filament/Bambu PPA-CF @BBL H2D.json" @@ -8525,6 +9625,14 @@ "name": "Bambu PPA-CF @BBL X2D 0.4 nozzle", "sub_path": "filament/Bambu PPA-CF @BBL X2D 0.4 nozzle.json" }, + { + "name": "Generic PPA-CF @BBL H2C", + "sub_path": "filament/Generic PPA-CF @BBL H2C.json" + }, + { + "name": "Generic PPA-CF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PPA-CF @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PPA-CF @BBL H2D", "sub_path": "filament/Generic PPA-CF @BBL H2D.json" @@ -8557,6 +9665,14 @@ "name": "Generic PPA-CF @BBL X2D 0.4 nozzle", "sub_path": "filament/Generic PPA-CF @BBL X2D 0.4 nozzle.json" }, + { + "name": "Generic PPA-GF @BBL H2C", + "sub_path": "filament/Generic PPA-GF @BBL H2C.json" + }, + { + "name": "Generic PPA-GF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PPA-GF @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PPA-GF @BBL H2D", "sub_path": "filament/Generic PPA-GF @BBL H2D.json" @@ -8589,6 +9705,14 @@ "name": "Generic PPA-GF @BBL X2D 0.4 nozzle", "sub_path": "filament/Generic PPA-GF @BBL X2D 0.4 nozzle.json" }, + { + "name": "Bambu PPS-CF @BBL H2C", + "sub_path": "filament/Bambu PPS-CF @BBL H2C.json" + }, + { + "name": "Bambu PPS-CF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PPS-CF @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PPS-CF @BBL H2D", "sub_path": "filament/Bambu PPS-CF @BBL H2D.json" @@ -8605,6 +9729,14 @@ "name": "Bambu PPS-CF @BBL X1E", "sub_path": "filament/Bambu PPS-CF @BBL X1E.json" }, + { + "name": "Generic PPS @BBL H2C", + "sub_path": "filament/Generic PPS @BBL H2C.json" + }, + { + "name": "Generic PPS @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PPS @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PPS @BBL H2D", "sub_path": "filament/Generic PPS @BBL H2D.json" @@ -8621,6 +9753,14 @@ "name": "Generic PPS @BBL X1E", "sub_path": "filament/Generic PPS @BBL X1E.json" }, + { + "name": "Generic PPS-CF @BBL H2C", + "sub_path": "filament/Generic PPS-CF @BBL H2C.json" + }, + { + "name": "Generic PPS-CF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PPS-CF @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PPS-CF @BBL H2D", "sub_path": "filament/Generic PPS-CF @BBL H2D.json" @@ -8653,6 +9793,18 @@ "name": "Bambu PVA @BBL A1M 0.2 nozzle", "sub_path": "filament/Bambu PVA @BBL A1M 0.2 nozzle.json" }, + { + "name": "Bambu PVA @BBL A2L", + "sub_path": "filament/Bambu PVA @BBL A2L.json" + }, + { + "name": "Bambu PVA @BBL H2C", + "sub_path": "filament/Bambu PVA @BBL H2C.json" + }, + { + "name": "Bambu PVA @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PVA @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PVA @BBL H2D", "sub_path": "filament/Bambu PVA @BBL H2D.json" @@ -8717,6 +9869,26 @@ "name": "Generic PVA @BBL A1M 0.2 nozzle", "sub_path": "filament/Generic PVA @BBL A1M 0.2 nozzle.json" }, + { + "name": "Generic PVA @BBL A2L", + "sub_path": "filament/Generic PVA @BBL A2L.json" + }, + { + "name": "Generic PVA @BBL A2L 0.2 nozzle", + "sub_path": "filament/Generic PVA @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Generic PVA @BBL H2C", + "sub_path": "filament/Generic PVA @BBL H2C.json" + }, + { + "name": "Generic PVA @BBL H2C 0.2 nozzle", + "sub_path": "filament/Generic PVA @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Generic PVA @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PVA @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PVA @BBL H2D", "sub_path": "filament/Generic PVA @BBL H2D.json" @@ -8861,6 +10033,18 @@ "name": "BETA TPU Matte @BBL X1C", "sub_path": "filament/BETA/BETA TPU Matte @BBL X1C.json" }, + { + "name": "Bambu TPU 85A @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu TPU 85A @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu TPU 85A @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu TPU 85A @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu TPU 85A @BBL H2C", + "sub_path": "filament/Bambu TPU 85A @BBL H2C.json" + }, { "name": "Bambu TPU 85A @BBL H2D", "sub_path": "filament/Bambu TPU 85A @BBL H2D.json" @@ -8921,6 +10105,26 @@ "name": "Bambu TPU 90A @BBL A1M", "sub_path": "filament/Bambu TPU 90A @BBL A1M.json" }, + { + "name": "Bambu TPU 90A @BBL A2L", + "sub_path": "filament/Bambu TPU 90A @BBL A2L.json" + }, + { + "name": "Bambu TPU 90A @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu TPU 90A @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu TPU 90A @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu TPU 90A @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu TPU 90A @BBL H2C", + "sub_path": "filament/Bambu TPU 90A @BBL H2C.json" + }, + { + "name": "Bambu TPU 90A @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu TPU 90A @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu TPU 90A @BBL H2D", "sub_path": "filament/Bambu TPU 90A @BBL H2D.json" @@ -8997,6 +10201,18 @@ "name": "Bambu TPU 95A @BBL A1M", "sub_path": "filament/Bambu TPU 95A @BBL A1M.json" }, + { + "name": "Bambu TPU 95A @BBL A2L", + "sub_path": "filament/Bambu TPU 95A @BBL A2L.json" + }, + { + "name": "Bambu TPU 95A @BBL H2C", + "sub_path": "filament/Bambu TPU 95A @BBL H2C.json" + }, + { + "name": "Bambu TPU 95A @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu TPU 95A @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu TPU 95A @BBL H2D", "sub_path": "filament/Bambu TPU 95A @BBL H2D.json" @@ -9041,22 +10257,34 @@ "name": "Bambu TPU 95A HF @BBL A1M", "sub_path": "filament/Bambu TPU 95A HF @BBL A1M.json" }, + { + "name": "Bambu TPU 95A HF @BBL A2L", + "sub_path": "filament/Bambu TPU 95A HF @BBL A2L.json" + }, + { + "name": "Bambu TPU 95A HF @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu TPU 95A HF @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu TPU 95A HF @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu TPU 95A HF @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu TPU 95A HF @BBL H2C", + "sub_path": "filament/Bambu TPU 95A HF @BBL H2C.json" + }, + { + "name": "Bambu TPU 95A HF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu TPU 95A HF @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu TPU 95A HF @BBL H2D", "sub_path": "filament/Bambu TPU 95A HF @BBL H2D.json" }, - { - "name": "Bambu TPU 95A HF @BBL H2D 0.4 nozzle", - "sub_path": "filament/Bambu TPU 95A HF @BBL H2D 0.4 nozzle.json" - }, { "name": "Bambu TPU 95A HF @BBL H2DP", "sub_path": "filament/Bambu TPU 95A HF @BBL H2DP.json" }, - { - "name": "Bambu TPU 95A HF @BBL H2DP 0.4 nozzle", - "sub_path": "filament/Bambu TPU 95A HF @BBL H2DP 0.4 nozzle.json" - }, { "name": "Bambu TPU 95A HF @BBL H2S", "sub_path": "filament/Bambu TPU 95A HF @BBL H2S.json" @@ -9101,6 +10329,26 @@ "name": "Bambu TPU for AMS @BBL A1M", "sub_path": "filament/Bambu TPU for AMS @BBL A1M.json" }, + { + "name": "Bambu TPU for AMS @BBL A2L", + "sub_path": "filament/Bambu TPU for AMS @BBL A2L.json" + }, + { + "name": "Bambu TPU for AMS @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu TPU for AMS @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu TPU for AMS @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu TPU for AMS @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu TPU for AMS @BBL H2C", + "sub_path": "filament/Bambu TPU for AMS @BBL H2C.json" + }, + { + "name": "Bambu TPU for AMS @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu TPU for AMS @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu TPU for AMS @BBL H2D", "sub_path": "filament/Bambu TPU for AMS @BBL H2D.json" @@ -9137,6 +10385,14 @@ "name": "Generic TPU", "sub_path": "filament/Generic TPU.json" }, + { + "name": "Generic TPU @BBL H2C", + "sub_path": "filament/Generic TPU @BBL H2C.json" + }, + { + "name": "Generic TPU @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic TPU @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic TPU @BBL H2D", "sub_path": "filament/Generic TPU @BBL H2D.json" @@ -9181,6 +10437,18 @@ "name": "Generic TPU for AMS @BBL A1M", "sub_path": "filament/Generic TPU for AMS @BBL A1M.json" }, + { + "name": "Generic TPU for AMS @BBL A2L", + "sub_path": "filament/Generic TPU for AMS @BBL A2L.json" + }, + { + "name": "Generic TPU for AMS @BBL H2C", + "sub_path": "filament/Generic TPU for AMS @BBL H2C.json" + }, + { + "name": "Generic TPU for AMS @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic TPU for AMS @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic TPU for AMS @BBL H2D", "sub_path": "filament/Generic TPU for AMS @BBL H2D.json" @@ -9273,6 +10541,14 @@ "name": "Generic PA-CF @BBL A1", "sub_path": "filament/Generic PA-CF @BBL A1.json" }, + { + "name": "Generic PA-CF @BBL H2C", + "sub_path": "filament/Generic PA-CF @BBL H2C.json" + }, + { + "name": "Generic PA-CF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PA-CF @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PA-CF @BBL H2D", "sub_path": "filament/Generic PA-CF @BBL H2D.json" @@ -9425,6 +10701,14 @@ "name": "PolyTerra PLA @BBL X1C 0.2 nozzle", "sub_path": "filament/Polymaker/PolyTerra PLA @BBL X1C 0.2 nozzle.json" }, + { + "name": "Bambu TPU 95A HF @BBL H2D 0.4 nozzle", + "sub_path": "filament/Bambu TPU 95A HF @BBL H2D 0.4 nozzle.json" + }, + { + "name": "Bambu TPU 95A HF @BBL H2DP 0.4 nozzle", + "sub_path": "filament/Bambu TPU 95A HF @BBL H2DP 0.4 nozzle.json" + }, { "name": "Generic TPU @BBL A1", "sub_path": "filament/Generic TPU @BBL A1.json" @@ -9433,6 +10717,10 @@ "name": "Generic TPU @BBL A1M", "sub_path": "filament/Generic TPU @BBL A1M.json" }, + { + "name": "Generic TPU @BBL A2L", + "sub_path": "filament/Generic TPU @BBL A2L.json" + }, { "name": "Generic TPU @BBL H2S", "sub_path": "filament/Generic TPU @BBL H2S.json" @@ -9992,1294 +11280,6 @@ { "name": "fdm_filament_dual_common", "sub_path": "filament/fdm_filament_dual_common.json" - }, - { - "name": "Bambu ABS @BBL H2C", - "sub_path": "filament/Bambu ABS @BBL H2C.json" - }, - { - "name": "Bambu ABS @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu ABS @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu ABS @BBL H2C 0.6 nozzle", - "sub_path": "filament/Bambu ABS @BBL H2C 0.6 nozzle.json" - }, - { - "name": "Bambu ABS @BBL H2C 0.8 nozzle", - "sub_path": "filament/Bambu ABS @BBL H2C 0.8 nozzle.json" - }, - { - "name": "Bambu ABS-GF @BBL H2C", - "sub_path": "filament/Bambu ABS-GF @BBL H2C.json" - }, - { - "name": "Bambu ABS-GF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu ABS-GF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu ASA @BBL H2C", - "sub_path": "filament/Bambu ASA @BBL H2C.json" - }, - { - "name": "Bambu ASA @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu ASA @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu ASA @BBL H2C 0.6 nozzle", - "sub_path": "filament/Bambu ASA @BBL H2C 0.6 nozzle.json" - }, - { - "name": "Bambu ASA @BBL H2C 0.8 nozzle", - "sub_path": "filament/Bambu ASA @BBL H2C 0.8 nozzle.json" - }, - { - "name": "Bambu ASA-Aero @BBL H2C", - "sub_path": "filament/Bambu ASA-Aero @BBL H2C.json" - }, - { - "name": "Bambu ASA-Aero @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu ASA-Aero @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu ASA-CF @BBL H2C", - "sub_path": "filament/Bambu ASA-CF @BBL H2C.json" - }, - { - "name": "Bambu ASA-CF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu ASA-CF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PA-CF @BBL H2C", - "sub_path": "filament/Bambu PA-CF @BBL H2C.json" - }, - { - "name": "Bambu PA-CF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PA-CF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PA6-CF @BBL H2C", - "sub_path": "filament/Bambu PA6-CF @BBL H2C.json" - }, - { - "name": "Bambu PA6-CF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PA6-CF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PA6-GF @BBL H2C", - "sub_path": "filament/Bambu PA6-GF @BBL H2C.json" - }, - { - "name": "Bambu PA6-GF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PA6-GF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PAHT-CF @BBL H2C", - "sub_path": "filament/Bambu PAHT-CF @BBL H2C.json" - }, - { - "name": "Bambu PAHT-CF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PAHT-CF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PC @BBL H2C", - "sub_path": "filament/Bambu PC @BBL H2C.json" - }, - { - "name": "Bambu PC @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu PC @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu PC @BBL H2C 0.6 nozzle", - "sub_path": "filament/Bambu PC @BBL H2C 0.6 nozzle.json" - }, - { - "name": "Bambu PC @BBL H2C 0.8 nozzle", - "sub_path": "filament/Bambu PC @BBL H2C 0.8 nozzle.json" - }, - { - "name": "Bambu PC FR @BBL H2C", - "sub_path": "filament/Bambu PC FR @BBL H2C.json" - }, - { - "name": "Bambu PC FR @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu PC FR @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu PC FR @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PC FR @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PET-CF @BBL H2C", - "sub_path": "filament/Bambu PET-CF @BBL H2C.json" - }, - { - "name": "Bambu PET-CF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PET-CF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PETG Basic @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu PETG Basic @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu PETG Basic @BBL A2L 0.4 nozzle", - "sub_path": "filament/Bambu PETG Basic @BBL A2L 0.4 nozzle.json" - }, - { - "name": "Bambu PETG Basic @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PETG Basic @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PETG Basic @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PETG Basic @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PETG Basic @BBL H2C", - "sub_path": "filament/Bambu PETG Basic @BBL H2C.json" - }, - { - "name": "Bambu PETG Basic @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu PETG Basic @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu PETG Basic @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PETG Basic @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PETG HF @BBL A2L", - "sub_path": "filament/Bambu PETG HF @BBL A2L.json" - }, - { - "name": "Bambu PETG HF @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu PETG HF @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu PETG HF @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PETG HF @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PETG HF @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PETG HF @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PETG HF @BBL H2C", - "sub_path": "filament/Bambu PETG HF @BBL H2C.json" - }, - { - "name": "Bambu PETG HF @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu PETG HF @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu PETG HF @BBL H2C 0.6 nozzle", - "sub_path": "filament/Bambu PETG HF @BBL H2C 0.6 nozzle.json" - }, - { - "name": "Bambu PETG HF @BBL H2C 0.8 nozzle", - "sub_path": "filament/Bambu PETG HF @BBL H2C 0.8 nozzle.json" - }, - { - "name": "Bambu PETG Translucent @BBL A2L", - "sub_path": "filament/Bambu PETG Translucent @BBL A2L.json" - }, - { - "name": "Bambu PETG Translucent @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu PETG Translucent @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu PETG Translucent @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PETG Translucent @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PETG Translucent @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PETG Translucent @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PETG Translucent @BBL H2C", - "sub_path": "filament/Bambu PETG Translucent @BBL H2C.json" - }, - { - "name": "Bambu PETG Translucent @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu PETG Translucent @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu PETG Translucent @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PETG Translucent @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PETG-CF @BBL A2L", - "sub_path": "filament/Bambu PETG-CF @BBL A2L.json" - }, - { - "name": "Bambu PETG-CF @BBL A2L 0.4 nozzle", - "sub_path": "filament/Bambu PETG-CF @BBL A2L 0.4 nozzle.json" - }, - { - "name": "Bambu PETG-CF @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PETG-CF @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PETG-CF @BBL H2C", - "sub_path": "filament/Bambu PETG-CF @BBL H2C.json" - }, - { - "name": "Bambu PETG-CF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PETG-CF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Aero @BBL A2L", - "sub_path": "filament/Bambu PLA Aero @BBL A2L.json" - }, - { - "name": "Bambu PLA Aero @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PLA Aero @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Aero @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PLA Aero @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Aero @BBL H2C", - "sub_path": "filament/Bambu PLA Aero @BBL H2C.json" - }, - { - "name": "Bambu PLA Aero @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PLA Aero @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Basic @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu PLA Basic @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Basic @BBL A2L 0.4 nozzle", - "sub_path": "filament/Bambu PLA Basic @BBL A2L 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Basic @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PLA Basic @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Basic @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PLA Basic @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Basic @BBL H2C", - "sub_path": "filament/Bambu PLA Basic @BBL H2C.json" - }, - { - "name": "Bambu PLA Basic @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu PLA Basic @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Basic @BBL H2C 0.6 nozzle", - "sub_path": "filament/Bambu PLA Basic @BBL H2C 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Basic @BBL H2C 0.8 nozzle", - "sub_path": "filament/Bambu PLA Basic @BBL H2C 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Dynamic @BBL A2L", - "sub_path": "filament/Bambu PLA Dynamic @BBL A2L.json" - }, - { - "name": "Bambu PLA Dynamic @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu PLA Dynamic @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Dynamic @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PLA Dynamic @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Dynamic @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PLA Dynamic @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Dynamic @BBL H2C", - "sub_path": "filament/Bambu PLA Dynamic @BBL H2C.json" - }, - { - "name": "Bambu PLA Dynamic @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu PLA Dynamic @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Dynamic @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PLA Dynamic @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Galaxy @BBL A2L", - "sub_path": "filament/Bambu PLA Galaxy @BBL A2L.json" - }, - { - "name": "Bambu PLA Galaxy @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu PLA Galaxy @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Galaxy @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PLA Galaxy @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Galaxy @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PLA Galaxy @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Galaxy @BBL H2C", - "sub_path": "filament/Bambu PLA Galaxy @BBL H2C.json" - }, - { - "name": "Bambu PLA Galaxy @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu PLA Galaxy @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Galaxy @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PLA Galaxy @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Glow @BBL A2L 0.4 nozzle", - "sub_path": "filament/Bambu PLA Glow @BBL A2L 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Glow @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PLA Glow @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Glow @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PLA Glow @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Glow @BBL H2C", - "sub_path": "filament/Bambu PLA Glow @BBL H2C.json" - }, - { - "name": "Bambu PLA Glow @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PLA Glow @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Lite @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu PLA Lite @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Lite @BBL A2L 0.4 nozzle", - "sub_path": "filament/Bambu PLA Lite @BBL A2L 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Lite @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PLA Lite @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Lite @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PLA Lite @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Lite @BBL H2C", - "sub_path": "filament/Bambu PLA Lite @BBL H2C.json" - }, - { - "name": "Bambu PLA Lite @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu PLA Lite @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Lite @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PLA Lite @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Marble @BBL A2L", - "sub_path": "filament/Bambu PLA Marble @BBL A2L.json" - }, - { - "name": "Bambu PLA Marble @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PLA Marble @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Marble @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PLA Marble @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Marble @BBL H2C", - "sub_path": "filament/Bambu PLA Marble @BBL H2C.json" - }, - { - "name": "Bambu PLA Marble @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PLA Marble @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Matte @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu PLA Matte @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Matte @BBL A2L 0.4 nozzle", - "sub_path": "filament/Bambu PLA Matte @BBL A2L 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Matte @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PLA Matte @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Matte @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PLA Matte @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Matte @BBL H2C", - "sub_path": "filament/Bambu PLA Matte @BBL H2C.json" - }, - { - "name": "Bambu PLA Matte @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu PLA Matte @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Matte @BBL H2C 0.6 nozzle", - "sub_path": "filament/Bambu PLA Matte @BBL H2C 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Matte @BBL H2C 0.8 nozzle", - "sub_path": "filament/Bambu PLA Matte @BBL H2C 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Metal @BBL A2L", - "sub_path": "filament/Bambu PLA Metal @BBL A2L.json" - }, - { - "name": "Bambu PLA Metal @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu PLA Metal @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Metal @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PLA Metal @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Metal @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PLA Metal @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Metal @BBL H2C", - "sub_path": "filament/Bambu PLA Metal @BBL H2C.json" - }, - { - "name": "Bambu PLA Metal @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu PLA Metal @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Metal @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PLA Metal @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Pure @base", - "sub_path": "filament/Bambu PLA Pure @base.json" - }, - { - "name": "Bambu PLA Pure @BBL A2L", - "sub_path": "filament/Bambu PLA Pure @BBL A2L.json" - }, - { - "name": "Bambu PLA Pure @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu PLA Pure @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Pure @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PLA Pure @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Pure @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PLA Pure @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Pure @BBL H2C", - "sub_path": "filament/Bambu PLA Pure @BBL H2C.json" - }, - { - "name": "Bambu PLA Pure @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu PLA Pure @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Pure @BBL H2D", - "sub_path": "filament/Bambu PLA Pure @BBL H2D.json" - }, - { - "name": "Bambu PLA Pure @BBL H2D 0.2 nozzle", - "sub_path": "filament/Bambu PLA Pure @BBL H2D 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Pure @BBL H2D 0.8 nozzle", - "sub_path": "filament/Bambu PLA Pure @BBL H2D 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Pure @BBL H2DP", - "sub_path": "filament/Bambu PLA Pure @BBL H2DP.json" - }, - { - "name": "Bambu PLA Pure @BBL H2DP 0.2 nozzle", - "sub_path": "filament/Bambu PLA Pure @BBL H2DP 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Pure @BBL H2DP 0.8 nozzle", - "sub_path": "filament/Bambu PLA Pure @BBL H2DP 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Pure @BBL H2S", - "sub_path": "filament/Bambu PLA Pure @BBL H2S.json" - }, - { - "name": "Bambu PLA Pure @BBL H2S 0.2 nozzle", - "sub_path": "filament/Bambu PLA Pure @BBL H2S 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Silk @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu PLA Silk @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Silk @BBL A2L 0.4 nozzle", - "sub_path": "filament/Bambu PLA Silk @BBL A2L 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Silk @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PLA Silk @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Silk @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PLA Silk @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Silk @BBL H2C", - "sub_path": "filament/Bambu PLA Silk @BBL H2C.json" - }, - { - "name": "Bambu PLA Silk @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu PLA Silk @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Silk @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PLA Silk @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Silk+ @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu PLA Silk+ @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Silk+ @BBL A2L 0.4 nozzle", - "sub_path": "filament/Bambu PLA Silk+ @BBL A2L 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Silk+ @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PLA Silk+ @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Silk+ @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PLA Silk+ @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Silk+ @BBL H2C", - "sub_path": "filament/Bambu PLA Silk+ @BBL H2C.json" - }, - { - "name": "Bambu PLA Silk+ @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu PLA Silk+ @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Silk+ @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PLA Silk+ @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Sparkle @BBL A2L", - "sub_path": "filament/Bambu PLA Sparkle @BBL A2L.json" - }, - { - "name": "Bambu PLA Sparkle @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PLA Sparkle @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Sparkle @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PLA Sparkle @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Sparkle @BBL H2C", - "sub_path": "filament/Bambu PLA Sparkle @BBL H2C.json" - }, - { - "name": "Bambu PLA Sparkle @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PLA Sparkle @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Tough @BBL A2L", - "sub_path": "filament/Bambu PLA Tough @BBL A2L.json" - }, - { - "name": "Bambu PLA Tough @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu PLA Tough @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Tough @BBL H2C", - "sub_path": "filament/Bambu PLA Tough @BBL H2C.json" - }, - { - "name": "Bambu PLA Tough @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu PLA Tough @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Tough @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PLA Tough @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Tough+ @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu PLA Tough+ @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Tough+ @BBL A2L 0.4 nozzle", - "sub_path": "filament/Bambu PLA Tough+ @BBL A2L 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Tough+ @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PLA Tough+ @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Tough+ @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PLA Tough+ @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Tough+ @BBL H2C", - "sub_path": "filament/Bambu PLA Tough+ @BBL H2C.json" - }, - { - "name": "Bambu PLA Tough+ @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu PLA Tough+ @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Tough+ @BBL H2C 0.6 nozzle", - "sub_path": "filament/Bambu PLA Tough+ @BBL H2C 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Tough+ @BBL H2C 0.8 nozzle", - "sub_path": "filament/Bambu PLA Tough+ @BBL H2C 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Translucent @BBL A2L", - "sub_path": "filament/Bambu PLA Translucent @BBL A2L.json" - }, - { - "name": "Bambu PLA Translucent @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu PLA Translucent @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Translucent @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PLA Translucent @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Translucent @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PLA Translucent @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Translucent @BBL H2C", - "sub_path": "filament/Bambu PLA Translucent @BBL H2C.json" - }, - { - "name": "Bambu PLA Translucent @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu PLA Translucent @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Wood @BBL A2L", - "sub_path": "filament/Bambu PLA Wood @BBL A2L.json" - }, - { - "name": "Bambu PLA Wood @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PLA Wood @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Wood @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PLA Wood @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Wood @BBL H2C", - "sub_path": "filament/Bambu PLA Wood @BBL H2C.json" - }, - { - "name": "Bambu PLA Wood @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PLA Wood @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PLA-CF @BBL A2L", - "sub_path": "filament/Bambu PLA-CF @BBL A2L.json" - }, - { - "name": "Bambu PLA-CF @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PLA-CF @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PLA-CF @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PLA-CF @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PLA-CF @BBL H2C", - "sub_path": "filament/Bambu PLA-CF @BBL H2C.json" - }, - { - "name": "Bambu PLA-CF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PLA-CF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PPA-CF @BBL H2C", - "sub_path": "filament/Bambu PPA-CF @BBL H2C.json" - }, - { - "name": "Bambu PPA-CF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PPA-CF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PPS-CF @BBL H2C", - "sub_path": "filament/Bambu PPS-CF @BBL H2C.json" - }, - { - "name": "Bambu PPS-CF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PPS-CF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PVA @BBL A2L", - "sub_path": "filament/Bambu PVA @BBL A2L.json" - }, - { - "name": "Bambu PVA @BBL H2C", - "sub_path": "filament/Bambu PVA @BBL H2C.json" - }, - { - "name": "Bambu PVA @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PVA @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu Support For PA/PET @BBL H2C", - "sub_path": "filament/Bambu Support For PA PET @BBL H2C.json" - }, - { - "name": "Bambu Support For PA/PET @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu Support For PA PET @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu Support For PLA @BBL A2L", - "sub_path": "filament/Bambu Support For PLA @BBL A2L.json" - }, - { - "name": "Bambu Support For PLA @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu Support For PLA @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu Support For PLA @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu Support For PLA @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu Support For PLA @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu Support For PLA @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu Support For PLA @BBL H2C", - "sub_path": "filament/Bambu Support For PLA @BBL H2C.json" - }, - { - "name": "Bambu Support For PLA @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu Support For PLA @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu Support For PLA @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu Support For PLA @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu Support For PLA/PETG @BBL A2L", - "sub_path": "filament/Bambu Support For PLA-PETG @BBL A2L.json" - }, - { - "name": "Bambu Support For PLA/PETG @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu Support For PLA-PETG @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu Support For PLA/PETG @BBL H2C", - "sub_path": "filament/Bambu Support For PLA-PETG @BBL H2C.json" - }, - { - "name": "Bambu Support For PLA/PETG @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu Support For PLA-PETG @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu Support For PLA/PETG @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu Support For PLA-PETG @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu Support G @BBL H2C", - "sub_path": "filament/Bambu Support G @BBL H2C.json" - }, - { - "name": "Bambu Support G @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu Support G @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu Support W @BBL A2L", - "sub_path": "filament/Bambu Support W @BBL A2L.json" - }, - { - "name": "Bambu Support W @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu Support W @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu Support W @BBL H2C", - "sub_path": "filament/Bambu Support W @BBL H2C.json" - }, - { - "name": "Bambu Support W @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu Support W @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu Support W @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu Support W @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu Support for ABS @BBL H2C", - "sub_path": "filament/Bambu Support for ABS @BBL H2C.json" - }, - { - "name": "Bambu Support for ABS @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu Support for ABS @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu TPU 85A @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu TPU 85A @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu TPU 85A @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu TPU 85A @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu TPU 85A @BBL H2C", - "sub_path": "filament/Bambu TPU 85A @BBL H2C.json" - }, - { - "name": "Bambu TPU 90A @BBL A2L", - "sub_path": "filament/Bambu TPU 90A @BBL A2L.json" - }, - { - "name": "Bambu TPU 90A @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu TPU 90A @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu TPU 90A @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu TPU 90A @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu TPU 90A @BBL H2C", - "sub_path": "filament/Bambu TPU 90A @BBL H2C.json" - }, - { - "name": "Bambu TPU 90A @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu TPU 90A @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu TPU 95A @BBL A2L", - "sub_path": "filament/Bambu TPU 95A @BBL A2L.json" - }, - { - "name": "Bambu TPU 95A @BBL H2C", - "sub_path": "filament/Bambu TPU 95A @BBL H2C.json" - }, - { - "name": "Bambu TPU 95A @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu TPU 95A @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu TPU 95A HF @BBL A2L", - "sub_path": "filament/Bambu TPU 95A HF @BBL A2L.json" - }, - { - "name": "Bambu TPU 95A HF @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu TPU 95A HF @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu TPU 95A HF @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu TPU 95A HF @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu TPU 95A HF @BBL H2C", - "sub_path": "filament/Bambu TPU 95A HF @BBL H2C.json" - }, - { - "name": "Bambu TPU 95A HF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu TPU 95A HF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu TPU for AMS @BBL A2L", - "sub_path": "filament/Bambu TPU for AMS @BBL A2L.json" - }, - { - "name": "Bambu TPU for AMS @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu TPU for AMS @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu TPU for AMS @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu TPU for AMS @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu TPU for AMS @BBL H2C", - "sub_path": "filament/Bambu TPU for AMS @BBL H2C.json" - }, - { - "name": "Bambu TPU for AMS @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu TPU for AMS @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic ABS @BBL H2C", - "sub_path": "filament/Generic ABS @BBL H2C.json" - }, - { - "name": "Generic ABS @BBL H2C 0.2 nozzle", - "sub_path": "filament/Generic ABS @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Generic ABS @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic ABS @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic ASA @BBL H2C", - "sub_path": "filament/Generic ASA @BBL H2C.json" - }, - { - "name": "Generic ASA @BBL H2C 0.2 nozzle", - "sub_path": "filament/Generic ASA @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Generic ASA @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic ASA @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic BVOH @BBL A2L", - "sub_path": "filament/Generic BVOH @BBL A2L.json" - }, - { - "name": "Generic BVOH @BBL H2C", - "sub_path": "filament/Generic BVOH @BBL H2C.json" - }, - { - "name": "Generic BVOH @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic BVOH @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic EVA @BBL A2L", - "sub_path": "filament/Generic EVA @BBL A2L.json" - }, - { - "name": "Generic EVA @BBL H2C", - "sub_path": "filament/Generic EVA @BBL H2C.json" - }, - { - "name": "Generic EVA @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic EVA @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic HIPS @BBL A2L", - "sub_path": "filament/Generic HIPS @BBL A2L.json" - }, - { - "name": "Generic HIPS @BBL A2L 0.2 nozzle", - "sub_path": "filament/Generic HIPS @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Generic HIPS @BBL H2C", - "sub_path": "filament/Generic HIPS @BBL H2C.json" - }, - { - "name": "Generic HIPS @BBL H2C 0.2 nozzle", - "sub_path": "filament/Generic HIPS @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Generic HIPS @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic HIPS @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PA @BBL H2C", - "sub_path": "filament/Generic PA @BBL H2C.json" - }, - { - "name": "Generic PA @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PA @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PA-CF @BBL H2C", - "sub_path": "filament/Generic PA-CF @BBL H2C.json" - }, - { - "name": "Generic PA-CF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PA-CF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PC @BBL H2C", - "sub_path": "filament/Generic PC @BBL H2C.json" - }, - { - "name": "Generic PC @BBL H2C 0.2 nozzle", - "sub_path": "filament/Generic PC @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Generic PC @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PC @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PCTG @BBL A2L", - "sub_path": "filament/Generic PCTG @BBL A2L.json" - }, - { - "name": "Generic PCTG @BBL H2C", - "sub_path": "filament/Generic PCTG @BBL H2C.json" - }, - { - "name": "Generic PCTG @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PCTG @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PE @BBL A2L", - "sub_path": "filament/Generic PE @BBL A2L.json" - }, - { - "name": "Generic PE @BBL H2C", - "sub_path": "filament/Generic PE @BBL H2C.json" - }, - { - "name": "Generic PE @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PE @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PE-CF @BBL A2L", - "sub_path": "filament/Generic PE-CF @BBL A2L.json" - }, - { - "name": "Generic PE-CF @BBL H2C", - "sub_path": "filament/Generic PE-CF @BBL H2C.json" - }, - { - "name": "Generic PE-CF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PE-CF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PETG @BBL A2L", - "sub_path": "filament/Generic PETG @BBL A2L.json" - }, - { - "name": "Generic PETG @BBL A2L 0.2 nozzle", - "sub_path": "filament/Generic PETG @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Generic PETG @BBL H2C", - "sub_path": "filament/Generic PETG @BBL H2C.json" - }, - { - "name": "Generic PETG @BBL H2C 0.2 nozzle", - "sub_path": "filament/Generic PETG @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Generic PETG @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PETG @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PETG HF @BBL A2L", - "sub_path": "filament/Generic PETG HF @BBL A2L.json" - }, - { - "name": "Generic PETG HF @BBL A2L 0.2 nozzle", - "sub_path": "filament/Generic PETG HF @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Generic PETG HF @BBL H2C", - "sub_path": "filament/Generic PETG HF @BBL H2C.json" - }, - { - "name": "Generic PETG HF @BBL H2C 0.2 nozzle", - "sub_path": "filament/Generic PETG HF @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Generic PETG HF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PETG HF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PETG-CF @BBL A2L", - "sub_path": "filament/Generic PETG-CF @BBL A2L.json" - }, - { - "name": "Generic PETG-CF @BBL H2C", - "sub_path": "filament/Generic PETG-CF @BBL H2C.json" - }, - { - "name": "Generic PETG-CF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PETG-CF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PHA @BBL A2L", - "sub_path": "filament/Generic PHA @BBL A2L.json" - }, - { - "name": "Generic PHA @BBL H2C", - "sub_path": "filament/Generic PHA @BBL H2C.json" - }, - { - "name": "Generic PHA @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PHA @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PLA @BBL A2L", - "sub_path": "filament/Generic PLA @BBL A2L.json" - }, - { - "name": "Generic PLA @BBL A2L 0.2 nozzle", - "sub_path": "filament/Generic PLA @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Generic PLA @BBL H2C", - "sub_path": "filament/Generic PLA @BBL H2C.json" - }, - { - "name": "Generic PLA @BBL H2C 0.2 nozzle", - "sub_path": "filament/Generic PLA @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Generic PLA @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PLA @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PLA High Speed @BBL A2L", - "sub_path": "filament/Generic PLA High Speed @BBL A2L.json" - }, - { - "name": "Generic PLA High Speed @BBL A2L 0.2 nozzle", - "sub_path": "filament/Generic PLA High Speed @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Generic PLA High Speed @BBL H2C", - "sub_path": "filament/Generic PLA High Speed @BBL H2C.json" - }, - { - "name": "Generic PLA High Speed @BBL H2C 0.2 nozzle", - "sub_path": "filament/Generic PLA High Speed @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Generic PLA High Speed @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PLA High Speed @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PLA Silk @BBL A2L", - "sub_path": "filament/Generic PLA Silk @BBL A2L.json" - }, - { - "name": "Generic PLA Silk @BBL H2C", - "sub_path": "filament/Generic PLA Silk @BBL H2C.json" - }, - { - "name": "Generic PLA Silk @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PLA Silk @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PLA-CF @BBL A2L", - "sub_path": "filament/Generic PLA-CF @BBL A2L.json" - }, - { - "name": "Generic PLA-CF @BBL H2C", - "sub_path": "filament/Generic PLA-CF @BBL H2C.json" - }, - { - "name": "Generic PLA-CF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PLA-CF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PP @BBL A2L", - "sub_path": "filament/Generic PP @BBL A2L.json" - }, - { - "name": "Generic PP @BBL H2C", - "sub_path": "filament/Generic PP @BBL H2C.json" - }, - { - "name": "Generic PP @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PP @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PP-CF @BBL H2C", - "sub_path": "filament/Generic PP-CF @BBL H2C.json" - }, - { - "name": "Generic PP-CF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PP-CF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PP-GF @BBL H2C", - "sub_path": "filament/Generic PP-GF @BBL H2C.json" - }, - { - "name": "Generic PP-GF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PP-GF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PPA-CF @BBL H2C", - "sub_path": "filament/Generic PPA-CF @BBL H2C.json" - }, - { - "name": "Generic PPA-CF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PPA-CF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PPA-GF @BBL H2C", - "sub_path": "filament/Generic PPA-GF @BBL H2C.json" - }, - { - "name": "Generic PPA-GF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PPA-GF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PPS @BBL H2C", - "sub_path": "filament/Generic PPS @BBL H2C.json" - }, - { - "name": "Generic PPS @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PPS @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PPS-CF @BBL H2C", - "sub_path": "filament/Generic PPS-CF @BBL H2C.json" - }, - { - "name": "Generic PPS-CF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PPS-CF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PVA @BBL A2L", - "sub_path": "filament/Generic PVA @BBL A2L.json" - }, - { - "name": "Generic PVA @BBL A2L 0.2 nozzle", - "sub_path": "filament/Generic PVA @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Generic PVA @BBL H2C", - "sub_path": "filament/Generic PVA @BBL H2C.json" - }, - { - "name": "Generic PVA @BBL H2C 0.2 nozzle", - "sub_path": "filament/Generic PVA @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Generic PVA @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PVA @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic TPU @BBL A2L", - "sub_path": "filament/Generic TPU @BBL A2L.json" - }, - { - "name": "Generic TPU @BBL H2C", - "sub_path": "filament/Generic TPU @BBL H2C.json" - }, - { - "name": "Generic TPU @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic TPU @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic TPU for AMS @BBL A2L", - "sub_path": "filament/Generic TPU for AMS @BBL A2L.json" - }, - { - "name": "Generic TPU for AMS @BBL H2C", - "sub_path": "filament/Generic TPU for AMS @BBL H2C.json" - }, - { - "name": "Generic TPU for AMS @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic TPU for AMS @BBL H2C 0.4 nozzle.json" } ], "machine_list": [ @@ -11303,6 +11303,10 @@ "name": "Bambu Lab A1 mini 0.4 nozzle", "sub_path": "machine/Bambu Lab A1 mini 0.4 nozzle.json" }, + { + "name": "Bambu Lab A2L 0.4 nozzle", + "sub_path": "machine/Bambu Lab A2L 0.4 nozzle.json" + }, { "name": "Bambu Lab H2S 0.4 nozzle", "sub_path": "machine/Bambu Lab H2S 0.4 nozzle.json" @@ -11331,6 +11335,10 @@ "name": "Bambu Lab X1E 0.4 nozzle", "sub_path": "machine/Bambu Lab X1E 0.4 nozzle.json" }, + { + "name": "Bambu Lab H2C 0.4 nozzle", + "sub_path": "machine/Bambu Lab H2C 0.4 nozzle.json" + }, { "name": "Bambu Lab H2D 0.4 nozzle", "sub_path": "machine/Bambu Lab H2D 0.4 nozzle.json" @@ -11367,6 +11375,18 @@ "name": "Bambu Lab A1 mini 0.8 nozzle", "sub_path": "machine/Bambu Lab A1 mini 0.8 nozzle.json" }, + { + "name": "Bambu Lab A2L 0.2 nozzle", + "sub_path": "machine/Bambu Lab A2L 0.2 nozzle.json" + }, + { + "name": "Bambu Lab A2L 0.6 nozzle", + "sub_path": "machine/Bambu Lab A2L 0.6 nozzle.json" + }, + { + "name": "Bambu Lab A2L 0.8 nozzle", + "sub_path": "machine/Bambu Lab A2L 0.8 nozzle.json" + }, { "name": "Bambu Lab H2S 0.2 nozzle", "sub_path": "machine/Bambu Lab H2S 0.2 nozzle.json" @@ -11451,6 +11471,18 @@ "name": "Bambu Lab X1E 0.8 nozzle", "sub_path": "machine/Bambu Lab X1E 0.8 nozzle.json" }, + { + "name": "Bambu Lab H2C 0.2 nozzle", + "sub_path": "machine/Bambu Lab H2C 0.2 nozzle.json" + }, + { + "name": "Bambu Lab H2C 0.6 nozzle", + "sub_path": "machine/Bambu Lab H2C 0.6 nozzle.json" + }, + { + "name": "Bambu Lab H2C 0.8 nozzle", + "sub_path": "machine/Bambu Lab H2C 0.8 nozzle.json" + }, { "name": "Bambu Lab H2D 0.2 nozzle", "sub_path": "machine/Bambu Lab H2D 0.2 nozzle.json" @@ -11486,38 +11518,6 @@ { "name": "Bambu Lab X2D 0.8 nozzle", "sub_path": "machine/Bambu Lab X2D 0.8 nozzle.json" - }, - { - "name": "Bambu Lab A2L 0.4 nozzle", - "sub_path": "machine/Bambu Lab A2L 0.4 nozzle.json" - }, - { - "name": "Bambu Lab A2L 0.2 nozzle", - "sub_path": "machine/Bambu Lab A2L 0.2 nozzle.json" - }, - { - "name": "Bambu Lab A2L 0.6 nozzle", - "sub_path": "machine/Bambu Lab A2L 0.6 nozzle.json" - }, - { - "name": "Bambu Lab A2L 0.8 nozzle", - "sub_path": "machine/Bambu Lab A2L 0.8 nozzle.json" - }, - { - "name": "Bambu Lab H2C 0.4 nozzle", - "sub_path": "machine/Bambu Lab H2C 0.4 nozzle.json" - }, - { - "name": "Bambu Lab H2C 0.2 nozzle", - "sub_path": "machine/Bambu Lab H2C 0.2 nozzle.json" - }, - { - "name": "Bambu Lab H2C 0.6 nozzle", - "sub_path": "machine/Bambu Lab H2C 0.6 nozzle.json" - }, - { - "name": "Bambu Lab H2C 0.8 nozzle", - "sub_path": "machine/Bambu Lab H2C 0.8 nozzle.json" } ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth ABS rABS.json b/resources/profiles/BBL/filament/addnorth/addnorth ABS rABS.json index ecc4aa62f4..cb237f18d4 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth ABS rABS.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth ABS rABS.json @@ -334,6 +334,5 @@ ], "textured_plate_temp_initial_layer": [ "105" - ], - "version": "2.0.0.77" + ] } 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 3d4fbe9c88..b97552d7be 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PA Adura FDA.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PA Adura FDA.json @@ -334,6 +334,5 @@ ], "textured_plate_temp_initial_layer": [ "100" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PA Adura.json b/resources/profiles/BBL/filament/addnorth/addnorth PA Adura.json index 5486b65d44..a9af61a692 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PA Adura.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PA Adura.json @@ -334,6 +334,5 @@ ], "textured_plate_temp_initial_layer": [ "100" - ], - "version": "2.0.0.77" + ] } 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 1881e454f5..2c0ba3a07d 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 @@ -334,6 +334,5 @@ ], "textured_plate_temp_initial_layer": [ "100" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PA6 Addlantis.json b/resources/profiles/BBL/filament/addnorth/addnorth PA6 Addlantis.json index e0696d14fe..70c9d23c7e 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PA6 Addlantis.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PA6 Addlantis.json @@ -334,6 +334,5 @@ ], "textured_plate_temp_initial_layer": [ "100" - ], - "version": "2.0.0.77" + ] } 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 d64bb0629e..cf406059c4 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 @@ -334,6 +334,5 @@ ], "textured_plate_temp_initial_layer": [ "100" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PETG Base.json b/resources/profiles/BBL/filament/addnorth/addnorth PETG Base.json index 6a4af4f908..0bc31baa96 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PETG Base.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PETG Base.json @@ -334,6 +334,5 @@ ], "textured_plate_temp_initial_layer": [ "75" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PETG ESD.json b/resources/profiles/BBL/filament/addnorth/addnorth PETG ESD.json index ff647879dc..af7b7a58ce 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PETG ESD.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PETG ESD.json @@ -334,6 +334,5 @@ ], "textured_plate_temp_initial_layer": [ "70" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PETG Economy.json b/resources/profiles/BBL/filament/addnorth/addnorth PETG Economy.json index fdbaa361f2..1a2f3fc199 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PETG Economy.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PETG Economy.json @@ -334,6 +334,5 @@ ], "textured_plate_temp_initial_layer": [ "75" - ], - "version": "2.0.0.77" + ] } 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 12849a851d..d39f99b6a1 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PETG Flame v0.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PETG Flame v0.json @@ -334,6 +334,5 @@ ], "textured_plate_temp_initial_layer": [ "70" - ], - "version": "2.0.0.77" + ] } 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 bdbecc7722..b4bf97f5ef 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PETG PRO Matte.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PETG PRO Matte.json @@ -334,6 +334,5 @@ ], "textured_plate_temp_initial_layer": [ "80" - ], - "version": "2.0.0.77" + ] } 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 a466f88b0a..b93d234c7d 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PETG rPETG Matte.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PETG rPETG Matte.json @@ -334,6 +334,5 @@ ], "textured_plate_temp_initial_layer": [ "75" - ], - "version": "2.0.0.77" + ] } 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 a5c78fe215..a67766a158 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 @@ -334,6 +334,5 @@ ], "textured_plate_temp_initial_layer": [ "80" - ], - "version": "2.0.0.77" + ] } 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 f32705ba65..230487e7b9 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PLA E-PLA.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PLA E-PLA.json @@ -334,6 +334,5 @@ ], "textured_plate_temp_initial_layer": [ "65" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PLA Economy.json b/resources/profiles/BBL/filament/addnorth/addnorth PLA Economy.json index fa2c0e9ae0..d127ef80bb 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PLA Economy.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PLA Economy.json @@ -334,6 +334,5 @@ ], "textured_plate_temp_initial_layer": [ "65" - ], - "version": "2.0.0.77" + ] } 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 1dc1796d4b..1a4b6ce91b 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 @@ -334,6 +334,5 @@ ], "textured_plate_temp_initial_layer": [ "75" - ], - "version": "2.0.0.77" + ] } 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 f64767d1e3..d149f1cccd 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PLA Premium Silk.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PLA Premium Silk.json @@ -334,6 +334,5 @@ ], "textured_plate_temp_initial_layer": [ "65" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PLA Textura.json b/resources/profiles/BBL/filament/addnorth/addnorth PLA Textura.json index 1bbfb305b2..50d8e0f6ca 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PLA Textura.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PLA Textura.json @@ -334,6 +334,5 @@ ], "textured_plate_temp_initial_layer": [ "65" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PLA Wood.json b/resources/profiles/BBL/filament/addnorth/addnorth PLA Wood.json index 99ec158160..219c0d4384 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PLA Wood.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PLA Wood.json @@ -334,6 +334,5 @@ ], "textured_plate_temp_initial_layer": [ "60" - ], - "version": "2.0.0.77" + ] } 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 ffe91af773..5e4796c0e4 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 @@ -334,6 +334,5 @@ ], "textured_plate_temp_initial_layer": [ "65" - ], - "version": "2.0.0.77" + ] } 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 073b96a224..9d852517a2 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PLA X-PLA.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PLA X-PLA.json @@ -334,6 +334,5 @@ ], "textured_plate_temp_initial_layer": [ "65" - ], - "version": "2.0.0.77" + ] } 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 b6a2695235..8cd0d62151 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 @@ -334,6 +334,5 @@ ], "textured_plate_temp_initial_layer": [ "65" - ], - "version": "2.0.0.77" + ] } 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 7910e3c772..3c542ea4d7 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 @@ -315,6 +315,5 @@ ], "textured_plate_temp_initial_layer": [ "55" - ], - "version": "2.0.0.87" + ] } 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 13604f5832..0213bc0680 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PVDF Adamant S1.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PVDF Adamant S1.json @@ -334,6 +334,5 @@ ], "textured_plate_temp_initial_layer": [ "100" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth TPU EasyFlex.json b/resources/profiles/BBL/filament/addnorth/addnorth TPU EasyFlex.json index d8a9ca5ca3..0fd00bee84 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth TPU EasyFlex.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth TPU EasyFlex.json @@ -334,6 +334,5 @@ ], "textured_plate_temp_initial_layer": [ "35" - ], - "version": "2.0.0.77" + ] } 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 f4d1beac7d..d04dd869fd 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 @@ -334,6 +334,5 @@ ], "textured_plate_temp_initial_layer": [ "35" - ], - "version": "2.0.0.77" + ] } 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 61d6100a71..e3460d0353 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 @@ -335,6 +335,5 @@ ], "textured_plate_temp_initial_layer": [ "35" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/Chuanying.json b/resources/profiles/Chuanying.json index f32b4f84ae..9ce88c574c 100644 --- a/resources/profiles/Chuanying.json +++ b/resources/profiles/Chuanying.json @@ -89,14 +89,14 @@ "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": "Generic PLA @Chuanying X1 0.25 Nozzle", "sub_path": "filament/Generic PLA @Chuanying X1 0.25 Nozzle.json" }, + { + "name": "Generic PVA @Chuanying", + "sub_path": "filament/Generic PVA @Chuanying.json" + }, { "name": "Generic PLA-Silk @Chuanying X1 0.25 Nozzle", "sub_path": "filament/Generic PLA-Silk @Chuanying X1 0.25 Nozzle.json" diff --git a/resources/profiles/CoLiDo.json b/resources/profiles/CoLiDo.json index d0c395b348..31d1812a06 100644 --- a/resources/profiles/CoLiDo.json +++ b/resources/profiles/CoLiDo.json @@ -196,6 +196,10 @@ "name": "Generic ABS @CoLiDo X16", "sub_path": "filament/Generic ABS @CoLiDo X16.json" }, + { + "name": "CoLiDo PETG @CoLiDo SR1", + "sub_path": "filament/CoLiDo PETG @CoLiDo SR1.json" + }, { "name": "Generic PETG @CoLiDo DIY 4.0", "sub_path": "filament/Generic PETG @CoLiDo DIY 4.0.json" @@ -204,18 +208,6 @@ "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": "Generic PLA @CoLiDo DIY 4.0", - "sub_path": "filament/Generic PLA @CoLiDo DIY 4.0.json" - }, - { - "name": "Generic PLA @CoLiDo X16", - "sub_path": "filament/Generic PLA @CoLiDo X16.json" - }, { "name": "CoLiDo PLA @CoLiDo SR1", "sub_path": "filament/CoLiDo PLA @CoLiDo SR1.json" @@ -228,6 +220,14 @@ "name": "CoLiDo PLA+ @CoLiDo DIY 4.0 V2", "sub_path": "filament/CoLiDo PLA+ @CoLiDo DIY 4.0 V2.json" }, + { + "name": "Generic PLA @CoLiDo DIY 4.0", + "sub_path": "filament/Generic PLA @CoLiDo DIY 4.0.json" + }, + { + "name": "Generic PLA @CoLiDo X16", + "sub_path": "filament/Generic PLA @CoLiDo X16.json" + }, { "name": "Generic TPU @CoLiDo DIY 4.0", "sub_path": "filament/Generic TPU @CoLiDo DIY 4.0.json" diff --git a/resources/profiles/Creality.json b/resources/profiles/Creality.json index 23b8b3799b..13221d752c 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": [ @@ -116,10 +116,6 @@ "name": "Creality K1", "sub_path": "machine/Creality K1.json" }, - { - "name": "Creality K1_CFS-C", - "sub_path": "machine/Creality K1_CFS-C.json" - }, { "name": "Creality K1 Max", "sub_path": "machine/Creality K1 Max.json" @@ -145,12 +141,12 @@ "sub_path": "machine/Creality K1C_CFS-C.json" }, { - "name": "Creality K2", - "sub_path": "machine/Creality K2.json" + "name": "Creality K1_CFS-C", + "sub_path": "machine/Creality K1_CFS-C.json" }, { - "name": "Creality K2 SE", - "sub_path": "machine/Creality K2 SE.json" + "name": "Creality K2", + "sub_path": "machine/Creality K2.json" }, { "name": "Creality K2 Plus", @@ -160,6 +156,10 @@ "name": "Creality K2 Pro", "sub_path": "machine/Creality K2 Pro.json" }, + { + "name": "Creality K2 SE", + "sub_path": "machine/Creality K2 SE.json" + }, { "name": "Creality SPARKX i7", "sub_path": "machine/Creality SPARKX i7.json" @@ -178,10 +178,82 @@ "name": "fdm_process_creality_common", "sub_path": "process/fdm_process_creality_common.json" }, + { + "name": "0.06mm SuperDetail @Creality K2 Plus 0.2 nozzle", + "sub_path": "process/0.06mm SuperDetail @Creality K2 Plus 0.2 nozzle.json" + }, + { + "name": "0.08mm HueForge @Creality Hi 0.4 nozzle", + "sub_path": "process/0.08mm HueForge @Creality Hi 0.4 nozzle.json" + }, + { + "name": "0.08mm HueForge @Creality K2 0.4 nozzle", + "sub_path": "process/0.08mm HueForge @Creality K2 0.4 nozzle.json" + }, + { + "name": "0.08mm HueForge @Creality K2 Plus 0.4 nozzle", + "sub_path": "process/0.08mm HueForge @Creality K2 Plus 0.4 nozzle.json" + }, + { + "name": "0.08mm HueForge @Creality K2 Pro 0.4 nozzle", + "sub_path": "process/0.08mm HueForge @Creality K2 Pro 0.4 nozzle.json" + }, + { + "name": "0.08mm HueForge @Creality SPARKX i7 0.4 nozzle", + "sub_path": "process/0.08mm HueForge @Creality SPARKX i7 0.4 nozzle.json" + }, { "name": "0.08mm SuperDetail @Creality CR-6 0.2", "sub_path": "process/0.08mm SuperDetail @Creality CR-6 0.2.json" }, + { + "name": "0.08mm SuperDetail @Creality Hi", + "sub_path": "process/0.08mm SuperDetail @Creality Hi 0.4 nozzle.json" + }, + { + "name": "0.08mm SuperDetail @Creality K1 (0.4 nozzle)", + "sub_path": "process/0.08mm SuperDetail @Creality K1 (0.4 nozzle).json" + }, + { + "name": "0.08mm SuperDetail @Creality K1 Max_CFS-C 0.4 nozzle", + "sub_path": "process/0.08mm SuperDetail @Creality K1 Max_CFS-C 0.4 nozzle.json" + }, + { + "name": "0.08mm SuperDetail @Creality K1C 0.4 nozzle", + "sub_path": "process/0.08mm SuperDetail @Creality K1C 0.4 nozzle.json" + }, + { + "name": "0.08mm SuperDetail @Creality K1C_CFS-C 0.4 nozzle", + "sub_path": "process/0.08mm SuperDetail @Creality K1C_CFS-C 0.4 nozzle.json" + }, + { + "name": "0.08mm SuperDetail @Creality K1Max (0.4 nozzle)", + "sub_path": "process/0.08mm SuperDetail @Creality K1Max (0.4 nozzle).json" + }, + { + "name": "0.08mm SuperDetail @Creality K1_CFS-C 0.4 nozzle", + "sub_path": "process/0.08mm SuperDetail @Creality K1_CFS-C 0.4 nozzle.json" + }, + { + "name": "0.08mm SuperDetail @Creality K2 0.4 nozzle", + "sub_path": "process/0.08mm SuperDetail @Creality K2 0.4 nozzle.json" + }, + { + "name": "0.08mm SuperDetail @Creality K2 Plus 0.2 nozzle", + "sub_path": "process/0.08mm SuperDetail @Creality K2 Plus 0.2 nozzle.json" + }, + { + "name": "0.08mm SuperDetail @Creality K2 Plus 0.4 nozzle", + "sub_path": "process/0.08mm SuperDetail @Creality K2 Plus 0.4 nozzle.json" + }, + { + "name": "0.08mm SuperDetail @Creality K2 Pro 0.4 nozzle", + "sub_path": "process/0.08mm SuperDetail @Creality K2 Pro 0.4 nozzle.json" + }, + { + "name": "0.08mm SuperDetail @Creality SPARKX i7 0.4 nozzle", + "sub_path": "process/0.08mm SuperDetail @Creality SPARKX i7 0.4 nozzle.json" + }, { "name": "0.10mm HighDetail @Creality 0.4 CR-6 0.4", "sub_path": "process/0.10mm HighDetail @Creality CR-6 0.4.json" @@ -190,6 +262,14 @@ "name": "0.10mm HighDetail @Creality CR-M4", "sub_path": "process/0.10mm HighDetail @Creality CR-M4.json" }, + { + "name": "0.10mm HighDetail @Creality K2 Plus 0.2 nozzle", + "sub_path": "process/0.10mm HighDetail @Creality K2 Plus 0.2 nozzle.json" + }, + { + "name": "0.10mm HighDetail @Creality SPARKX i7 0.2 nozzle", + "sub_path": "process/0.10mm HighDetail @Creality SPARKX i7 0.2 nozzle.json" + }, { "name": "0.12mm Detail @Creality 0.4 CR-6", "sub_path": "process/0.12mm Detail @Creality CR-6 0.4.json" @@ -198,6 +278,22 @@ "name": "0.12mm Detail @Creality CR-6 0.2", "sub_path": "process/0.12mm Detail @Creality CR-6 0.2.json" }, + { + "name": "0.12mm Detail @Creality K2 0.4 nozzle", + "sub_path": "process/0.12mm Detail @Creality K2 0.4 nozzle.json" + }, + { + "name": "0.12mm Detail @Creality K2 Plus 0.2 nozzle", + "sub_path": "process/0.12mm Detail @Creality K2 Plus 0.2 nozzle.json" + }, + { + "name": "0.12mm Detail @Creality K2 Plus 0.4 nozzle", + "sub_path": "process/0.12mm Detail @Creality K2 Plus 0.4 nozzle.json" + }, + { + "name": "0.12mm Detail @Creality K2 Pro 0.4 nozzle", + "sub_path": "process/0.12mm Detail @Creality K2 Pro 0.4 nozzle.json" + }, { "name": "0.12mm Fine @Creality CR10Max", "sub_path": "process/0.12mm Fine @Creality CR10Max.json" @@ -262,6 +358,18 @@ "name": "0.12mm Fine @Creality Ender5Pro (2019)", "sub_path": "process/0.12mm Fine @Creality Ender5Pro (2019).json" }, + { + "name": "0.12mm Fine @Creality Hi", + "sub_path": "process/0.12mm Fine @Creality Hi 0.4 nozzle.json" + }, + { + "name": "0.12mm Fine @Creality SPARKX i7 0.4 nozzle", + "sub_path": "process/0.12mm Fine @Creality SPARKX i7 0.4 nozzle.json" + }, + { + "name": "0.14mm Optimal @Creality K2 Plus 0.2 nozzle", + "sub_path": "process/0.14mm Optimal @Creality K2 Plus 0.2 nozzle.json" + }, { "name": "0.15mm Detail @Creality CR-M4", "sub_path": "process/0.15mm Detail @Creality CR-M4.json" @@ -278,6 +386,10 @@ "name": "0.15mm Optimal @Creality Ender5Pro (2019)", "sub_path": "process/0.15mm Optimal @Creality Ender5Pro (2019).json" }, + { + "name": "0.16mm Fine @Creality Ender-3 V4 0.4 nozzle", + "sub_path": "process/0.16mm Fine @Creality Ender-3 V4 0.4 nozzle.json" + }, { "name": "0.16mm Optimal @Creality CR-6 0.2", "sub_path": "process/0.16mm Optimal @Creality CR-6 0.2.json" @@ -390,10 +502,78 @@ "name": "0.16mm Optimal @Creality Ender6", "sub_path": "process/0.16mm Optimal @Creality Ender6.json" }, + { + "name": "0.16mm Optimal @Creality Hi", + "sub_path": "process/0.16mm Optimal @Creality Hi 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Creality K1 (0.4 nozzle)", + "sub_path": "process/0.16mm Optimal @Creality K1 (0.4 nozzle).json" + }, + { + "name": "0.16mm Optimal @Creality K1 Max_CFS-C 0.4 nozzle", + "sub_path": "process/0.16mm Optimal @Creality K1 Max_CFS-C 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Creality K1 SE", + "sub_path": "process/0.16mm Optimal @Creality K1 SE 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Creality K1 SE_CFS-C 0.4 nozzle", + "sub_path": "process/0.16mm Optimal @Creality K1 SE_CFS-C 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Creality K1C", + "sub_path": "process/0.16mm Optimal @Creality K1C 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Creality K1C_CFS-C 0.4 nozzle", + "sub_path": "process/0.16mm Optimal @Creality K1C_CFS-C 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Creality K1Max (0.4 nozzle)", + "sub_path": "process/0.16mm Optimal @Creality K1Max (0.4 nozzle).json" + }, + { + "name": "0.16mm Optimal @Creality K1_CFS-C 0.4 nozzle", + "sub_path": "process/0.16mm Optimal @Creality K1_CFS-C 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Creality K2 0.4 nozzle", + "sub_path": "process/0.16mm Optimal @Creality K2 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Creality K2 Plus 0.4 nozzle", + "sub_path": "process/0.16mm Optimal @Creality K2 Plus 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Creality K2 Pro 0.4 nozzle", + "sub_path": "process/0.16mm Optimal @Creality K2 Pro 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Creality SPARKX i7 0.4 nozzle", + "sub_path": "process/0.16mm Optimal @Creality SPARKX i7 0.4 nozzle.json" + }, { "name": "0.16mm Optimal @Creality Sermoon V1", "sub_path": "process/0.16mm Optimal @Creality Sermoon V1.json" }, + { + "name": "0.16mm Standard @Creality K2 SE 0.4 nozzle", + "sub_path": "process/0.16mm Standard @Creality K2 SE 0.4 nozzle.json" + }, + { + "name": "0.18mm Detail @Creality K2 Plus 0.6 nozzle", + "sub_path": "process/0.18mm Detail @Creality K2 Plus 0.6 nozzle.json" + }, + { + "name": "0.1mm Standard @Creality Hi 0.2 nozzle", + "sub_path": "process/0.1mm Standard @Creality Hi 0.2 nozzle.json" + }, + { + "name": "0.20mm High Quality @Creality K2 Plus 0.4 nozzle", + "sub_path": "process/0.20mm High Quality @Creality K2 Plus 0.4 nozzle.json" + }, { "name": "0.20mm Standard @Creality CR-6 0.4", "sub_path": "process/0.20mm Standard @Creality CR-6 0.4.json" @@ -422,6 +602,10 @@ "name": "0.20mm Standard @Creality CR10V3 0.6", "sub_path": "process/0.20mm Standard @Creality CR10V3 0.6.json" }, + { + "name": "0.20mm Standard @Creality Ender-3 V4 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Creality Ender-3 V4 0.4 nozzle.json" + }, { "name": "0.20mm Standard @Creality Ender3", "sub_path": "process/0.20mm Standard @Creality Ender3.json" @@ -530,14 +714,74 @@ "name": "0.20mm Standard @Creality Ender6", "sub_path": "process/0.20mm Standard @Creality Ender6.json" }, + { + "name": "0.20mm Standard @Creality Hi", + "sub_path": "process/0.20mm Standard @Creality Hi 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Creality K1 (0.4 nozzle)", + "sub_path": "process/0.20mm Standard @Creality K1 (0.4 nozzle).json" + }, + { + "name": "0.20mm Standard @Creality K1 Max_CFS-C 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Creality K1 Max_CFS-C 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Creality K1 SE", + "sub_path": "process/0.20mm Standard @Creality K1 SE 0.4.json" + }, + { + "name": "0.20mm Standard @Creality K1 SE_CFS-C 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Creality K1 SE_CFS-C 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Creality K1C", + "sub_path": "process/0.20mm Standard @Creality K1C 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Creality K1C_CFS-C 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Creality K1C_CFS-C 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Creality K1Max (0.4 nozzle)", + "sub_path": "process/0.20mm Standard @Creality K1Max (0.4 nozzle).json" + }, + { + "name": "0.20mm Standard @Creality K1_CFS-C 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Creality K1_CFS-C 0.4 nozzle.json" + }, { "name": "0.20mm Standard @Creality K2 0.4 nozzle", "sub_path": "process/0.20mm Standard @Creality K2 0.4 nozzle.json" }, + { + "name": "0.20mm Standard @Creality K2 Plus 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Creality K2 Plus 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Creality K2 Pro 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Creality K2 Pro 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Creality K2 SE 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Creality K2 SE 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Creality SPARKX i7 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Creality SPARKX i7 0.4 nozzle.json" + }, { "name": "0.20mm Standard @Creality Sermoon V1", "sub_path": "process/0.20mm Standard @Creality Sermoon V1.json" }, + { + "name": "0.20mm Strength @Creality K2 Plus 0.4 nozzle", + "sub_path": "process/0.20mm Strength @Creality K2 Plus 0.4 nozzle.json" + }, + { + "name": "0.24mm Detail @Creality K2 Plus 0.8 nozzle", + "sub_path": "process/0.24mm Detail @Creality K2 Plus 0.8 nozzle.json" + }, { "name": "0.24mm Draft @Creality CR-6 0.4", "sub_path": "process/0.24mm Draft @Creality CR-6 0.4.json" @@ -550,6 +794,10 @@ "name": "0.24mm Draft @Creality CR10Max", "sub_path": "process/0.24mm Draft @Creality CR10Max.json" }, + { + "name": "0.24mm Draft @Creality Ender-3 V4 0.4 nozzle", + "sub_path": "process/0.24mm Draft @Creality Ender-3 V4 0.4 nozzle.json" + }, { "name": "0.24mm Draft @Creality Ender3 0.2", "sub_path": "process/0.24mm Draft @Creality Ender3 0.2.json" @@ -626,10 +874,70 @@ "name": "0.24mm Draft @Creality Ender5Pro (2019)", "sub_path": "process/0.24mm Draft @Creality Ender5Pro (2019).json" }, + { + "name": "0.24mm Draft @Creality Hi", + "sub_path": "process/0.24mm Draft @Creality Hi 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Creality K1 (0.4 nozzle)", + "sub_path": "process/0.24mm Draft @Creality K1 (0.4 nozzle).json" + }, + { + "name": "0.24mm Draft @Creality K1 Max_CFS-C 0.4 nozzle", + "sub_path": "process/0.24mm Draft @Creality K1 Max_CFS-C 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Creality K1 SE", + "sub_path": "process/0.24mm Draft @Creality K1 SE 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Creality K1 SE_CFS-C 0.4 nozzle", + "sub_path": "process/0.24mm Draft @Creality K1 SE_CFS-C 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Creality K1C", + "sub_path": "process/0.24mm Draft @Creality K1C 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Creality K1C_CFS-C 0.4 nozzle", + "sub_path": "process/0.24mm Draft @Creality K1C_CFS-C 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Creality K1Max (0.4 nozzle)", + "sub_path": "process/0.24mm Draft @Creality K1Max (0.4 nozzle).json" + }, + { + "name": "0.24mm Draft @Creality K1_CFS-C 0.4 nozzle", + "sub_path": "process/0.24mm Draft @Creality K1_CFS-C 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Creality K2 0.4 nozzle", + "sub_path": "process/0.24mm Draft @Creality K2 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Creality K2 Plus 0.4 nozzle", + "sub_path": "process/0.24mm Draft @Creality K2 Plus 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Creality K2 Pro 0.4 nozzle", + "sub_path": "process/0.24mm Draft @Creality K2 Pro 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Creality SPARKX i7 0.4 nozzle", + "sub_path": "process/0.24mm Draft @Creality SPARKX i7 0.4 nozzle.json" + }, { "name": "0.24mm Optimal @Creality CR-6 0.8", "sub_path": "process/0.24mm Optimal @Creality CR-6 0.8.json" }, + { + "name": "0.24mm Optimal @Creality K2 Plus 0.6 nozzle", + "sub_path": "process/0.24mm Optimal @Creality K2 Plus 0.6 nozzle.json" + }, + { + "name": "0.24mm Standard @Creality K2 SE 0.4 nozzle", + "sub_path": "process/0.24mm Standard @Creality K2 SE 0.4 nozzle.json" + }, { "name": "0.28mm Draft @Creality Ender3 0.2", "sub_path": "process/0.28mm SuperDraft @Creality Ender3 0.2.json" @@ -674,18 +982,98 @@ "name": "0.28mm SuperDraft @Creality CR-6 0.6", "sub_path": "process/0.28mm SuperDraft @Creality CR-6 0.6.json" }, + { + "name": "0.28mm SuperDraft @Creality Ender-3 V4 0.4 nozzle", + "sub_path": "process/0.28mm SuperDraft @Creality Ender-3 V4 0.4 nozzle.json" + }, + { + "name": "0.28mm SuperDraft @Creality Hi 0.4 nozzle", + "sub_path": "process/0.28mm SuperDraft @Creality Hi 0.4 nozzle.json" + }, + { + "name": "0.28mm SuperDraft @Creality K2 0.4 nozzle", + "sub_path": "process/0.28mm SuperDraft @Creality K2 0.4 nozzle.json" + }, + { + "name": "0.28mm SuperDraft @Creality K2 Plus 0.4 nozzle", + "sub_path": "process/0.28mm SuperDraft @Creality K2 Plus 0.4 nozzle.json" + }, + { + "name": "0.28mm SuperDraft @Creality K2 Pro 0.4 nozzle", + "sub_path": "process/0.28mm SuperDraft @Creality K2 Pro 0.4 nozzle.json" + }, + { + "name": "0.28mm SuperDraft @Creality SPARKX i7 0.4 nozzle", + "sub_path": "process/0.28mm SuperDraft @Creality SPARKX i7 0.4 nozzle.json" + }, + { + "name": "0.2mm Standard @Creality Ender-5 Max 0.4 nozzle", + "sub_path": "process/0.2mm Standard @Creality Ender-5 Max 0.4 nozzle.json" + }, + { + "name": "0.2mm Ultrafast @Creality Ender-5 Max 0.4 nozzle", + "sub_path": "process/0.2mm Ultrafast @Creality Ender-5 Max 0.4 nozzle.json" + }, + { + "name": "0.30mm Standard @Creality Ender-5 Max 0.6 nozzle", + "sub_path": "process/0.30mm Standard @Creality Ender-5 Max 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Creality Hi", + "sub_path": "process/0.30mm Standard @Creality Hi 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Creality K1 (0.6 nozzle)", + "sub_path": "process/0.30mm Standard @Creality K1 (0.6 nozzle).json" + }, + { + "name": "0.30mm Standard @Creality K1 SE 0.6 nozzle", + "sub_path": "process/0.30mm Standard @Creality K1 SE 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Creality K1C", + "sub_path": "process/0.30mm Standard @Creality K1C 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Creality K1Max (0.6 nozzle)", + "sub_path": "process/0.30mm Standard @Creality K1Max (0.6 nozzle).json" + }, { "name": "0.30mm Standard @Creality K2 0.6 nozzle", "sub_path": "process/0.30mm Standard @Creality K2 0.6 nozzle.json" }, + { + "name": "0.30mm Standard @Creality K2 Plus 0.6 nozzle", + "sub_path": "process/0.30mm Standard @Creality K2 Plus 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Creality K2 Pro 0.6 nozzle", + "sub_path": "process/0.30mm Standard @Creality K2 Pro 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Creality SPARKX i7 0.6 nozzle", + "sub_path": "process/0.30mm Standard @Creality SPARKX i7 0.6 nozzle.json" + }, + { + "name": "0.30mm Strength @Creality K2 Plus 0.6 nozzle", + "sub_path": "process/0.30mm Strength @Creality K2 Plus 0.6 nozzle.json" + }, { "name": "0.32mm Chunky @Creality CR-6 0.6", "sub_path": "process/0.32mm Chunky @Creality CR-6 0.6.json" }, + { + "name": "0.32mm Optimal @Creality K2 Plus 0.8 nozzle", + "sub_path": "process/0.32mm Optimal @Creality K2 Plus 0.8 nozzle.json" + }, { "name": "0.32mm Standard @Creality CR-6 0.8", "sub_path": "process/0.32mm Standard @Creality CR-6 0.8.json" }, + { + "name": "0.36mm Draft @Creality K2 Plus 0.6 nozzle", + "sub_path": "process/0.36mm Draft @Creality K2 Plus 0.6 nozzle.json" + }, { "name": "0.36mm SuperChunky @Creality CR-6 0.6", "sub_path": "process/0.36mm SuperChunky @Creality CR-6 0.6.json" @@ -694,10 +1082,54 @@ "name": "0.40mm Draft @Creality CR-6 0.8", "sub_path": "process/0.40mm Draft @Creality CR-6 0.8.json" }, + { + "name": "0.40mm Standard @Creality Ender-5 Max 0.8 nozzle", + "sub_path": "process/0.40mm Standard @Creality Ender-5 Max 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Creality Hi 0.8 nozzle", + "sub_path": "process/0.40mm Standard @Creality Hi 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Creality K1 (0.8 nozzle)", + "sub_path": "process/0.40mm Standard @Creality K1 (0.8 nozzle).json" + }, + { + "name": "0.40mm Standard @Creality K1 SE 0.8 nozzle", + "sub_path": "process/0.40mm Standard @Creality K1 SE 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Creality K1C", + "sub_path": "process/0.40mm Standard @Creality K1C 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Creality K1Max (0.8 nozzle)", + "sub_path": "process/0.40mm Standard @Creality K1Max (0.8 nozzle).json" + }, { "name": "0.40mm Standard @Creality K2 0.8 nozzle", "sub_path": "process/0.40mm Standard @Creality K2 0.8 nozzle.json" }, + { + "name": "0.40mm Standard @Creality K2 Plus 0.8 nozzle", + "sub_path": "process/0.40mm Standard @Creality K2 Plus 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Creality K2 Pro 0.8 nozzle", + "sub_path": "process/0.40mm Standard @Creality K2 Pro 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Creality SPARKX i7 0.8 nozzle", + "sub_path": "process/0.40mm Standard @Creality SPARKX i7 0.8 nozzle.json" + }, + { + "name": "0.40mm Strength @Creality K2 Plus 0.8 nozzle", + "sub_path": "process/0.40mm Strength @Creality K2 Plus 0.8 nozzle.json" + }, + { + "name": "0.42mm SuperDraft @Creality K2 Plus 0.6 nozzle", + "sub_path": "process/0.42mm SuperDraft @Creality K2 Plus 0.6 nozzle.json" + }, { "name": "0.44mm SuperExtraChunky @Creality CR-6 0.6", "sub_path": "process/0.44mm SuperExtraChunky @Creality CR-6 0.6.json" @@ -710,10 +1142,18 @@ "name": "0.48mm Draft @Creality CR-6 0.8", "sub_path": "process/0.48mm Draft @Creality CR-6 0.8.json" }, + { + "name": "0.48mm Draft @Creality K2 Plus 0.8 nozzle", + "sub_path": "process/0.48mm Draft @Creality K2 Plus 0.8 nozzle.json" + }, { "name": "0.56mm SuperChunky @Creality CR-6 0.8", "sub_path": "process/0.56mm SuperChunky @Creality CR-6 0.8.json" }, + { + "name": "0.56mm SuperDraft @Creality K2 Plus 0.8 nozzle", + "sub_path": "process/0.56mm SuperDraft @Creality K2 Plus 0.8 nozzle.json" + }, { "name": "fdm_process_common_klipper", "sub_path": "process/fdm_process_common_klipper.json" @@ -746,46 +1186,18 @@ "name": "fdm_process_creality_common_1_0", "sub_path": "process/fdm_process_creality_common_1_0.json" }, - { - "name": "0.08mm SuperDetail @Creality Hi", - "sub_path": "process/0.08mm SuperDetail @Creality Hi 0.4 nozzle.json" - }, { "name": "0.08mm SuperDetail @Creality K2 0.2 nozzle", "sub_path": "process/0.08mm SuperDetail @Creality K2 0.2 nozzle.json" }, - { - "name": "0.08mm SuperDetail @Creality K2 0.4 nozzle", - "sub_path": "process/0.08mm SuperDetail @Creality K2 0.4 nozzle.json" - }, - { - "name": "0.06mm SuperDetail @Creality K2 Plus 0.2 nozzle", - "sub_path": "process/0.06mm SuperDetail @Creality K2 Plus 0.2 nozzle.json" - }, - { - "name": "0.08mm SuperDetail @Creality K2 Plus 0.2 nozzle", - "sub_path": "process/0.08mm SuperDetail @Creality K2 Plus 0.2 nozzle.json" - }, - { - "name": "0.08mm SuperDetail @Creality K2 Plus 0.4 nozzle", - "sub_path": "process/0.08mm SuperDetail @Creality K2 Plus 0.4 nozzle.json" - }, { "name": "0.08mm SuperDetail @Creality K2 Pro 0.2 nozzle", "sub_path": "process/0.08mm SuperDetail @Creality K2 Pro 0.2 nozzle.json" }, - { - "name": "0.08mm SuperDetail @Creality K2 Pro 0.4 nozzle", - "sub_path": "process/0.08mm SuperDetail @Creality K2 Pro 0.4 nozzle.json" - }, { "name": "0.10mm HighDetail @Creality K2 0.2 nozzle", "sub_path": "process/0.10mm HighDetail @Creality K2 0.2 nozzle.json" }, - { - "name": "0.10mm HighDetail @Creality K2 Plus 0.2 nozzle", - "sub_path": "process/0.10mm HighDetail @Creality K2 Plus 0.2 nozzle.json" - }, { "name": "0.10mm HighDetail @Creality K2 Pro 0.2 nozzle", "sub_path": "process/0.10mm HighDetail @Creality K2 Pro 0.2 nozzle.json" @@ -794,26 +1206,10 @@ "name": "0.12mm Detail @Creality K2 0.2 nozzle", "sub_path": "process/0.12mm Detail @Creality K2 0.2 nozzle.json" }, - { - "name": "0.12mm Detail @Creality K2 0.4 nozzle", - "sub_path": "process/0.12mm Detail @Creality K2 0.4 nozzle.json" - }, - { - "name": "0.12mm Detail @Creality K2 Plus 0.2 nozzle", - "sub_path": "process/0.12mm Detail @Creality K2 Plus 0.2 nozzle.json" - }, - { - "name": "0.12mm Detail @Creality K2 Plus 0.4 nozzle", - "sub_path": "process/0.12mm Detail @Creality K2 Plus 0.4 nozzle.json" - }, { "name": "0.12mm Detail @Creality K2 Pro 0.2 nozzle", "sub_path": "process/0.12mm Detail @Creality K2 Pro 0.2 nozzle.json" }, - { - "name": "0.12mm Detail @Creality K2 Pro 0.4 nozzle", - "sub_path": "process/0.12mm Detail @Creality K2 Pro 0.4 nozzle.json" - }, { "name": "0.12mm Fine @Creality CR10SE 0.2", "sub_path": "process/0.12mm Fine @Creality CR10SE 0.2.json" @@ -842,10 +1238,6 @@ "name": "0.12mm Fine @Creality Ender3V3KE", "sub_path": "process/0.12mm Fine @Creality Ender3V3KE.json" }, - { - "name": "0.12mm Fine @Creality Hi", - "sub_path": "process/0.12mm Fine @Creality Hi 0.4 nozzle.json" - }, { "name": "0.12mm Fine @Creality K1 (0.4 nozzle)", "sub_path": "process/0.12mm Fine @Creality K1 (0.4 nozzle).json" @@ -866,10 +1258,6 @@ "name": "0.14mm Optimal @Creality K2 0.2 nozzle", "sub_path": "process/0.14mm Optimal @Creality K2 0.2 nozzle.json" }, - { - "name": "0.14mm Optimal @Creality K2 Plus 0.2 nozzle", - "sub_path": "process/0.14mm Optimal @Creality K2 Plus 0.2 nozzle.json" - }, { "name": "0.14mm Optimal @Creality K2 Pro 0.2 nozzle", "sub_path": "process/0.14mm Optimal @Creality K2 Pro 0.2 nozzle.json" @@ -902,46 +1290,10 @@ "name": "0.16mm Optimal @Creality Ender3V3KE", "sub_path": "process/0.16mm Optimal @Creality Ender3V3KE.json" }, - { - "name": "0.16mm Optimal @Creality Hi", - "sub_path": "process/0.16mm Optimal @Creality Hi 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Creality K1 (0.4 nozzle)", - "sub_path": "process/0.16mm Optimal @Creality K1 (0.4 nozzle).json" - }, - { - "name": "0.16mm Optimal @Creality K1 SE", - "sub_path": "process/0.16mm Optimal @Creality K1 SE 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Creality K1C", - "sub_path": "process/0.16mm Optimal @Creality K1C 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Creality K1Max (0.4 nozzle)", - "sub_path": "process/0.16mm Optimal @Creality K1Max (0.4 nozzle).json" - }, - { - "name": "0.16mm Optimal @Creality K2 0.4 nozzle", - "sub_path": "process/0.16mm Optimal @Creality K2 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Creality K2 Plus 0.4 nozzle", - "sub_path": "process/0.16mm Optimal @Creality K2 Plus 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Creality K2 Pro 0.4 nozzle", - "sub_path": "process/0.16mm Optimal @Creality K2 Pro 0.4 nozzle.json" - }, { "name": "0.18mm Detail @Creality K2 0.6 nozzle", "sub_path": "process/0.18mm Detail @Creality K2 0.6 nozzle.json" }, - { - "name": "0.18mm Detail @Creality K2 Plus 0.6 nozzle", - "sub_path": "process/0.18mm Detail @Creality K2 Plus 0.6 nozzle.json" - }, { "name": "0.18mm Detail @Creality K2 Pro 0.6 nozzle", "sub_path": "process/0.18mm Detail @Creality K2 Pro 0.6 nozzle.json" @@ -978,34 +1330,6 @@ "name": "0.20mm Standard @Creality Ender3V3KE", "sub_path": "process/0.20mm Standard @Creality Ender3V3KE.json" }, - { - "name": "0.20mm Standard @Creality Hi", - "sub_path": "process/0.20mm Standard @Creality Hi 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Creality K1 (0.4 nozzle)", - "sub_path": "process/0.20mm Standard @Creality K1 (0.4 nozzle).json" - }, - { - "name": "0.20mm Standard @Creality K1 SE", - "sub_path": "process/0.20mm Standard @Creality K1 SE 0.4.json" - }, - { - "name": "0.20mm Standard @Creality K1C", - "sub_path": "process/0.20mm Standard @Creality K1C 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Creality K1Max (0.4 nozzle)", - "sub_path": "process/0.20mm Standard @Creality K1Max (0.4 nozzle).json" - }, - { - "name": "0.20mm Standard @Creality K2 Plus 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Creality K2 Plus 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Creality K2 Pro 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Creality K2 Pro 0.4 nozzle.json" - }, { "name": "0.20mm Ultrafast @Creality Ender-5 Max 0.4mm nozzle", "sub_path": "process/0.20mm Ultrafast @Creality Ender-5 Max 0.4mm nozzle.json" @@ -1014,10 +1338,6 @@ "name": "0.24mm Detail @Creality K2 0.8 nozzle", "sub_path": "process/0.24mm Detail @Creality K2 0.8 nozzle.json" }, - { - "name": "0.24mm Detail @Creality K2 Plus 0.8 nozzle", - "sub_path": "process/0.24mm Detail @Creality K2 Plus 0.8 nozzle.json" - }, { "name": "0.24mm Detail @Creality K2 Pro 0.8 nozzle", "sub_path": "process/0.24mm Detail @Creality K2 Pro 0.8 nozzle.json" @@ -1050,38 +1370,6 @@ "name": "0.24mm Draft @Creality Ender3V3KE", "sub_path": "process/0.24mm Draft @Creality Ender3V3KE.json" }, - { - "name": "0.24mm Draft @Creality Hi", - "sub_path": "process/0.24mm Draft @Creality Hi 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Creality K1 (0.4 nozzle)", - "sub_path": "process/0.24mm Draft @Creality K1 (0.4 nozzle).json" - }, - { - "name": "0.24mm Draft @Creality K1 SE", - "sub_path": "process/0.24mm Draft @Creality K1 SE 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Creality K1C", - "sub_path": "process/0.24mm Draft @Creality K1C 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Creality K1Max (0.4 nozzle)", - "sub_path": "process/0.24mm Draft @Creality K1Max (0.4 nozzle).json" - }, - { - "name": "0.24mm Draft @Creality K2 0.4 nozzle", - "sub_path": "process/0.24mm Draft @Creality K2 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Creality K2 Plus 0.4 nozzle", - "sub_path": "process/0.24mm Draft @Creality K2 Plus 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Creality K2 Pro 0.4 nozzle", - "sub_path": "process/0.24mm Draft @Creality K2 Pro 0.4 nozzle.json" - }, { "name": "0.24mm Optimal @Creality Ender-3 V3", "sub_path": "process/0.24mm Optimal @Creality Ender3V3 0.6 nozzle.json" @@ -1110,26 +1398,10 @@ "name": "0.24mm Optimal @Creality K2 0.6 nozzle", "sub_path": "process/0.24mm Optimal @Creality K2 0.6 nozzle.json" }, - { - "name": "0.24mm Optimal @Creality K2 Plus 0.6 nozzle", - "sub_path": "process/0.24mm Optimal @Creality K2 Plus 0.6 nozzle.json" - }, { "name": "0.24mm Optimal @Creality K2 Pro 0.6 nozzle", "sub_path": "process/0.24mm Optimal @Creality K2 Pro 0.6 nozzle.json" }, - { - "name": "0.28mm SuperDraft @Creality K2 0.4 nozzle", - "sub_path": "process/0.28mm SuperDraft @Creality K2 0.4 nozzle.json" - }, - { - "name": "0.28mm SuperDraft @Creality K2 Plus 0.4 nozzle", - "sub_path": "process/0.28mm SuperDraft @Creality K2 Plus 0.4 nozzle.json" - }, - { - "name": "0.28mm SuperDraft @Creality K2 Pro 0.4 nozzle", - "sub_path": "process/0.28mm SuperDraft @Creality K2 Pro 0.4 nozzle.json" - }, { "name": "0.30mm Standard @Creality Ender-3 V3", "sub_path": "process/0.30mm Standard @Creality Ender3V3 0.6 nozzle.json" @@ -1138,30 +1410,6 @@ "name": "0.30mm Standard @Creality Ender-3 V3 Plus", "sub_path": "process/0.30mm Standard @Creality Ender3V3Plus 0.6 nozzle.json" }, - { - "name": "0.30mm Standard @Creality Hi", - "sub_path": "process/0.30mm Standard @Creality Hi 0.6 nozzle.json" - }, - { - "name": "0.30mm Standard @Creality K1 (0.6 nozzle)", - "sub_path": "process/0.30mm Standard @Creality K1 (0.6 nozzle).json" - }, - { - "name": "0.30mm Standard @Creality K1C", - "sub_path": "process/0.30mm Standard @Creality K1C 0.6 nozzle.json" - }, - { - "name": "0.30mm Standard @Creality K1Max (0.6 nozzle)", - "sub_path": "process/0.30mm Standard @Creality K1Max (0.6 nozzle).json" - }, - { - "name": "0.30mm Standard @Creality K2 Plus 0.6 nozzle", - "sub_path": "process/0.30mm Standard @Creality K2 Plus 0.6 nozzle.json" - }, - { - "name": "0.30mm Standard @Creality K2 Pro 0.6 nozzle", - "sub_path": "process/0.30mm Standard @Creality K2 Pro 0.6 nozzle.json" - }, { "name": "0.32mm Optimal @Creality K1 (0.8 nozzle)", "sub_path": "process/0.32mm Optimal @Creality K1 (0.8 nozzle).json" @@ -1178,10 +1426,6 @@ "name": "0.32mm Optimal @Creality K2 0.8 nozzle", "sub_path": "process/0.32mm Optimal @Creality K2 0.8 nozzle.json" }, - { - "name": "0.32mm Optimal @Creality K2 Plus 0.8 nozzle", - "sub_path": "process/0.32mm Optimal @Creality K2 Plus 0.8 nozzle.json" - }, { "name": "0.32mm Optimal @Creality K2 Pro 0.8 nozzle", "sub_path": "process/0.32mm Optimal @Creality K2 Pro 0.8 nozzle.json" @@ -1214,46 +1458,14 @@ "name": "0.36mm Draft @Creality K2 0.6 nozzle", "sub_path": "process/0.36mm Draft @Creality K2 0.6 nozzle.json" }, - { - "name": "0.36mm Draft @Creality K2 Plus 0.6 nozzle", - "sub_path": "process/0.36mm Draft @Creality K2 Plus 0.6 nozzle.json" - }, { "name": "0.36mm Draft @Creality K2 Pro 0.6 nozzle", "sub_path": "process/0.36mm Draft @Creality K2 Pro 0.6 nozzle.json" }, - { - "name": "0.40mm Standard @Creality K1 (0.8 nozzle)", - "sub_path": "process/0.40mm Standard @Creality K1 (0.8 nozzle).json" - }, - { - "name": "0.40mm Standard @Creality K1C", - "sub_path": "process/0.40mm Standard @Creality K1C 0.8 nozzle.json" - }, - { - "name": "0.40mm Standard @Creality K1 SE 0.8 nozzle", - "sub_path": "process/0.40mm Standard @Creality K1 SE 0.8 nozzle.json" - }, - { - "name": "0.40mm Standard @Creality K1Max (0.8 nozzle)", - "sub_path": "process/0.40mm Standard @Creality K1Max (0.8 nozzle).json" - }, - { - "name": "0.40mm Standard @Creality K2 Plus 0.8 nozzle", - "sub_path": "process/0.40mm Standard @Creality K2 Plus 0.8 nozzle.json" - }, - { - "name": "0.40mm Standard @Creality K2 Pro 0.8 nozzle", - "sub_path": "process/0.40mm Standard @Creality K2 Pro 0.8 nozzle.json" - }, { "name": "0.42mm SuperDraft @Creality K2 0.6 nozzle", "sub_path": "process/0.42mm SuperDraft @Creality K2 0.6 nozzle.json" }, - { - "name": "0.42mm SuperDraft @Creality K2 Plus 0.6 nozzle", - "sub_path": "process/0.42mm SuperDraft @Creality K2 Plus 0.6 nozzle.json" - }, { "name": "0.42mm SuperDraft @Creality K2 Pro 0.6 nozzle", "sub_path": "process/0.42mm SuperDraft @Creality K2 Pro 0.6 nozzle.json" @@ -1274,10 +1486,6 @@ "name": "0.48mm Draft @Creality K2 0.8 nozzle", "sub_path": "process/0.48mm Draft @Creality K2 0.8 nozzle.json" }, - { - "name": "0.48mm Draft @Creality K2 Plus 0.8 nozzle", - "sub_path": "process/0.48mm Draft @Creality K2 Plus 0.8 nozzle.json" - }, { "name": "0.48mm Draft @Creality K2 Pro 0.8 nozzle", "sub_path": "process/0.48mm Draft @Creality K2 Pro 0.8 nozzle.json" @@ -1286,10 +1494,6 @@ "name": "0.56mm SuperDraft @Creality K2 0.8 nozzle", "sub_path": "process/0.56mm SuperDraft @Creality K2 0.8 nozzle.json" }, - { - "name": "0.56mm SuperDraft @Creality K2 Plus 0.8 nozzle", - "sub_path": "process/0.56mm SuperDraft @Creality K2 Plus 0.8 nozzle.json" - }, { "name": "0.56mm SuperDraft @Creality K2 Pro 0.8 nozzle", "sub_path": "process/0.56mm SuperDraft @Creality K2 Pro 0.8 nozzle.json" @@ -1421,210 +1625,6 @@ { "name": "0.36mm Chunky @Creality Ender5Pro (2019) 1.0", "sub_path": "process/0.36mm Chunky @Creality Ender5Pro (2019) 1.0.json" - }, - { - "name": "0.20mm Standard @Creality K1_CFS-C 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Creality K1_CFS-C 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Creality K1C_CFS-C 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Creality K1C_CFS-C 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Creality K1 SE_CFS-C 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Creality K1 SE_CFS-C 0.4 nozzle.json" - }, - { - "name": "0.30mm Standard @Creality K1 SE 0.6 nozzle", - "sub_path": "process/0.30mm Standard @Creality K1 SE 0.6 nozzle.json" - }, - { - "name": "0.20mm Standard @Creality K1 Max_CFS-C 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Creality K1 Max_CFS-C 0.4 nozzle.json" - }, - { - "name": "0.40mm Standard @Creality SPARKX i7 0.8 nozzle", - "sub_path": "process/0.40mm Standard @Creality SPARKX i7 0.8 nozzle.json" - }, - { - "name": "0.30mm Standard @Creality SPARKX i7 0.6 nozzle", - "sub_path": "process/0.30mm Standard @Creality SPARKX i7 0.6 nozzle.json" - }, - { - "name": "0.08mm HueForge @Creality SPARKX i7 0.4 nozzle", - "sub_path": "process/0.08mm HueForge @Creality SPARKX i7 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Creality SPARKX i7 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Creality SPARKX i7 0.4 nozzle.json" - }, - { - "name": "0.08mm HueForge @Creality K2 0.4 nozzle", - "sub_path": "process/0.08mm HueForge @Creality K2 0.4 nozzle.json" - }, - { - "name": "0.40mm Standard @Creality Hi 0.8 nozzle", - "sub_path": "process/0.40mm Standard @Creality Hi 0.8 nozzle.json" - }, - { - "name": "0.08mm HueForge @Creality Hi 0.4 nozzle", - "sub_path": "process/0.08mm HueForge @Creality Hi 0.4 nozzle.json" - }, - { - "name": "0.1mm Standard @Creality Hi 0.2 nozzle", - "sub_path": "process/0.1mm Standard @Creality Hi 0.2 nozzle.json" - }, - { - "name": "0.16mm Standard @Creality K2 SE 0.4 nozzle", - "sub_path": "process/0.16mm Standard @Creality K2 SE 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Creality K2 SE 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Creality K2 SE 0.4 nozzle.json" - }, - { - "name": "0.24mm Standard @Creality K2 SE 0.4 nozzle", - "sub_path": "process/0.24mm Standard @Creality K2 SE 0.4 nozzle.json" - }, - { - "name": "0.08mm HueForge @Creality K2 Pro 0.4 nozzle", - "sub_path": "process/0.08mm HueForge @Creality K2 Pro 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Creality Ender-3 V4 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Creality Ender-3 V4 0.4 nozzle.json" - }, - { - "name": "0.40mm Strength @Creality K2 Plus 0.8 nozzle", - "sub_path": "process/0.40mm Strength @Creality K2 Plus 0.8 nozzle.json" - }, - { - "name": "0.30mm Strength @Creality K2 Plus 0.6 nozzle", - "sub_path": "process/0.30mm Strength @Creality K2 Plus 0.6 nozzle.json" - }, - { - "name": "0.08mm HueForge @Creality K2 Plus 0.4 nozzle", - "sub_path": "process/0.08mm HueForge @Creality K2 Plus 0.4 nozzle.json" - }, - { - "name": "0.20mm High Quality @Creality K2 Plus 0.4 nozzle", - "sub_path": "process/0.20mm High Quality @Creality K2 Plus 0.4 nozzle.json" - }, - { - "name": "0.20mm Strength @Creality K2 Plus 0.4 nozzle", - "sub_path": "process/0.20mm Strength @Creality K2 Plus 0.4 nozzle.json" - }, - { - "name": "0.08mm SuperDetail @Creality SPARKX i7 0.4 nozzle", - "sub_path": "process/0.08mm SuperDetail @Creality SPARKX i7 0.4 nozzle.json" - }, - { - "name": "0.12mm Fine @Creality SPARKX i7 0.4 nozzle", - "sub_path": "process/0.12mm Fine @Creality SPARKX i7 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Creality SPARKX i7 0.4 nozzle", - "sub_path": "process/0.16mm Optimal @Creality SPARKX i7 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Creality SPARKX i7 0.4 nozzle", - "sub_path": "process/0.24mm Draft @Creality SPARKX i7 0.4 nozzle.json" - }, - { - "name": "0.28mm SuperDraft @Creality SPARKX i7 0.4 nozzle", - "sub_path": "process/0.28mm SuperDraft @Creality SPARKX i7 0.4 nozzle.json" - }, - { - "name": "0.10mm HighDetail @Creality SPARKX i7 0.2 nozzle", - "sub_path": "process/0.10mm HighDetail @Creality SPARKX i7 0.2 nozzle.json" - }, - { - "name": "0.08mm SuperDetail @Creality K1 (0.4 nozzle)", - "sub_path": "process/0.08mm SuperDetail @Creality K1 (0.4 nozzle).json" - }, - { - "name": "0.08mm SuperDetail @Creality K1 Max_CFS-C 0.4 nozzle", - "sub_path": "process/0.08mm SuperDetail @Creality K1 Max_CFS-C 0.4 nozzle.json" - }, - { - "name": "0.08mm SuperDetail @Creality K1C 0.4 nozzle", - "sub_path": "process/0.08mm SuperDetail @Creality K1C 0.4 nozzle.json" - }, - { - "name": "0.08mm SuperDetail @Creality K1C_CFS-C 0.4 nozzle", - "sub_path": "process/0.08mm SuperDetail @Creality K1C_CFS-C 0.4 nozzle.json" - }, - { - "name": "0.08mm SuperDetail @Creality K1Max (0.4 nozzle)", - "sub_path": "process/0.08mm SuperDetail @Creality K1Max (0.4 nozzle).json" - }, - { - "name": "0.08mm SuperDetail @Creality K1_CFS-C 0.4 nozzle", - "sub_path": "process/0.08mm SuperDetail @Creality K1_CFS-C 0.4 nozzle.json" - }, - { - "name": "0.16mm Fine @Creality Ender-3 V4 0.4 nozzle", - "sub_path": "process/0.16mm Fine @Creality Ender-3 V4 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Creality K1 Max_CFS-C 0.4 nozzle", - "sub_path": "process/0.16mm Optimal @Creality K1 Max_CFS-C 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Creality K1 SE_CFS-C 0.4 nozzle", - "sub_path": "process/0.16mm Optimal @Creality K1 SE_CFS-C 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Creality K1C_CFS-C 0.4 nozzle", - "sub_path": "process/0.16mm Optimal @Creality K1C_CFS-C 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Creality K1_CFS-C 0.4 nozzle", - "sub_path": "process/0.16mm Optimal @Creality K1_CFS-C 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Creality Ender-3 V4 0.4 nozzle", - "sub_path": "process/0.24mm Draft @Creality Ender-3 V4 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Creality K1 Max_CFS-C 0.4 nozzle", - "sub_path": "process/0.24mm Draft @Creality K1 Max_CFS-C 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Creality K1 SE_CFS-C 0.4 nozzle", - "sub_path": "process/0.24mm Draft @Creality K1 SE_CFS-C 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Creality K1C_CFS-C 0.4 nozzle", - "sub_path": "process/0.24mm Draft @Creality K1C_CFS-C 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Creality K1_CFS-C 0.4 nozzle", - "sub_path": "process/0.24mm Draft @Creality K1_CFS-C 0.4 nozzle.json" - }, - { - "name": "0.28mm SuperDraft @Creality Ender-3 V4 0.4 nozzle", - "sub_path": "process/0.28mm SuperDraft @Creality Ender-3 V4 0.4 nozzle.json" - }, - { - "name": "0.28mm SuperDraft @Creality Hi 0.4 nozzle", - "sub_path": "process/0.28mm SuperDraft @Creality Hi 0.4 nozzle.json" - }, - { - "name": "0.2mm Standard @Creality Ender-5 Max 0.4 nozzle", - "sub_path": "process/0.2mm Standard @Creality Ender-5 Max 0.4 nozzle.json" - }, - { - "name": "0.2mm Ultrafast @Creality Ender-5 Max 0.4 nozzle", - "sub_path": "process/0.2mm Ultrafast @Creality Ender-5 Max 0.4 nozzle.json" - }, - { - "name": "0.30mm Standard @Creality Ender-5 Max 0.6 nozzle", - "sub_path": "process/0.30mm Standard @Creality Ender-5 Max 0.6 nozzle.json" - }, - { - "name": "0.40mm Standard @Creality Ender-5 Max 0.8 nozzle", - "sub_path": "process/0.40mm Standard @Creality Ender-5 Max 0.8 nozzle.json" } ], "filament_list": [ @@ -1633,28 +1633,20 @@ "sub_path": "filament/fdm_filament_common.json" }, { - "name": "Generic ABS @Creality Ender-5Max-all", - "sub_path": "filament/Generic ABS @Creality Ender-5Max-all.json" + "name": "fdm_filament_hips", + "sub_path": "filament/fdm_filament_hips.json" }, { - "name": "Generic ASA @Creality Ender-5Max-all", - "sub_path": "filament/Generic ASA @Creality Ender-5Max-all.json" + "name": "fdm_filament_petg", + "sub_path": "filament/fdm_filament_petg.json" }, { - "name": "Generic PA @Creality Ender-5Max-all", - "sub_path": "filament/Generic PA @Creality Ender-5Max-all.json" + "name": "fdm_filament_pp", + "sub_path": "filament/fdm_filament_pp.json" }, { - "name": "Generic PETG @Creality Ender-5Max-all", - "sub_path": "filament/Generic PETG @Creality Ender-5Max-all.json" - }, - { - "name": "Generic PLA @Creality Ender-5Max-all", - "sub_path": "filament/Generic PLA @Creality Ender-5Max-all.json" - }, - { - "name": "Generic TPU @Creality Ender-5Max-all", - "sub_path": "filament/Generic TPU @Creality Ender-5Max-all.json" + "name": "fdm_filament_pps", + "sub_path": "filament/fdm_filament_pps.json" }, { "name": "Creality Hyper ABS @Ender-5Max-all", @@ -1672,6 +1664,138 @@ "name": "Creality Silk PLA @Ender-5Max-all", "sub_path": "filament/Creality Silk PLA @Ender-5Max-all.json" }, + { + "name": "Generic ABS @Creality Ender-5Max-all", + "sub_path": "filament/Generic ABS @Creality Ender-5Max-all.json" + }, + { + "name": "Generic ASA @Creality Ender-5Max-all", + "sub_path": "filament/Generic ASA @Creality Ender-5Max-all.json" + }, + { + "name": "Generic ASA-CF @K2 Plus-all", + "sub_path": "filament/Generic ASA-CF @K2 Plus-all.json" + }, + { + "name": "Generic BVOH @Hi-all", + "sub_path": "filament/Generic BVOH @Hi-all.json" + }, + { + "name": "Generic BVOH @K1 Max_CFS-C-all", + "sub_path": "filament/Generic BVOH @K1 Max_CFS-C-all.json" + }, + { + "name": "Generic BVOH @K1C-all", + "sub_path": "filament/Generic BVOH @K1C-all.json" + }, + { + "name": "Generic BVOH @K1C_CFS-C-all", + "sub_path": "filament/Generic BVOH @K1C_CFS-C-all.json" + }, + { + "name": "Generic BVOH @K1_CFS-C-all", + "sub_path": "filament/Generic BVOH @K1_CFS-C-all.json" + }, + { + "name": "Generic BVOH @K2 Plus-all", + "sub_path": "filament/Generic BVOH @K2 Plus-all.json" + }, + { + "name": "Generic BVOH @K2 Pro-all", + "sub_path": "filament/Generic BVOH @K2 Pro-all.json" + }, + { + "name": "Generic BVOH @K2-all", + "sub_path": "filament/Generic BVOH @K2-all.json" + }, + { + "name": "Generic PA @Creality Ender-5Max-all", + "sub_path": "filament/Generic PA @Creality Ender-5Max-all.json" + }, + { + "name": "Generic PA6-GF @K2 Plus-all", + "sub_path": "filament/Generic PA6-GF @K2 Plus-all.json" + }, + { + "name": "Generic PCTG @K2 Plus-all", + "sub_path": "filament/Generic PCTG @K2 Plus-all.json" + }, + { + "name": "Generic PETG @Creality Ender-5Max-all", + "sub_path": "filament/Generic PETG @Creality Ender-5Max-all.json" + }, + { + "name": "Generic PETG-GF @K2 Plus-all", + "sub_path": "filament/Generic PETG-GF @K2 Plus-all.json" + }, + { + "name": "Generic PETG-GF @K2 Pro-all", + "sub_path": "filament/Generic PETG-GF @K2 Pro-all.json" + }, + { + "name": "Generic PETG-GF @K2-all", + "sub_path": "filament/Generic PETG-GF @K2-all.json" + }, + { + "name": "Generic PLA @Creality Ender-5Max-all", + "sub_path": "filament/Generic PLA @Creality Ender-5Max-all.json" + }, + { + "name": "Generic PP-CF @K2 Plus-all", + "sub_path": "filament/Generic PP-CF @K2 Plus-all.json" + }, + { + "name": "Generic PVA @Hi-all", + "sub_path": "filament/Generic PVA @Hi-all.json" + }, + { + "name": "Generic PVA @K1 Max_CFS-C-all", + "sub_path": "filament/Generic PVA @K1 Max_CFS-C-all.json" + }, + { + "name": "Generic PVA @K1C-all", + "sub_path": "filament/Generic PVA @K1C-all.json" + }, + { + "name": "Generic PVA @K1C_CFS-C-all", + "sub_path": "filament/Generic PVA @K1C_CFS-C-all.json" + }, + { + "name": "Generic PVA @K1_CFS-C-all", + "sub_path": "filament/Generic PVA @K1_CFS-C-all.json" + }, + { + "name": "Generic PVA @K2 Plus-all", + "sub_path": "filament/Generic PVA @K2 Plus-all.json" + }, + { + "name": "Generic PVA @K2 Pro-all", + "sub_path": "filament/Generic PVA @K2 Pro-all.json" + }, + { + "name": "Generic PVA @K2-all", + "sub_path": "filament/Generic PVA @K2-all.json" + }, + { + "name": "Generic TPU @Creality Ender-5Max-all", + "sub_path": "filament/Generic TPU @Creality Ender-5Max-all.json" + }, + { + "name": "Hyper PETG-GF @K1C-all", + "sub_path": "filament/Hyper PETG-GF @K1C-all.json" + }, + { + "name": "Hyper PETG-GF @K2 Plus-all", + "sub_path": "filament/Hyper PETG-GF @K2 Plus-all.json" + }, + { + "name": "Hyper PETG-GF @K2 Pro-all", + "sub_path": "filament/Hyper PETG-GF @K2 Pro-all.json" + }, + { + "name": "Hyper PETG-GF @K2-all", + "sub_path": "filament/Hyper PETG-GF @K2-all.json" + }, { "name": "fdm_filament_abs", "sub_path": "filament/fdm_filament_abs.json" @@ -1701,300 +1825,24 @@ "sub_path": "filament/fdm_filament_tpu.json" }, { - "name": "Generic ABS @Creality", - "sub_path": "filament/Generic ABS @Creality.json" + "name": "Generic HIPS @K1 Max_CFS-C-all", + "sub_path": "filament/Generic HIPS @K1 Max_CFS-C-all.json" }, { - "name": "Generic ASA @Creality", - "sub_path": "filament/Generic ASA @Creality.json" + "name": "Generic HIPS @K1C-all", + "sub_path": "filament/Generic HIPS @K1C-all.json" }, { - "name": "Generic PA-CF @Creality", - "sub_path": "filament/Generic PA-CF @Creality.json" + "name": "Generic HIPS @K1C_CFS-C-all", + "sub_path": "filament/Generic HIPS @K1C_CFS-C-all.json" }, { - "name": "Generic PC @Creality", - "sub_path": "filament/Generic PC @Creality.json" + "name": "Generic HIPS @K1_CFS-C-all", + "sub_path": "filament/Generic HIPS @K1_CFS-C-all.json" }, { - "name": "Generic PETG @Creality", - "sub_path": "filament/Generic PETG @Creality.json" - }, - { - "name": "Generic PLA @Creality", - "sub_path": "filament/Generic PLA @Creality.json" - }, - { - "name": "Generic PLA-CF @Creality", - "sub_path": "filament/Generic PLA-CF @Creality.json" - }, - { - "name": "Generic PLA HF @Creality", - "sub_path": "filament/Generic PLA HF @Creality.json" - }, - { - "name": "Generic Speed PLA @Creality HF", - "sub_path": "filament/Generic Speed PLA @Creality HF.json" - }, - { - "name": "Generic TPU @Creality", - "sub_path": "filament/Generic TPU @Creality.json" - }, - { - "name": "Generic ABS @Creality Ender-3V3-all", - "sub_path": "filament/Generic ABS @Creality Ender-3V3-all.json" - }, - { - "name": "Generic ABS @Creality Hi-all", - "sub_path": "filament/Generic ABS @Creality Hi-all.json" - }, - { - "name": "Generic ABS @Creality K1-all", - "sub_path": "filament/Generic ABS @Creality K1-all.json" - }, - { - "name": "Generic ABS @Creality K2-all", - "sub_path": "filament/Generic ABS @Creality K2-all.json" - }, - { - "name": "Generic ASA @Creality Ender-3V3-all", - "sub_path": "filament/Generic ASA @Creality Ender-3V3-all.json" - }, - { - "name": "Generic ASA @Creality Hi-all", - "sub_path": "filament/Generic ASA @Creality Hi-all.json" - }, - { - "name": "Generic ASA @Creality K1-all", - "sub_path": "filament/Generic ASA @Creality K1-all.json" - }, - { - "name": "Generic ASA @Creality K2-all", - "sub_path": "filament/Generic ASA @Creality K2-all.json" - }, - { - "name": "Generic PA-CF @Creality Ender-3V3-all", - "sub_path": "filament/Generic PA-CF @Creality Ender-3V3-all.json" - }, - { - "name": "Generic PA-CF @Creality K1-all", - "sub_path": "filament/Generic PA-CF @Creality K1-all.json" - }, - { - "name": "Generic PA-CF @Creality K2-all", - "sub_path": "filament/Generic PA-CF @Creality K2-all.json" - }, - { - "name": "Generic PC @Creality K1-all", - "sub_path": "filament/Generic PC @Creality K1-all.json" - }, - { - "name": "Generic PETG @Creality Ender-3V3-all", - "sub_path": "filament/Generic PETG @Creality Ender-3V3-all.json" - }, - { - "name": "Generic PETG @Creality Hi-all", - "sub_path": "filament/Generic PETG @Creality Hi-all.json" - }, - { - "name": "Generic PETG @Creality K1-all", - "sub_path": "filament/Generic PETG @Creality K1-all.json" - }, - { - "name": "Generic PETG @Creality K2-all", - "sub_path": "filament/Generic PETG @Creality K2-all.json" - }, - { - "name": "Generic PLA @Creality Ender-3V3-all", - "sub_path": "filament/Generic PLA @Creality Ender-3V3-all.json" - }, - { - "name": "Generic PLA @Creality Hi-all", - "sub_path": "filament/Generic PLA @Creality Hi-all.json" - }, - { - "name": "Generic PLA @Creality K1-all", - "sub_path": "filament/Generic PLA @Creality K1-all.json" - }, - { - "name": "Generic PLA @Creality K2-all", - "sub_path": "filament/Generic PLA @Creality K2-all.json" - }, - { - "name": "Generic PLA-CF @Creality Hi-all", - "sub_path": "filament/Generic PLA-CF @Creality Hi-all.json" - }, - { - "name": "Generic PLA-CF @Creality K1-all", - "sub_path": "filament/Generic PLA-CF @Creality K1-all.json" - }, - { - "name": "Generic PLA-CF @Creality K2-all", - "sub_path": "filament/Generic PLA-CF @Creality K2-all.json" - }, - { - "name": "Generic TPU @Creality Ender-3V3-all", - "sub_path": "filament/Generic TPU @Creality Ender-3V3-all.json" - }, - { - "name": "Generic TPU @Creality Hi-all", - "sub_path": "filament/Generic TPU @Creality Hi-all.json" - }, - { - "name": "Generic TPU @Creality K1-all", - "sub_path": "filament/Generic TPU @Creality K1-all.json" - }, - { - "name": "Generic TPU @Creality K2-all", - "sub_path": "filament/Generic TPU @Creality K2-all.json" - }, - { - "name": "Generic ASA-CF @Creality Hi-all", - "sub_path": "filament/Generic ASA-CF @Creality Hi-all.json" - }, - { - "name": "Generic PETG-CF @Creality Hi-all", - "sub_path": "filament/Generic PETG-CF @Creality Hi-all.json" - }, - { - "name": "Generic PLA High Speed @Creality Ender-3V3-all", - "sub_path": "filament/Generic PLA High Speed @Creality Ender-3V3-all.json" - }, - { - "name": "Generic PLA Matte @Creality Ender-3V3-all", - "sub_path": "filament/Generic PLA Matte @Creality Ender-3V3-all.json" - }, - { - "name": "Generic PLA Silk @Creality Ender-3V3-all", - "sub_path": "filament/Generic PLA Silk @Creality Ender-3V3-all.json" - }, - { - "name": "Generic PLA High Speed @Creality Hi-all", - "sub_path": "filament/Generic PLA High Speed @Creality Hi-all.json" - }, - { - "name": "Generic PLA Matte @Creality Hi-all", - "sub_path": "filament/Generic PLA Matte @Creality Hi-all.json" - }, - { - "name": "Generic PLA Silk @Creality Hi-all", - "sub_path": "filament/Generic PLA Silk @Creality Hi-all.json" - }, - { - "name": "Generic PLA Wood @Creality Hi-all", - "sub_path": "filament/Generic PLA Wood @Creality Hi-all.json" - }, - { - "name": "Generic PLA High Speed @Creality K1-all", - "sub_path": "filament/Generic PLA High Speed @Creality K1-all.json" - }, - { - "name": "Generic PLA Matte @Creality K1-all", - "sub_path": "filament/Generic PLA Matte @Creality K1-all.json" - }, - { - "name": "Generic PLA Silk @Creality K1-all", - "sub_path": "filament/Generic PLA Silk @Creality K1-all.json" - }, - { - "name": "Generic PLA High Speed @Creality K2-all", - "sub_path": "filament/Generic PLA High Speed @Creality K2-all.json" - }, - { - "name": "Generic PLA Matte @Creality K2-all", - "sub_path": "filament/Generic PLA Matte @Creality K2-all.json" - }, - { - "name": "Generic PLA Silk @Creality K2-all", - "sub_path": "filament/Generic PLA Silk @Creality K2-all.json" - }, - { - "name": "fdm_filament_pp", - "sub_path": "filament/fdm_filament_pp.json" - }, - { - "name": "fdm_filament_pps", - "sub_path": "filament/fdm_filament_pps.json" - }, - { - "name": "fdm_filament_pva", - "sub_path": "filament/fdm_filament_pva.json" - }, - { - "name": "fdm_filament_petg", - "sub_path": "filament/fdm_filament_petg.json" - }, - { - "name": "fdm_filament_hips", - "sub_path": "filament/fdm_filament_hips.json" - }, - { - "name": "CR-ABS @Ender-3 V4-all", - "sub_path": "filament/CR-ABS @Ender-3 V4-all.json" - }, - { - "name": "CR-ABS @Hi-all", - "sub_path": "filament/CR-ABS @Hi-all.json" - }, - { - "name": "CR-ABS @K1 Max_CFS-C-all", - "sub_path": "filament/CR-ABS @K1 Max_CFS-C-all.json" - }, - { - "name": "CR-ABS @K1 SE-all", - "sub_path": "filament/CR-ABS @K1 SE-all.json" - }, - { - "name": "CR-ABS @K1 SE_CFS-C-all", - "sub_path": "filament/CR-ABS @K1 SE_CFS-C-all.json" - }, - { - "name": "CR-ABS @K1C-all", - "sub_path": "filament/CR-ABS @K1C-all.json" - }, - { - "name": "CR-ABS @K1C_CFS-C-all", - "sub_path": "filament/CR-ABS @K1C_CFS-C-all.json" - }, - { - "name": "CR-ABS @K1_CFS-C-all", - "sub_path": "filament/CR-ABS @K1_CFS-C-all.json" - }, - { - "name": "CR-ABS @K2 Plus-all", - "sub_path": "filament/CR-ABS @K2 Plus-all.json" - }, - { - "name": "CR-ABS @K2 Pro-all", - "sub_path": "filament/CR-ABS @K2 Pro-all.json" - }, - { - "name": "CR-ABS @K2 SE-all", - "sub_path": "filament/CR-ABS @K2 SE-all.json" - }, - { - "name": "CR-ABS @K2-all", - "sub_path": "filament/CR-ABS @K2-all.json" - }, - { - "name": "CR-Nylon @K1 Max_CFS-C-all", - "sub_path": "filament/CR-Nylon @K1 Max_CFS-C-all.json" - }, - { - "name": "CR-Nylon @K1C-all", - "sub_path": "filament/CR-Nylon @K1C-all.json" - }, - { - "name": "CR-Nylon @K1C_CFS-C-all", - "sub_path": "filament/CR-Nylon @K1C_CFS-C-all.json" - }, - { - "name": "CR-Nylon @K1_CFS-C-all", - "sub_path": "filament/CR-Nylon @K1_CFS-C-all.json" - }, - { - "name": "CR-Nylon @K2 Plus-all", - "sub_path": "filament/CR-Nylon @K2 Plus-all.json" + "name": "Generic HIPS @K2 Plus-all", + "sub_path": "filament/Generic HIPS @K2 Plus-all.json" }, { "name": "CR-PETG @Ender-3 V4-all", @@ -2048,6 +1896,798 @@ "name": "CR-PETG @SPARKX i7-all", "sub_path": "filament/CR-PETG @SPARKX i7-all.json" }, + { + "name": "Generic PETG @Ender-3 V4-all", + "sub_path": "filament/Generic PETG @Ender-3 V4-all.json" + }, + { + "name": "Generic PETG @Hi-all", + "sub_path": "filament/Generic PETG @Hi-all.json" + }, + { + "name": "Generic PETG @K1 Max_CFS-C-all", + "sub_path": "filament/Generic PETG @K1 Max_CFS-C-all.json" + }, + { + "name": "Generic PETG @K1 SE-all", + "sub_path": "filament/Generic PETG @K1 SE-all.json" + }, + { + "name": "Generic PETG @K1 SE_CFS-C-all", + "sub_path": "filament/Generic PETG @K1 SE_CFS-C-all.json" + }, + { + "name": "Generic PETG @K1C-all", + "sub_path": "filament/Generic PETG @K1C-all.json" + }, + { + "name": "Generic PETG @K1C_CFS-C-all", + "sub_path": "filament/Generic PETG @K1C_CFS-C-all.json" + }, + { + "name": "Generic PETG @K1_CFS-C-all", + "sub_path": "filament/Generic PETG @K1_CFS-C-all.json" + }, + { + "name": "Generic PETG @K2 Plus-all", + "sub_path": "filament/Generic PETG @K2 Plus-all.json" + }, + { + "name": "Generic PETG @K2 Pro-all", + "sub_path": "filament/Generic PETG @K2 Pro-all.json" + }, + { + "name": "Generic PETG @K2 SE-all", + "sub_path": "filament/Generic PETG @K2 SE-all.json" + }, + { + "name": "Generic PETG @K2-all", + "sub_path": "filament/Generic PETG @K2-all.json" + }, + { + "name": "Generic PETG @SPARKX i7-all", + "sub_path": "filament/Generic PETG @SPARKX i7-all.json" + }, + { + "name": "Generic PETG-CF @K1 Max_CFS-C-all", + "sub_path": "filament/Generic PETG-CF @K1 Max_CFS-C-all.json" + }, + { + "name": "Generic PETG-CF @K1C-all", + "sub_path": "filament/Generic PETG-CF @K1C-all.json" + }, + { + "name": "Generic PETG-CF @K1C_CFS-C-all", + "sub_path": "filament/Generic PETG-CF @K1C_CFS-C-all.json" + }, + { + "name": "Generic PETG-CF @K1_CFS-C-all", + "sub_path": "filament/Generic PETG-CF @K1_CFS-C-all.json" + }, + { + "name": "Generic PETG-CF @K2 Plus-all", + "sub_path": "filament/Generic PETG-CF @K2 Plus-all.json" + }, + { + "name": "Generic PETG-CF @K2 Pro-all", + "sub_path": "filament/Generic PETG-CF @K2 Pro-all.json" + }, + { + "name": "Generic PETG-CF @K2-all", + "sub_path": "filament/Generic PETG-CF @K2-all.json" + }, + { + "name": "Generic PETG-CF @SPARKX i7-all", + "sub_path": "filament/Generic PETG-CF @SPARKX i7-all.json" + }, + { + "name": "Hyper PETG @Ender-3 V4-all", + "sub_path": "filament/Hyper PETG @Ender-3 V4-all.json" + }, + { + "name": "Hyper PETG @Hi-all", + "sub_path": "filament/Hyper PETG @Hi-all.json" + }, + { + "name": "Hyper PETG @K1 Max_CFS-C-all", + "sub_path": "filament/Hyper PETG @K1 Max_CFS-C-all.json" + }, + { + "name": "Hyper PETG @K1 SE-all", + "sub_path": "filament/Hyper PETG @K1 SE-all.json" + }, + { + "name": "Hyper PETG @K1 SE_CFS-C-all", + "sub_path": "filament/Hyper PETG @K1 SE_CFS-C-all.json" + }, + { + "name": "Hyper PETG @K1C-all", + "sub_path": "filament/Hyper PETG @K1C-all.json" + }, + { + "name": "Hyper PETG @K1C_CFS-C-all", + "sub_path": "filament/Hyper PETG @K1C_CFS-C-all.json" + }, + { + "name": "Hyper PETG @K1_CFS-C-all", + "sub_path": "filament/Hyper PETG @K1_CFS-C-all.json" + }, + { + "name": "Hyper PETG @K2 Plus-all", + "sub_path": "filament/Hyper PETG @K2 Plus-all.json" + }, + { + "name": "Hyper PETG @K2 Pro-all", + "sub_path": "filament/Hyper PETG @K2 Pro-all.json" + }, + { + "name": "Hyper PETG @K2 SE-all", + "sub_path": "filament/Hyper PETG @K2 SE-all.json" + }, + { + "name": "Hyper PETG @K2-all", + "sub_path": "filament/Hyper PETG @K2-all.json" + }, + { + "name": "Hyper PETG @SPARKX i7-all", + "sub_path": "filament/Hyper PETG @SPARKX i7-all.json" + }, + { + "name": "Hyper PETG-CF @K1 Max_CFS-C-all", + "sub_path": "filament/Hyper PETG-CF @K1 Max_CFS-C-all.json" + }, + { + "name": "Hyper PETG-CF @K1C-all", + "sub_path": "filament/Hyper PETG-CF @K1C-all.json" + }, + { + "name": "Hyper PETG-CF @K1C_CFS-C-all", + "sub_path": "filament/Hyper PETG-CF @K1C_CFS-C-all.json" + }, + { + "name": "Hyper PETG-CF @K1_CFS-C-all", + "sub_path": "filament/Hyper PETG-CF @K1_CFS-C-all.json" + }, + { + "name": "Hyper PETG-CF @K2 Plus-all", + "sub_path": "filament/Hyper PETG-CF @K2 Plus-all.json" + }, + { + "name": "Hyper PETG-CF @K2 Pro-all", + "sub_path": "filament/Hyper PETG-CF @K2 Pro-all.json" + }, + { + "name": "Hyper PETG-CF @K2-all", + "sub_path": "filament/Hyper PETG-CF @K2-all.json" + }, + { + "name": "Hyper PETG-CF @SPARKX i7-all", + "sub_path": "filament/Hyper PETG-CF @SPARKX i7-all.json" + }, + { + "name": "Soleyin Basic PETG @Hi-all", + "sub_path": "filament/Soleyin Basic PETG @Hi-all.json" + }, + { + "name": "Soleyin Basic PETG @K1C-all", + "sub_path": "filament/Soleyin Basic PETG @K1C-all.json" + }, + { + "name": "Soleyin Basic PETG @K2 Plus-all", + "sub_path": "filament/Soleyin Basic PETG @K2 Plus-all.json" + }, + { + "name": "Soleyin Basic PETG @K2 Pro-all", + "sub_path": "filament/Soleyin Basic PETG @K2 Pro-all.json" + }, + { + "name": "Soleyin Basic PETG @K2-all", + "sub_path": "filament/Soleyin Basic PETG @K2-all.json" + }, + { + "name": "Soleyin Basic PETG @SPARKX i7-all", + "sub_path": "filament/Soleyin Basic PETG @SPARKX i7-all.json" + }, + { + "name": "eSUN PETG @K2 Plus-all", + "sub_path": "filament/eSUN PETG @K2 Plus-all.json" + }, + { + "name": "eSUN PETG+HS @K2 Plus-all", + "sub_path": "filament/eSUN PETG+HS @K2 Plus-all.json" + }, + { + "name": "eSUN PETG-Basic @K2 Plus-all", + "sub_path": "filament/eSUN PETG-Basic @K2 Plus-all.json" + }, + { + "name": "Generic PP @K1 Max_CFS-C-all", + "sub_path": "filament/Generic PP @K1 Max_CFS-C-all.json" + }, + { + "name": "Generic PP @K1C-all", + "sub_path": "filament/Generic PP @K1C-all.json" + }, + { + "name": "Generic PP @K1C_CFS-C-all", + "sub_path": "filament/Generic PP @K1C_CFS-C-all.json" + }, + { + "name": "Generic PP @K1_CFS-C-all", + "sub_path": "filament/Generic PP @K1_CFS-C-all.json" + }, + { + "name": "Generic PP @K2 Plus-all", + "sub_path": "filament/Generic PP @K2 Plus-all.json" + }, + { + "name": "Generic PP @K2 Pro-all", + "sub_path": "filament/Generic PP @K2 Pro-all.json" + }, + { + "name": "Generic PP @K2-all", + "sub_path": "filament/Generic PP @K2-all.json" + }, + { + "name": "Generic PPS @K1 Max_CFS-C-all", + "sub_path": "filament/Generic PPS @K1 Max_CFS-C-all.json" + }, + { + "name": "Generic PPS @K1C-all", + "sub_path": "filament/Generic PPS @K1C-all.json" + }, + { + "name": "Generic PPS @K1C_CFS-C-all", + "sub_path": "filament/Generic PPS @K1C_CFS-C-all.json" + }, + { + "name": "Generic PPS @K1_CFS-C-all", + "sub_path": "filament/Generic PPS @K1_CFS-C-all.json" + }, + { + "name": "Generic PPS @K2 Plus-all", + "sub_path": "filament/Generic PPS @K2 Plus-all.json" + }, + { + "name": "Generic PPS-CF @K1 Max_CFS-C-all", + "sub_path": "filament/Generic PPS-CF @K1 Max_CFS-C-all.json" + }, + { + "name": "Generic PPS-CF @K1C-all", + "sub_path": "filament/Generic PPS-CF @K1C-all.json" + }, + { + "name": "Generic PPS-CF @K1C_CFS-C-all", + "sub_path": "filament/Generic PPS-CF @K1C_CFS-C-all.json" + }, + { + "name": "Generic PPS-CF @K1_CFS-C-all", + "sub_path": "filament/Generic PPS-CF @K1_CFS-C-all.json" + }, + { + "name": "Generic PPS-CF @K2 Plus-all", + "sub_path": "filament/Generic PPS-CF @K2 Plus-all.json" + }, + { + "name": "CR-ABS @Ender-3 V4-all", + "sub_path": "filament/CR-ABS @Ender-3 V4-all.json" + }, + { + "name": "CR-ABS @Hi-all", + "sub_path": "filament/CR-ABS @Hi-all.json" + }, + { + "name": "CR-ABS @K1 Max_CFS-C-all", + "sub_path": "filament/CR-ABS @K1 Max_CFS-C-all.json" + }, + { + "name": "CR-ABS @K1 SE-all", + "sub_path": "filament/CR-ABS @K1 SE-all.json" + }, + { + "name": "CR-ABS @K1 SE_CFS-C-all", + "sub_path": "filament/CR-ABS @K1 SE_CFS-C-all.json" + }, + { + "name": "CR-ABS @K1C-all", + "sub_path": "filament/CR-ABS @K1C-all.json" + }, + { + "name": "CR-ABS @K1C_CFS-C-all", + "sub_path": "filament/CR-ABS @K1C_CFS-C-all.json" + }, + { + "name": "CR-ABS @K1_CFS-C-all", + "sub_path": "filament/CR-ABS @K1_CFS-C-all.json" + }, + { + "name": "CR-ABS @K2 Plus-all", + "sub_path": "filament/CR-ABS @K2 Plus-all.json" + }, + { + "name": "CR-ABS @K2 Pro-all", + "sub_path": "filament/CR-ABS @K2 Pro-all.json" + }, + { + "name": "CR-ABS @K2 SE-all", + "sub_path": "filament/CR-ABS @K2 SE-all.json" + }, + { + "name": "CR-ABS @K2-all", + "sub_path": "filament/CR-ABS @K2-all.json" + }, + { + "name": "Generic ABS @Creality", + "sub_path": "filament/Generic ABS @Creality.json" + }, + { + "name": "Generic ABS @Ender-3 V4-all", + "sub_path": "filament/Generic ABS @Ender-3 V4-all.json" + }, + { + "name": "Generic ABS @Hi-all", + "sub_path": "filament/Generic ABS @Hi-all.json" + }, + { + "name": "Generic ABS @K1 Max_CFS-C-all", + "sub_path": "filament/Generic ABS @K1 Max_CFS-C-all.json" + }, + { + "name": "Generic ABS @K1 SE-all", + "sub_path": "filament/Generic ABS @K1 SE-all.json" + }, + { + "name": "Generic ABS @K1 SE_CFS-C-all", + "sub_path": "filament/Generic ABS @K1 SE_CFS-C-all.json" + }, + { + "name": "Generic ABS @K1C-all", + "sub_path": "filament/Generic ABS @K1C-all.json" + }, + { + "name": "Generic ABS @K1C_CFS-C-all", + "sub_path": "filament/Generic ABS @K1C_CFS-C-all.json" + }, + { + "name": "Generic ABS @K1_CFS-C-all", + "sub_path": "filament/Generic ABS @K1_CFS-C-all.json" + }, + { + "name": "Generic ABS @K2 Plus-all", + "sub_path": "filament/Generic ABS @K2 Plus-all.json" + }, + { + "name": "Generic ABS @K2 Pro-all", + "sub_path": "filament/Generic ABS @K2 Pro-all.json" + }, + { + "name": "Generic ABS @K2 SE-all", + "sub_path": "filament/Generic ABS @K2 SE-all.json" + }, + { + "name": "Generic ABS @K2-all", + "sub_path": "filament/Generic ABS @K2-all.json" + }, + { + "name": "Hyper ABS @Ender-3 V4-all", + "sub_path": "filament/Hyper ABS @Ender-3 V4-all.json" + }, + { + "name": "Hyper ABS @Hi-all", + "sub_path": "filament/Hyper ABS @Hi-all.json" + }, + { + "name": "Hyper ABS @K1 Max_CFS-C-all", + "sub_path": "filament/Hyper ABS @K1 Max_CFS-C-all.json" + }, + { + "name": "Hyper ABS @K1 SE-all", + "sub_path": "filament/Hyper ABS @K1 SE-all.json" + }, + { + "name": "Hyper ABS @K1 SE_CFS-C-all", + "sub_path": "filament/Hyper ABS @K1 SE_CFS-C-all.json" + }, + { + "name": "Hyper ABS @K1C-all", + "sub_path": "filament/Hyper ABS @K1C-all.json" + }, + { + "name": "Hyper ABS @K1C_CFS-C-all", + "sub_path": "filament/Hyper ABS @K1C_CFS-C-all.json" + }, + { + "name": "Hyper ABS @K1_CFS-C-all", + "sub_path": "filament/Hyper ABS @K1_CFS-C-all.json" + }, + { + "name": "Hyper ABS @K2 Plus-all", + "sub_path": "filament/Hyper ABS @K2 Plus-all.json" + }, + { + "name": "Hyper ABS @K2 Pro-all", + "sub_path": "filament/Hyper ABS @K2 Pro-all.json" + }, + { + "name": "Hyper ABS @K2 SE-all", + "sub_path": "filament/Hyper ABS @K2 SE-all.json" + }, + { + "name": "Hyper ABS @K2-all", + "sub_path": "filament/Hyper ABS @K2-all.json" + }, + { + "name": "eSUN ABS+ @K2 Plus-all", + "sub_path": "filament/eSUN ABS+ @K2 Plus-all.json" + }, + { + "name": "Generic ASA @Creality", + "sub_path": "filament/Generic ASA @Creality.json" + }, + { + "name": "Generic ASA @K1 Max_CFS-C-all", + "sub_path": "filament/Generic ASA @K1 Max_CFS-C-all.json" + }, + { + "name": "Generic ASA @K1 SE-all", + "sub_path": "filament/Generic ASA @K1 SE-all.json" + }, + { + "name": "Generic ASA @K1 SE_CFS-C-all", + "sub_path": "filament/Generic ASA @K1 SE_CFS-C-all.json" + }, + { + "name": "Generic ASA @K1C-all", + "sub_path": "filament/Generic ASA @K1C-all.json" + }, + { + "name": "Generic ASA @K1C_CFS-C-all", + "sub_path": "filament/Generic ASA @K1C_CFS-C-all.json" + }, + { + "name": "Generic ASA @K1_CFS-C-all", + "sub_path": "filament/Generic ASA @K1_CFS-C-all.json" + }, + { + "name": "Generic ASA @K2 Plus-all", + "sub_path": "filament/Generic ASA @K2 Plus-all.json" + }, + { + "name": "Generic ASA @K2 Pro-all", + "sub_path": "filament/Generic ASA @K2 Pro-all.json" + }, + { + "name": "Generic ASA @K2 SE-all", + "sub_path": "filament/Generic ASA @K2 SE-all.json" + }, + { + "name": "Generic ASA @K2-all", + "sub_path": "filament/Generic ASA @K2-all.json" + }, + { + "name": "HP-ASA @K1 Max_CFS-C-all", + "sub_path": "filament/HP-ASA @K1 Max_CFS-C-all.json" + }, + { + "name": "HP-ASA @K1C-all", + "sub_path": "filament/HP-ASA @K1C-all.json" + }, + { + "name": "HP-ASA @K1C_CFS-C-all", + "sub_path": "filament/HP-ASA @K1C_CFS-C-all.json" + }, + { + "name": "HP-ASA @K1_CFS-C-all", + "sub_path": "filament/HP-ASA @K1_CFS-C-all.json" + }, + { + "name": "HP-ASA @K2 Plus-all", + "sub_path": "filament/HP-ASA @K2 Plus-all.json" + }, + { + "name": "HP-ASA @K2 Pro-all", + "sub_path": "filament/HP-ASA @K2 Pro-all.json" + }, + { + "name": "HP-ASA @K2 SE-all", + "sub_path": "filament/HP-ASA @K2 SE-all.json" + }, + { + "name": "HP-ASA @K2-all", + "sub_path": "filament/HP-ASA @K2-all.json" + }, + { + "name": "eSUN ASA+ @K2 Plus-all", + "sub_path": "filament/eSUN ASA+ @K2 Plus-all.json" + }, + { + "name": "CR-Nylon @K1 Max_CFS-C-all", + "sub_path": "filament/CR-Nylon @K1 Max_CFS-C-all.json" + }, + { + "name": "CR-Nylon @K1C-all", + "sub_path": "filament/CR-Nylon @K1C-all.json" + }, + { + "name": "CR-Nylon @K1C_CFS-C-all", + "sub_path": "filament/CR-Nylon @K1C_CFS-C-all.json" + }, + { + "name": "CR-Nylon @K1_CFS-C-all", + "sub_path": "filament/CR-Nylon @K1_CFS-C-all.json" + }, + { + "name": "CR-Nylon @K2 Plus-all", + "sub_path": "filament/CR-Nylon @K2 Plus-all.json" + }, + { + "name": "Generic PA @K1 Max_CFS-C-all", + "sub_path": "filament/Generic PA @K1 Max_CFS-C-all.json" + }, + { + "name": "Generic PA @K1C-all", + "sub_path": "filament/Generic PA @K1C-all.json" + }, + { + "name": "Generic PA @K1C_CFS-C-all", + "sub_path": "filament/Generic PA @K1C_CFS-C-all.json" + }, + { + "name": "Generic PA @K1_CFS-C-all", + "sub_path": "filament/Generic PA @K1_CFS-C-all.json" + }, + { + "name": "Generic PA @K2 Plus-all", + "sub_path": "filament/Generic PA @K2 Plus-all.json" + }, + { + "name": "Generic PA @K2 Pro-all", + "sub_path": "filament/Generic PA @K2 Pro-all.json" + }, + { + "name": "Generic PA @K2-all", + "sub_path": "filament/Generic PA @K2-all.json" + }, + { + "name": "Generic PA-CF @Creality", + "sub_path": "filament/Generic PA-CF @Creality.json" + }, + { + "name": "Generic PA-CF @K1 Max_CFS-C-all", + "sub_path": "filament/Generic PA-CF @K1 Max_CFS-C-all.json" + }, + { + "name": "Generic PA-CF @K1C-all", + "sub_path": "filament/Generic PA-CF @K1C-all.json" + }, + { + "name": "Generic PA-CF @K1C_CFS-C-all", + "sub_path": "filament/Generic PA-CF @K1C_CFS-C-all.json" + }, + { + "name": "Generic PA-CF @K1_CFS-C-all", + "sub_path": "filament/Generic PA-CF @K1_CFS-C-all.json" + }, + { + "name": "Generic PA-CF @K2 Plus-all", + "sub_path": "filament/Generic PA-CF @K2 Plus-all.json" + }, + { + "name": "Generic PA12-CF @K2 Plus-all", + "sub_path": "filament/Generic PA12-CF @K2 Plus-all.json" + }, + { + "name": "Generic PA6-CF @K1 Max_CFS-C-all", + "sub_path": "filament/Generic PA6-CF @K1 Max_CFS-C-all.json" + }, + { + "name": "Generic PA6-CF @K1C-all", + "sub_path": "filament/Generic PA6-CF @K1C-all.json" + }, + { + "name": "Generic PA6-CF @K1C_CFS-C-all", + "sub_path": "filament/Generic PA6-CF @K1C_CFS-C-all.json" + }, + { + "name": "Generic PA6-CF @K1_CFS-C-all", + "sub_path": "filament/Generic PA6-CF @K1_CFS-C-all.json" + }, + { + "name": "Generic PA6-CF @K2 Plus-all", + "sub_path": "filament/Generic PA6-CF @K2 Plus-all.json" + }, + { + "name": "Generic PA6-CF @K2 Pro-all", + "sub_path": "filament/Generic PA6-CF @K2 Pro-all.json" + }, + { + "name": "Generic PA612-CF @K2 Plus-all", + "sub_path": "filament/Generic PA612-CF @K2 Plus-all.json" + }, + { + "name": "Generic PA612-CF @K2 Pro-all", + "sub_path": "filament/Generic PA612-CF @K2 Pro-all.json" + }, + { + "name": "Generic PAHT-CF @K1 Max_CFS-C-all", + "sub_path": "filament/Generic PAHT-CF @K1 Max_CFS-C-all.json" + }, + { + "name": "Generic PAHT-CF @K1C-all", + "sub_path": "filament/Generic PAHT-CF @K1C-all.json" + }, + { + "name": "Generic PAHT-CF @K1C_CFS-C-all", + "sub_path": "filament/Generic PAHT-CF @K1C_CFS-C-all.json" + }, + { + "name": "Generic PAHT-CF @K1_CFS-C-all", + "sub_path": "filament/Generic PAHT-CF @K1_CFS-C-all.json" + }, + { + "name": "Generic PAHT-CF @K2 Plus-all", + "sub_path": "filament/Generic PAHT-CF @K2 Plus-all.json" + }, + { + "name": "Generic PAHT-CF @K2 Pro-all", + "sub_path": "filament/Generic PAHT-CF @K2 Pro-all.json" + }, + { + "name": "Generic PAHT-CF @K2-all", + "sub_path": "filament/Generic PAHT-CF @K2-all.json" + }, + { + "name": "Generic Support for PA @K2 Plus-all", + "sub_path": "filament/Generic Support for PA @K2 Plus-all.json" + }, + { + "name": "Hyper PA6-CF @K2 Plus-all", + "sub_path": "filament/Hyper PA6-CF @K2 Plus-all.json" + }, + { + "name": "Hyper PA6-CF @K2 Pro-all", + "sub_path": "filament/Hyper PA6-CF @K2 Pro-all.json" + }, + { + "name": "Hyper PA612-CF @K2 Plus-all", + "sub_path": "filament/Hyper PA612-CF @K2 Plus-all.json" + }, + { + "name": "Hyper PA612-CF @K2 Pro-all", + "sub_path": "filament/Hyper PA612-CF @K2 Pro-all.json" + }, + { + "name": "Hyper PAHT-CF @K1 Max_CFS-C-all", + "sub_path": "filament/Hyper PAHT-CF @K1 Max_CFS-C-all.json" + }, + { + "name": "Hyper PAHT-CF @K1C-all", + "sub_path": "filament/Hyper PAHT-CF @K1C-all.json" + }, + { + "name": "Hyper PAHT-CF @K1C_CFS-C-all", + "sub_path": "filament/Hyper PAHT-CF @K1C_CFS-C-all.json" + }, + { + "name": "Hyper PAHT-CF @K1_CFS-C-all", + "sub_path": "filament/Hyper PAHT-CF @K1_CFS-C-all.json" + }, + { + "name": "Hyper PAHT-CF @K2 Plus-all", + "sub_path": "filament/Hyper PAHT-CF @K2 Plus-all.json" + }, + { + "name": "Hyper PAHT-CF @K2 Pro-all", + "sub_path": "filament/Hyper PAHT-CF @K2 Pro-all.json" + }, + { + "name": "Hyper PAHT-CF @K2-all", + "sub_path": "filament/Hyper PAHT-CF @K2-all.json" + }, + { + "name": "Hyper PPA-CF @K2 Plus-all", + "sub_path": "filament/Hyper PPA-CF @K2 Plus-all.json" + }, + { + "name": "Hyper PPA-CF @K2 Pro-all", + "sub_path": "filament/Hyper PPA-CF @K2 Pro-all.json" + }, + { + "name": "Generic PC @Creality", + "sub_path": "filament/Generic PC @Creality.json" + }, + { + "name": "Generic PC @K1 Max_CFS-C-all", + "sub_path": "filament/Generic PC @K1 Max_CFS-C-all.json" + }, + { + "name": "Generic PC @K1C-all", + "sub_path": "filament/Generic PC @K1C-all.json" + }, + { + "name": "Generic PC @K1C_CFS-C-all", + "sub_path": "filament/Generic PC @K1C_CFS-C-all.json" + }, + { + "name": "Generic PC @K1_CFS-C-all", + "sub_path": "filament/Generic PC @K1_CFS-C-all.json" + }, + { + "name": "Generic PC @K2 Plus-all", + "sub_path": "filament/Generic PC @K2 Plus-all.json" + }, + { + "name": "Generic PC @K2 Pro-all", + "sub_path": "filament/Generic PC @K2 Pro-all.json" + }, + { + "name": "Hyper PC @K2 Plus-all", + "sub_path": "filament/Hyper PC @K2 Plus-all.json" + }, + { + "name": "Hyper PC @K2 Pro-all", + "sub_path": "filament/Hyper PC @K2 Pro-all.json" + }, + { + "name": "Generic PET @K1 Max_CFS-C-all", + "sub_path": "filament/Generic PET @K1 Max_CFS-C-all.json" + }, + { + "name": "Generic PET @K1C-all", + "sub_path": "filament/Generic PET @K1C-all.json" + }, + { + "name": "Generic PET @K1C_CFS-C-all", + "sub_path": "filament/Generic PET @K1C_CFS-C-all.json" + }, + { + "name": "Generic PET @K1_CFS-C-all", + "sub_path": "filament/Generic PET @K1_CFS-C-all.json" + }, + { + "name": "Generic PET @K2 Plus-all", + "sub_path": "filament/Generic PET @K2 Plus-all.json" + }, + { + "name": "Generic PET @K2 Pro-all", + "sub_path": "filament/Generic PET @K2 Pro-all.json" + }, + { + "name": "Generic PET @K2-all", + "sub_path": "filament/Generic PET @K2-all.json" + }, + { + "name": "Generic PET-CF @K1 Max_CFS-C-all", + "sub_path": "filament/Generic PET-CF @K1 Max_CFS-C-all.json" + }, + { + "name": "Generic PET-CF @K1C-all", + "sub_path": "filament/Generic PET-CF @K1C-all.json" + }, + { + "name": "Generic PET-CF @K1C_CFS-C-all", + "sub_path": "filament/Generic PET-CF @K1C_CFS-C-all.json" + }, + { + "name": "Generic PET-CF @K1_CFS-C-all", + "sub_path": "filament/Generic PET-CF @K1_CFS-C-all.json" + }, + { + "name": "Generic PET-CF @K2 Plus-all", + "sub_path": "filament/Generic PET-CF @K2 Plus-all.json" + }, + { + "name": "Generic PET-CF @K2 Pro-all", + "sub_path": "filament/Generic PET-CF @K2 Pro-all.json" + }, + { + "name": "Generic PETG @Creality", + "sub_path": "filament/Generic PETG @Creality.json" + }, + { + "name": "eSUN PET-Basic @K2 Plus-all", + "sub_path": "filament/eSUN PET-Basic @K2 Plus-all.json" + }, { "name": "CR-PLA @Ender-3 V4-all", "sub_path": "filament/CR-PLA @Ender-3 V4-all.json" @@ -2240,38 +2880,6 @@ "name": "CR-Silk @SPARKX i7-all", "sub_path": "filament/CR-Silk @SPARKX i7-all.json" }, - { - "name": "CR-TPU @K1 Max_CFS-C-all", - "sub_path": "filament/CR-TPU @K1 Max_CFS-C-all.json" - }, - { - "name": "CR-TPU @K1C-all", - "sub_path": "filament/CR-TPU @K1C-all.json" - }, - { - "name": "CR-TPU @K1C_CFS-C-all", - "sub_path": "filament/CR-TPU @K1C_CFS-C-all.json" - }, - { - "name": "CR-TPU @K1_CFS-C-all", - "sub_path": "filament/CR-TPU @K1_CFS-C-all.json" - }, - { - "name": "CR-TPU @K2 Plus-all", - "sub_path": "filament/CR-TPU @K2 Plus-all.json" - }, - { - "name": "CR-TPU @K2 Pro-all", - "sub_path": "filament/CR-TPU @K2 Pro-all.json" - }, - { - "name": "CR-TPU @K2-all", - "sub_path": "filament/CR-TPU @K2-all.json" - }, - { - "name": "CR-TPU @SPARKX i7-all", - "sub_path": "filament/CR-TPU @SPARKX i7-all.json" - }, { "name": "CR-Wood @K1 Max_CFS-C-all", "sub_path": "filament/CR-Wood @K1 Max_CFS-C-all.json" @@ -2385,440 +2993,8 @@ "sub_path": "filament/Ender-PLA @SPARKX i7-all.json" }, { - "name": "Generic ABS @Ender-3 V4-all", - "sub_path": "filament/Generic ABS @Ender-3 V4-all.json" - }, - { - "name": "Generic ABS @Hi-all", - "sub_path": "filament/Generic ABS @Hi-all.json" - }, - { - "name": "Generic ABS @K1 Max_CFS-C-all", - "sub_path": "filament/Generic ABS @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic ABS @K1 SE-all", - "sub_path": "filament/Generic ABS @K1 SE-all.json" - }, - { - "name": "Generic ABS @K1 SE_CFS-C-all", - "sub_path": "filament/Generic ABS @K1 SE_CFS-C-all.json" - }, - { - "name": "Generic ABS @K1C-all", - "sub_path": "filament/Generic ABS @K1C-all.json" - }, - { - "name": "Generic ABS @K1C_CFS-C-all", - "sub_path": "filament/Generic ABS @K1C_CFS-C-all.json" - }, - { - "name": "Generic ABS @K1_CFS-C-all", - "sub_path": "filament/Generic ABS @K1_CFS-C-all.json" - }, - { - "name": "Generic ABS @K2 Plus-all", - "sub_path": "filament/Generic ABS @K2 Plus-all.json" - }, - { - "name": "Generic ABS @K2 Pro-all", - "sub_path": "filament/Generic ABS @K2 Pro-all.json" - }, - { - "name": "Generic ABS @K2 SE-all", - "sub_path": "filament/Generic ABS @K2 SE-all.json" - }, - { - "name": "Generic ABS @K2-all", - "sub_path": "filament/Generic ABS @K2-all.json" - }, - { - "name": "Generic ASA @K1 Max_CFS-C-all", - "sub_path": "filament/Generic ASA @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic ASA @K1 SE-all", - "sub_path": "filament/Generic ASA @K1 SE-all.json" - }, - { - "name": "Generic ASA @K1 SE_CFS-C-all", - "sub_path": "filament/Generic ASA @K1 SE_CFS-C-all.json" - }, - { - "name": "Generic ASA @K1C-all", - "sub_path": "filament/Generic ASA @K1C-all.json" - }, - { - "name": "Generic ASA @K1C_CFS-C-all", - "sub_path": "filament/Generic ASA @K1C_CFS-C-all.json" - }, - { - "name": "Generic ASA @K1_CFS-C-all", - "sub_path": "filament/Generic ASA @K1_CFS-C-all.json" - }, - { - "name": "Generic ASA @K2 Plus-all", - "sub_path": "filament/Generic ASA @K2 Plus-all.json" - }, - { - "name": "Generic ASA @K2 Pro-all", - "sub_path": "filament/Generic ASA @K2 Pro-all.json" - }, - { - "name": "Generic ASA @K2 SE-all", - "sub_path": "filament/Generic ASA @K2 SE-all.json" - }, - { - "name": "Generic ASA @K2-all", - "sub_path": "filament/Generic ASA @K2-all.json" - }, - { - "name": "Generic ASA-CF @K2 Plus-all", - "sub_path": "filament/Generic ASA-CF @K2 Plus-all.json" - }, - { - "name": "Generic BVOH @Hi-all", - "sub_path": "filament/Generic BVOH @Hi-all.json" - }, - { - "name": "Generic BVOH @K1 Max_CFS-C-all", - "sub_path": "filament/Generic BVOH @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic BVOH @K1C-all", - "sub_path": "filament/Generic BVOH @K1C-all.json" - }, - { - "name": "Generic BVOH @K1C_CFS-C-all", - "sub_path": "filament/Generic BVOH @K1C_CFS-C-all.json" - }, - { - "name": "Generic BVOH @K1_CFS-C-all", - "sub_path": "filament/Generic BVOH @K1_CFS-C-all.json" - }, - { - "name": "Generic BVOH @K2 Plus-all", - "sub_path": "filament/Generic BVOH @K2 Plus-all.json" - }, - { - "name": "Generic BVOH @K2 Pro-all", - "sub_path": "filament/Generic BVOH @K2 Pro-all.json" - }, - { - "name": "Generic BVOH @K2-all", - "sub_path": "filament/Generic BVOH @K2-all.json" - }, - { - "name": "Generic HIPS @K1 Max_CFS-C-all", - "sub_path": "filament/Generic HIPS @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic HIPS @K1C-all", - "sub_path": "filament/Generic HIPS @K1C-all.json" - }, - { - "name": "Generic HIPS @K1C_CFS-C-all", - "sub_path": "filament/Generic HIPS @K1C_CFS-C-all.json" - }, - { - "name": "Generic HIPS @K1_CFS-C-all", - "sub_path": "filament/Generic HIPS @K1_CFS-C-all.json" - }, - { - "name": "Generic HIPS @K2 Plus-all", - "sub_path": "filament/Generic HIPS @K2 Plus-all.json" - }, - { - "name": "Generic PA @K1 Max_CFS-C-all", - "sub_path": "filament/Generic PA @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic PA @K1C-all", - "sub_path": "filament/Generic PA @K1C-all.json" - }, - { - "name": "Generic PA @K1C_CFS-C-all", - "sub_path": "filament/Generic PA @K1C_CFS-C-all.json" - }, - { - "name": "Generic PA @K1_CFS-C-all", - "sub_path": "filament/Generic PA @K1_CFS-C-all.json" - }, - { - "name": "Generic PA @K2 Plus-all", - "sub_path": "filament/Generic PA @K2 Plus-all.json" - }, - { - "name": "Generic PA @K2 Pro-all", - "sub_path": "filament/Generic PA @K2 Pro-all.json" - }, - { - "name": "Generic PA @K2-all", - "sub_path": "filament/Generic PA @K2-all.json" - }, - { - "name": "Generic PA-CF @K1 Max_CFS-C-all", - "sub_path": "filament/Generic PA-CF @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic PA-CF @K1C-all", - "sub_path": "filament/Generic PA-CF @K1C-all.json" - }, - { - "name": "Generic PA-CF @K1C_CFS-C-all", - "sub_path": "filament/Generic PA-CF @K1C_CFS-C-all.json" - }, - { - "name": "Generic PA-CF @K1_CFS-C-all", - "sub_path": "filament/Generic PA-CF @K1_CFS-C-all.json" - }, - { - "name": "Generic PA-CF @K2 Plus-all", - "sub_path": "filament/Generic PA-CF @K2 Plus-all.json" - }, - { - "name": "Generic PA12-CF @K2 Plus-all", - "sub_path": "filament/Generic PA12-CF @K2 Plus-all.json" - }, - { - "name": "Generic PA6-CF @K1 Max_CFS-C-all", - "sub_path": "filament/Generic PA6-CF @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic PA6-CF @K1C-all", - "sub_path": "filament/Generic PA6-CF @K1C-all.json" - }, - { - "name": "Generic PA6-CF @K1C_CFS-C-all", - "sub_path": "filament/Generic PA6-CF @K1C_CFS-C-all.json" - }, - { - "name": "Generic PA6-CF @K1_CFS-C-all", - "sub_path": "filament/Generic PA6-CF @K1_CFS-C-all.json" - }, - { - "name": "Generic PA6-CF @K2 Plus-all", - "sub_path": "filament/Generic PA6-CF @K2 Plus-all.json" - }, - { - "name": "Generic PA6-CF @K2 Pro-all", - "sub_path": "filament/Generic PA6-CF @K2 Pro-all.json" - }, - { - "name": "Generic PA6-GF @K2 Plus-all", - "sub_path": "filament/Generic PA6-GF @K2 Plus-all.json" - }, - { - "name": "Generic PA612-CF @K2 Plus-all", - "sub_path": "filament/Generic PA612-CF @K2 Plus-all.json" - }, - { - "name": "Generic PA612-CF @K2 Pro-all", - "sub_path": "filament/Generic PA612-CF @K2 Pro-all.json" - }, - { - "name": "Generic PAHT-CF @K1 Max_CFS-C-all", - "sub_path": "filament/Generic PAHT-CF @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic PAHT-CF @K1C-all", - "sub_path": "filament/Generic PAHT-CF @K1C-all.json" - }, - { - "name": "Generic PAHT-CF @K1C_CFS-C-all", - "sub_path": "filament/Generic PAHT-CF @K1C_CFS-C-all.json" - }, - { - "name": "Generic PAHT-CF @K1_CFS-C-all", - "sub_path": "filament/Generic PAHT-CF @K1_CFS-C-all.json" - }, - { - "name": "Generic PAHT-CF @K2 Plus-all", - "sub_path": "filament/Generic PAHT-CF @K2 Plus-all.json" - }, - { - "name": "Generic PAHT-CF @K2 Pro-all", - "sub_path": "filament/Generic PAHT-CF @K2 Pro-all.json" - }, - { - "name": "Generic PAHT-CF @K2-all", - "sub_path": "filament/Generic PAHT-CF @K2-all.json" - }, - { - "name": "Generic PC @K1 Max_CFS-C-all", - "sub_path": "filament/Generic PC @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic PC @K1C-all", - "sub_path": "filament/Generic PC @K1C-all.json" - }, - { - "name": "Generic PC @K1C_CFS-C-all", - "sub_path": "filament/Generic PC @K1C_CFS-C-all.json" - }, - { - "name": "Generic PC @K1_CFS-C-all", - "sub_path": "filament/Generic PC @K1_CFS-C-all.json" - }, - { - "name": "Generic PC @K2 Plus-all", - "sub_path": "filament/Generic PC @K2 Plus-all.json" - }, - { - "name": "Generic PC @K2 Pro-all", - "sub_path": "filament/Generic PC @K2 Pro-all.json" - }, - { - "name": "Generic PCTG @K2 Plus-all", - "sub_path": "filament/Generic PCTG @K2 Plus-all.json" - }, - { - "name": "Generic PET @K1 Max_CFS-C-all", - "sub_path": "filament/Generic PET @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic PET @K1C-all", - "sub_path": "filament/Generic PET @K1C-all.json" - }, - { - "name": "Generic PET @K1C_CFS-C-all", - "sub_path": "filament/Generic PET @K1C_CFS-C-all.json" - }, - { - "name": "Generic PET @K1_CFS-C-all", - "sub_path": "filament/Generic PET @K1_CFS-C-all.json" - }, - { - "name": "Generic PET @K2 Plus-all", - "sub_path": "filament/Generic PET @K2 Plus-all.json" - }, - { - "name": "Generic PET @K2 Pro-all", - "sub_path": "filament/Generic PET @K2 Pro-all.json" - }, - { - "name": "Generic PET @K2-all", - "sub_path": "filament/Generic PET @K2-all.json" - }, - { - "name": "Generic PET-CF @K1 Max_CFS-C-all", - "sub_path": "filament/Generic PET-CF @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic PET-CF @K1C-all", - "sub_path": "filament/Generic PET-CF @K1C-all.json" - }, - { - "name": "Generic PET-CF @K1C_CFS-C-all", - "sub_path": "filament/Generic PET-CF @K1C_CFS-C-all.json" - }, - { - "name": "Generic PET-CF @K1_CFS-C-all", - "sub_path": "filament/Generic PET-CF @K1_CFS-C-all.json" - }, - { - "name": "Generic PET-CF @K2 Plus-all", - "sub_path": "filament/Generic PET-CF @K2 Plus-all.json" - }, - { - "name": "Generic PET-CF @K2 Pro-all", - "sub_path": "filament/Generic PET-CF @K2 Pro-all.json" - }, - { - "name": "Generic PETG @Ender-3 V4-all", - "sub_path": "filament/Generic PETG @Ender-3 V4-all.json" - }, - { - "name": "Generic PETG @Hi-all", - "sub_path": "filament/Generic PETG @Hi-all.json" - }, - { - "name": "Generic PETG @K1 Max_CFS-C-all", - "sub_path": "filament/Generic PETG @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic PETG @K1 SE-all", - "sub_path": "filament/Generic PETG @K1 SE-all.json" - }, - { - "name": "Generic PETG @K1 SE_CFS-C-all", - "sub_path": "filament/Generic PETG @K1 SE_CFS-C-all.json" - }, - { - "name": "Generic PETG @K1C-all", - "sub_path": "filament/Generic PETG @K1C-all.json" - }, - { - "name": "Generic PETG @K1C_CFS-C-all", - "sub_path": "filament/Generic PETG @K1C_CFS-C-all.json" - }, - { - "name": "Generic PETG @K1_CFS-C-all", - "sub_path": "filament/Generic PETG @K1_CFS-C-all.json" - }, - { - "name": "Generic PETG @K2 Plus-all", - "sub_path": "filament/Generic PETG @K2 Plus-all.json" - }, - { - "name": "Generic PETG @K2 Pro-all", - "sub_path": "filament/Generic PETG @K2 Pro-all.json" - }, - { - "name": "Generic PETG @K2 SE-all", - "sub_path": "filament/Generic PETG @K2 SE-all.json" - }, - { - "name": "Generic PETG @K2-all", - "sub_path": "filament/Generic PETG @K2-all.json" - }, - { - "name": "Generic PETG @SPARKX i7-all", - "sub_path": "filament/Generic PETG @SPARKX i7-all.json" - }, - { - "name": "Generic PETG-CF @K1 Max_CFS-C-all", - "sub_path": "filament/Generic PETG-CF @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic PETG-CF @K1C-all", - "sub_path": "filament/Generic PETG-CF @K1C-all.json" - }, - { - "name": "Generic PETG-CF @K1C_CFS-C-all", - "sub_path": "filament/Generic PETG-CF @K1C_CFS-C-all.json" - }, - { - "name": "Generic PETG-CF @K1_CFS-C-all", - "sub_path": "filament/Generic PETG-CF @K1_CFS-C-all.json" - }, - { - "name": "Generic PETG-CF @K2 Plus-all", - "sub_path": "filament/Generic PETG-CF @K2 Plus-all.json" - }, - { - "name": "Generic PETG-CF @K2 Pro-all", - "sub_path": "filament/Generic PETG-CF @K2 Pro-all.json" - }, - { - "name": "Generic PETG-CF @K2-all", - "sub_path": "filament/Generic PETG-CF @K2-all.json" - }, - { - "name": "Generic PETG-CF @SPARKX i7-all", - "sub_path": "filament/Generic PETG-CF @SPARKX i7-all.json" - }, - { - "name": "Generic PETG-GF @K2 Plus-all", - "sub_path": "filament/Generic PETG-GF @K2 Plus-all.json" - }, - { - "name": "Generic PETG-GF @K2 Pro-all", - "sub_path": "filament/Generic PETG-GF @K2 Pro-all.json" - }, - { - "name": "Generic PETG-GF @K2-all", - "sub_path": "filament/Generic PETG-GF @K2-all.json" + "name": "Generic PLA @Creality", + "sub_path": "filament/Generic PLA @Creality.json" }, { "name": "Generic PLA @Ender-3 V4-all", @@ -2872,6 +3048,14 @@ "name": "Generic PLA @SPARKX i7-all", "sub_path": "filament/Generic PLA @SPARKX i7-all.json" }, + { + "name": "Generic PLA HF @Creality", + "sub_path": "filament/Generic PLA HF @Creality.json" + }, + { + "name": "Generic PLA-CF @Creality", + "sub_path": "filament/Generic PLA-CF @Creality.json" + }, { "name": "Generic PLA-CF @Ender-3 V4-all", "sub_path": "filament/Generic PLA-CF @Ender-3 V4-all.json" @@ -2973,173 +3157,13 @@ "sub_path": "filament/Generic PLA-Silk @SPARKX i7-all.json" }, { - "name": "Generic PP @K1 Max_CFS-C-all", - "sub_path": "filament/Generic PP @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic PP @K1C-all", - "sub_path": "filament/Generic PP @K1C-all.json" - }, - { - "name": "Generic PP @K1C_CFS-C-all", - "sub_path": "filament/Generic PP @K1C_CFS-C-all.json" - }, - { - "name": "Generic PP @K1_CFS-C-all", - "sub_path": "filament/Generic PP @K1_CFS-C-all.json" - }, - { - "name": "Generic PP @K2 Plus-all", - "sub_path": "filament/Generic PP @K2 Plus-all.json" - }, - { - "name": "Generic PP @K2 Pro-all", - "sub_path": "filament/Generic PP @K2 Pro-all.json" - }, - { - "name": "Generic PP @K2-all", - "sub_path": "filament/Generic PP @K2-all.json" - }, - { - "name": "Generic PP-CF @K2 Plus-all", - "sub_path": "filament/Generic PP-CF @K2 Plus-all.json" - }, - { - "name": "Generic PPS @K1 Max_CFS-C-all", - "sub_path": "filament/Generic PPS @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic PPS @K1C-all", - "sub_path": "filament/Generic PPS @K1C-all.json" - }, - { - "name": "Generic PPS @K1C_CFS-C-all", - "sub_path": "filament/Generic PPS @K1C_CFS-C-all.json" - }, - { - "name": "Generic PPS @K1_CFS-C-all", - "sub_path": "filament/Generic PPS @K1_CFS-C-all.json" - }, - { - "name": "Generic PPS @K2 Plus-all", - "sub_path": "filament/Generic PPS @K2 Plus-all.json" - }, - { - "name": "Generic PPS-CF @K1 Max_CFS-C-all", - "sub_path": "filament/Generic PPS-CF @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic PPS-CF @K1C-all", - "sub_path": "filament/Generic PPS-CF @K1C-all.json" - }, - { - "name": "Generic PPS-CF @K1C_CFS-C-all", - "sub_path": "filament/Generic PPS-CF @K1C_CFS-C-all.json" - }, - { - "name": "Generic PPS-CF @K1_CFS-C-all", - "sub_path": "filament/Generic PPS-CF @K1_CFS-C-all.json" - }, - { - "name": "Generic PPS-CF @K2 Plus-all", - "sub_path": "filament/Generic PPS-CF @K2 Plus-all.json" - }, - { - "name": "Generic PVA @Hi-all", - "sub_path": "filament/Generic PVA @Hi-all.json" - }, - { - "name": "Generic PVA @K1 Max_CFS-C-all", - "sub_path": "filament/Generic PVA @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic PVA @K1C-all", - "sub_path": "filament/Generic PVA @K1C-all.json" - }, - { - "name": "Generic PVA @K1C_CFS-C-all", - "sub_path": "filament/Generic PVA @K1C_CFS-C-all.json" - }, - { - "name": "Generic PVA @K1_CFS-C-all", - "sub_path": "filament/Generic PVA @K1_CFS-C-all.json" - }, - { - "name": "Generic PVA @K2 Plus-all", - "sub_path": "filament/Generic PVA @K2 Plus-all.json" - }, - { - "name": "Generic PVA @K2 Pro-all", - "sub_path": "filament/Generic PVA @K2 Pro-all.json" - }, - { - "name": "Generic PVA @K2-all", - "sub_path": "filament/Generic PVA @K2-all.json" - }, - { - "name": "Generic Support for PA @K2 Plus-all", - "sub_path": "filament/Generic Support for PA @K2 Plus-all.json" + "name": "Generic Speed PLA @Creality HF", + "sub_path": "filament/Generic Speed PLA @Creality HF.json" }, { "name": "Generic Support for PLA @K2 Plus-all", "sub_path": "filament/Generic Support for PLA @K2 Plus-all.json" }, - { - "name": "Generic TPU 64D @K2 Plus-all", - "sub_path": "filament/Generic TPU 64D @K2 Plus-all.json" - }, - { - "name": "Generic TPU 64D @SPARKX i7-all", - "sub_path": "filament/Generic TPU 64D @SPARKX i7-all.json" - }, - { - "name": "Generic TPU @Ender-3 V4-all", - "sub_path": "filament/Generic TPU @Ender-3 V4-all.json" - }, - { - "name": "Generic TPU @K1 Max_CFS-C-all", - "sub_path": "filament/Generic TPU @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic TPU @K1 SE-all", - "sub_path": "filament/Generic TPU @K1 SE-all.json" - }, - { - "name": "Generic TPU @K1 SE_CFS-C-all", - "sub_path": "filament/Generic TPU @K1 SE_CFS-C-all.json" - }, - { - "name": "Generic TPU @K1C-all", - "sub_path": "filament/Generic TPU @K1C-all.json" - }, - { - "name": "Generic TPU @K1C_CFS-C-all", - "sub_path": "filament/Generic TPU @K1C_CFS-C-all.json" - }, - { - "name": "Generic TPU @K1_CFS-C-all", - "sub_path": "filament/Generic TPU @K1_CFS-C-all.json" - }, - { - "name": "Generic TPU @K2 Plus-all", - "sub_path": "filament/Generic TPU @K2 Plus-all.json" - }, - { - "name": "Generic TPU @K2 Pro-all", - "sub_path": "filament/Generic TPU @K2 Pro-all.json" - }, - { - "name": "Generic TPU @K2 SE-all", - "sub_path": "filament/Generic TPU @K2 SE-all.json" - }, - { - "name": "Generic TPU @K2-all", - "sub_path": "filament/Generic TPU @K2-all.json" - }, - { - "name": "Generic TPU @SPARKX i7-all", - "sub_path": "filament/Generic TPU @SPARKX i7-all.json" - }, { "name": "HP Ultra PLA @K1 Max_CFS-C-all", "sub_path": "filament/HP Ultra PLA @K1 Max_CFS-C-all.json" @@ -3160,138 +3184,6 @@ "name": "HP Ultra PLA @K2 Plus-all", "sub_path": "filament/HP Ultra PLA @K2 Plus-all.json" }, - { - "name": "HP-ASA @K1 Max_CFS-C-all", - "sub_path": "filament/HP-ASA @K1 Max_CFS-C-all.json" - }, - { - "name": "HP-ASA @K1C-all", - "sub_path": "filament/HP-ASA @K1C-all.json" - }, - { - "name": "HP-ASA @K1C_CFS-C-all", - "sub_path": "filament/HP-ASA @K1C_CFS-C-all.json" - }, - { - "name": "HP-ASA @K1_CFS-C-all", - "sub_path": "filament/HP-ASA @K1_CFS-C-all.json" - }, - { - "name": "HP-ASA @K2 Plus-all", - "sub_path": "filament/HP-ASA @K2 Plus-all.json" - }, - { - "name": "HP-ASA @K2 Pro-all", - "sub_path": "filament/HP-ASA @K2 Pro-all.json" - }, - { - "name": "HP-ASA @K2 SE-all", - "sub_path": "filament/HP-ASA @K2 SE-all.json" - }, - { - "name": "HP-ASA @K2-all", - "sub_path": "filament/HP-ASA @K2-all.json" - }, - { - "name": "HP-TPU @Ender-3 V4-all", - "sub_path": "filament/HP-TPU @Ender-3 V4-all.json" - }, - { - "name": "HP-TPU @Hi-all", - "sub_path": "filament/HP-TPU @Hi-all.json" - }, - { - "name": "HP-TPU @K1 Max_CFS-C-all", - "sub_path": "filament/HP-TPU @K1 Max_CFS-C-all.json" - }, - { - "name": "HP-TPU @K1 SE-all", - "sub_path": "filament/HP-TPU @K1 SE-all.json" - }, - { - "name": "HP-TPU @K1 SE_CFS-C-all", - "sub_path": "filament/HP-TPU @K1 SE_CFS-C-all.json" - }, - { - "name": "HP-TPU @K1C-all", - "sub_path": "filament/HP-TPU @K1C-all.json" - }, - { - "name": "HP-TPU @K1C_CFS-C-all", - "sub_path": "filament/HP-TPU @K1C_CFS-C-all.json" - }, - { - "name": "HP-TPU @K1_CFS-C-all", - "sub_path": "filament/HP-TPU @K1_CFS-C-all.json" - }, - { - "name": "HP-TPU @K2 Plus-all", - "sub_path": "filament/HP-TPU @K2 Plus-all.json" - }, - { - "name": "HP-TPU @K2 Pro-all", - "sub_path": "filament/HP-TPU @K2 Pro-all.json" - }, - { - "name": "HP-TPU @K2 SE-all", - "sub_path": "filament/HP-TPU @K2 SE-all.json" - }, - { - "name": "HP-TPU @K2-all", - "sub_path": "filament/HP-TPU @K2-all.json" - }, - { - "name": "HP-TPU @SPARKX i7-all", - "sub_path": "filament/HP-TPU @SPARKX i7-all.json" - }, - { - "name": "Hyper ABS @Ender-3 V4-all", - "sub_path": "filament/Hyper ABS @Ender-3 V4-all.json" - }, - { - "name": "Hyper ABS @Hi-all", - "sub_path": "filament/Hyper ABS @Hi-all.json" - }, - { - "name": "Hyper ABS @K1 Max_CFS-C-all", - "sub_path": "filament/Hyper ABS @K1 Max_CFS-C-all.json" - }, - { - "name": "Hyper ABS @K1 SE-all", - "sub_path": "filament/Hyper ABS @K1 SE-all.json" - }, - { - "name": "Hyper ABS @K1 SE_CFS-C-all", - "sub_path": "filament/Hyper ABS @K1 SE_CFS-C-all.json" - }, - { - "name": "Hyper ABS @K1C-all", - "sub_path": "filament/Hyper ABS @K1C-all.json" - }, - { - "name": "Hyper ABS @K1C_CFS-C-all", - "sub_path": "filament/Hyper ABS @K1C_CFS-C-all.json" - }, - { - "name": "Hyper ABS @K1_CFS-C-all", - "sub_path": "filament/Hyper ABS @K1_CFS-C-all.json" - }, - { - "name": "Hyper ABS @K2 Plus-all", - "sub_path": "filament/Hyper ABS @K2 Plus-all.json" - }, - { - "name": "Hyper ABS @K2 Pro-all", - "sub_path": "filament/Hyper ABS @K2 Pro-all.json" - }, - { - "name": "Hyper ABS @K2 SE-all", - "sub_path": "filament/Hyper ABS @K2 SE-all.json" - }, - { - "name": "Hyper ABS @K2-all", - "sub_path": "filament/Hyper ABS @K2-all.json" - }, { "name": "Hyper L-W PLA @Hi-all", "sub_path": "filament/Hyper L-W PLA @Hi-all.json" @@ -3396,158 +3288,6 @@ "name": "Hyper Marble @SPARKX i7-all", "sub_path": "filament/Hyper Marble @SPARKX i7-all.json" }, - { - "name": "Hyper PA6-CF @K2 Plus-all", - "sub_path": "filament/Hyper PA6-CF @K2 Plus-all.json" - }, - { - "name": "Hyper PA6-CF @K2 Pro-all", - "sub_path": "filament/Hyper PA6-CF @K2 Pro-all.json" - }, - { - "name": "Hyper PA612-CF @K2 Plus-all", - "sub_path": "filament/Hyper PA612-CF @K2 Plus-all.json" - }, - { - "name": "Hyper PA612-CF @K2 Pro-all", - "sub_path": "filament/Hyper PA612-CF @K2 Pro-all.json" - }, - { - "name": "Hyper PAHT-CF @K1 Max_CFS-C-all", - "sub_path": "filament/Hyper PAHT-CF @K1 Max_CFS-C-all.json" - }, - { - "name": "Hyper PAHT-CF @K1C-all", - "sub_path": "filament/Hyper PAHT-CF @K1C-all.json" - }, - { - "name": "Hyper PAHT-CF @K1C_CFS-C-all", - "sub_path": "filament/Hyper PAHT-CF @K1C_CFS-C-all.json" - }, - { - "name": "Hyper PAHT-CF @K1_CFS-C-all", - "sub_path": "filament/Hyper PAHT-CF @K1_CFS-C-all.json" - }, - { - "name": "Hyper PAHT-CF @K2 Plus-all", - "sub_path": "filament/Hyper PAHT-CF @K2 Plus-all.json" - }, - { - "name": "Hyper PAHT-CF @K2 Pro-all", - "sub_path": "filament/Hyper PAHT-CF @K2 Pro-all.json" - }, - { - "name": "Hyper PAHT-CF @K2-all", - "sub_path": "filament/Hyper PAHT-CF @K2-all.json" - }, - { - "name": "Hyper PC @K2 Plus-all", - "sub_path": "filament/Hyper PC @K2 Plus-all.json" - }, - { - "name": "Hyper PC @K2 Pro-all", - "sub_path": "filament/Hyper PC @K2 Pro-all.json" - }, - { - "name": "Hyper PETG @Ender-3 V4-all", - "sub_path": "filament/Hyper PETG @Ender-3 V4-all.json" - }, - { - "name": "Hyper PETG @Hi-all", - "sub_path": "filament/Hyper PETG @Hi-all.json" - }, - { - "name": "Hyper PETG @K1 Max_CFS-C-all", - "sub_path": "filament/Hyper PETG @K1 Max_CFS-C-all.json" - }, - { - "name": "Hyper PETG @K1 SE-all", - "sub_path": "filament/Hyper PETG @K1 SE-all.json" - }, - { - "name": "Hyper PETG @K1 SE_CFS-C-all", - "sub_path": "filament/Hyper PETG @K1 SE_CFS-C-all.json" - }, - { - "name": "Hyper PETG @K1C-all", - "sub_path": "filament/Hyper PETG @K1C-all.json" - }, - { - "name": "Hyper PETG @K1C_CFS-C-all", - "sub_path": "filament/Hyper PETG @K1C_CFS-C-all.json" - }, - { - "name": "Hyper PETG @K1_CFS-C-all", - "sub_path": "filament/Hyper PETG @K1_CFS-C-all.json" - }, - { - "name": "Hyper PETG @K2 Plus-all", - "sub_path": "filament/Hyper PETG @K2 Plus-all.json" - }, - { - "name": "Hyper PETG @K2 Pro-all", - "sub_path": "filament/Hyper PETG @K2 Pro-all.json" - }, - { - "name": "Hyper PETG @K2 SE-all", - "sub_path": "filament/Hyper PETG @K2 SE-all.json" - }, - { - "name": "Hyper PETG @K2-all", - "sub_path": "filament/Hyper PETG @K2-all.json" - }, - { - "name": "Hyper PETG @SPARKX i7-all", - "sub_path": "filament/Hyper PETG @SPARKX i7-all.json" - }, - { - "name": "Hyper PETG-CF @K1 Max_CFS-C-all", - "sub_path": "filament/Hyper PETG-CF @K1 Max_CFS-C-all.json" - }, - { - "name": "Hyper PETG-CF @K1C-all", - "sub_path": "filament/Hyper PETG-CF @K1C-all.json" - }, - { - "name": "Hyper PETG-CF @K1C_CFS-C-all", - "sub_path": "filament/Hyper PETG-CF @K1C_CFS-C-all.json" - }, - { - "name": "Hyper PETG-CF @K1_CFS-C-all", - "sub_path": "filament/Hyper PETG-CF @K1_CFS-C-all.json" - }, - { - "name": "Hyper PETG-CF @K2 Plus-all", - "sub_path": "filament/Hyper PETG-CF @K2 Plus-all.json" - }, - { - "name": "Hyper PETG-CF @K2 Pro-all", - "sub_path": "filament/Hyper PETG-CF @K2 Pro-all.json" - }, - { - "name": "Hyper PETG-CF @K2-all", - "sub_path": "filament/Hyper PETG-CF @K2-all.json" - }, - { - "name": "Hyper PETG-CF @SPARKX i7-all", - "sub_path": "filament/Hyper PETG-CF @SPARKX i7-all.json" - }, - { - "name": "Hyper PETG-GF @K1C-all", - "sub_path": "filament/Hyper PETG-GF @K1C-all.json" - }, - { - "name": "Hyper PETG-GF @K2 Plus-all", - "sub_path": "filament/Hyper PETG-GF @K2 Plus-all.json" - }, - { - "name": "Hyper PETG-GF @K2 Pro-all", - "sub_path": "filament/Hyper PETG-GF @K2 Pro-all.json" - }, - { - "name": "Hyper PETG-GF @K2-all", - "sub_path": "filament/Hyper PETG-GF @K2-all.json" - }, { "name": "Hyper PLA @Ender-3 V4-all", "sub_path": "filament/Hyper PLA @Ender-3 V4-all.json" @@ -3652,14 +3392,6 @@ "name": "Hyper PLA-CF @SPARKX i7-all", "sub_path": "filament/Hyper PLA-CF @SPARKX i7-all.json" }, - { - "name": "Hyper PPA-CF @K2 Plus-all", - "sub_path": "filament/Hyper PPA-CF @K2 Plus-all.json" - }, - { - "name": "Hyper PPA-CF @K2 Pro-all", - "sub_path": "filament/Hyper PPA-CF @K2 Pro-all.json" - }, { "name": "Hyper Stardust @Hi-all", "sub_path": "filament/Hyper Stardust @Hi-all.json" @@ -3716,30 +3448,6 @@ "name": "PolySonic PLA Pro @K2 Plus-all", "sub_path": "filament/PolySonic PLA Pro @K2 Plus-all.json" }, - { - "name": "Soleyin Basic PETG @Hi-all", - "sub_path": "filament/Soleyin Basic PETG @Hi-all.json" - }, - { - "name": "Soleyin Basic PETG @K1C-all", - "sub_path": "filament/Soleyin Basic PETG @K1C-all.json" - }, - { - "name": "Soleyin Basic PETG @K2 Plus-all", - "sub_path": "filament/Soleyin Basic PETG @K2 Plus-all.json" - }, - { - "name": "Soleyin Basic PETG @K2 Pro-all", - "sub_path": "filament/Soleyin Basic PETG @K2 Pro-all.json" - }, - { - "name": "Soleyin Basic PETG @K2-all", - "sub_path": "filament/Soleyin Basic PETG @K2-all.json" - }, - { - "name": "Soleyin Basic PETG @SPARKX i7-all", - "sub_path": "filament/Soleyin Basic PETG @SPARKX i7-all.json" - }, { "name": "Soleyin Ultra PLA @Ender-3 V4-all", "sub_path": "filament/Soleyin Ultra PLA @Ender-3 V4-all.json" @@ -3784,30 +3492,6 @@ "name": "Soleyin Ultra PLA @SPARKX i7-all", "sub_path": "filament/Soleyin Ultra PLA @SPARKX i7-all.json" }, - { - "name": "eSUN ABS+ @K2 Plus-all", - "sub_path": "filament/eSUN ABS+ @K2 Plus-all.json" - }, - { - "name": "eSUN ASA+ @K2 Plus-all", - "sub_path": "filament/eSUN ASA+ @K2 Plus-all.json" - }, - { - "name": "eSUN PET-Basic @K2 Plus-all", - "sub_path": "filament/eSUN PET-Basic @K2 Plus-all.json" - }, - { - "name": "eSUN PETG @K2 Plus-all", - "sub_path": "filament/eSUN PETG @K2 Plus-all.json" - }, - { - "name": "eSUN PETG+HS @K2 Plus-all", - "sub_path": "filament/eSUN PETG+HS @K2 Plus-all.json" - }, - { - "name": "eSUN PETG-Basic @K2 Plus-all", - "sub_path": "filament/eSUN PETG-Basic @K2 Plus-all.json" - }, { "name": "eSUN PLA+ @K2 Plus-all", "sub_path": "filament/eSUN PLA+ @K2 Plus-all.json" @@ -3835,6 +3519,322 @@ { "name": "eSUN PLA-Silk @K2 Plus-all", "sub_path": "filament/eSUN PLA-Silk @K2 Plus-all.json" + }, + { + "name": "CR-TPU @K1 Max_CFS-C-all", + "sub_path": "filament/CR-TPU @K1 Max_CFS-C-all.json" + }, + { + "name": "CR-TPU @K1C-all", + "sub_path": "filament/CR-TPU @K1C-all.json" + }, + { + "name": "CR-TPU @K1C_CFS-C-all", + "sub_path": "filament/CR-TPU @K1C_CFS-C-all.json" + }, + { + "name": "CR-TPU @K1_CFS-C-all", + "sub_path": "filament/CR-TPU @K1_CFS-C-all.json" + }, + { + "name": "CR-TPU @K2 Plus-all", + "sub_path": "filament/CR-TPU @K2 Plus-all.json" + }, + { + "name": "CR-TPU @K2 Pro-all", + "sub_path": "filament/CR-TPU @K2 Pro-all.json" + }, + { + "name": "CR-TPU @K2-all", + "sub_path": "filament/CR-TPU @K2-all.json" + }, + { + "name": "CR-TPU @SPARKX i7-all", + "sub_path": "filament/CR-TPU @SPARKX i7-all.json" + }, + { + "name": "Generic TPU 64D @K2 Plus-all", + "sub_path": "filament/Generic TPU 64D @K2 Plus-all.json" + }, + { + "name": "Generic TPU 64D @SPARKX i7-all", + "sub_path": "filament/Generic TPU 64D @SPARKX i7-all.json" + }, + { + "name": "Generic TPU @Creality", + "sub_path": "filament/Generic TPU @Creality.json" + }, + { + "name": "Generic TPU @Ender-3 V4-all", + "sub_path": "filament/Generic TPU @Ender-3 V4-all.json" + }, + { + "name": "Generic TPU @K1 Max_CFS-C-all", + "sub_path": "filament/Generic TPU @K1 Max_CFS-C-all.json" + }, + { + "name": "Generic TPU @K1 SE-all", + "sub_path": "filament/Generic TPU @K1 SE-all.json" + }, + { + "name": "Generic TPU @K1 SE_CFS-C-all", + "sub_path": "filament/Generic TPU @K1 SE_CFS-C-all.json" + }, + { + "name": "Generic TPU @K1C-all", + "sub_path": "filament/Generic TPU @K1C-all.json" + }, + { + "name": "Generic TPU @K1C_CFS-C-all", + "sub_path": "filament/Generic TPU @K1C_CFS-C-all.json" + }, + { + "name": "Generic TPU @K1_CFS-C-all", + "sub_path": "filament/Generic TPU @K1_CFS-C-all.json" + }, + { + "name": "Generic TPU @K2 Plus-all", + "sub_path": "filament/Generic TPU @K2 Plus-all.json" + }, + { + "name": "Generic TPU @K2 Pro-all", + "sub_path": "filament/Generic TPU @K2 Pro-all.json" + }, + { + "name": "Generic TPU @K2 SE-all", + "sub_path": "filament/Generic TPU @K2 SE-all.json" + }, + { + "name": "Generic TPU @K2-all", + "sub_path": "filament/Generic TPU @K2-all.json" + }, + { + "name": "Generic TPU @SPARKX i7-all", + "sub_path": "filament/Generic TPU @SPARKX i7-all.json" + }, + { + "name": "HP-TPU @Ender-3 V4-all", + "sub_path": "filament/HP-TPU @Ender-3 V4-all.json" + }, + { + "name": "HP-TPU @Hi-all", + "sub_path": "filament/HP-TPU @Hi-all.json" + }, + { + "name": "HP-TPU @K1 Max_CFS-C-all", + "sub_path": "filament/HP-TPU @K1 Max_CFS-C-all.json" + }, + { + "name": "HP-TPU @K1 SE-all", + "sub_path": "filament/HP-TPU @K1 SE-all.json" + }, + { + "name": "HP-TPU @K1 SE_CFS-C-all", + "sub_path": "filament/HP-TPU @K1 SE_CFS-C-all.json" + }, + { + "name": "HP-TPU @K1C-all", + "sub_path": "filament/HP-TPU @K1C-all.json" + }, + { + "name": "HP-TPU @K1C_CFS-C-all", + "sub_path": "filament/HP-TPU @K1C_CFS-C-all.json" + }, + { + "name": "HP-TPU @K1_CFS-C-all", + "sub_path": "filament/HP-TPU @K1_CFS-C-all.json" + }, + { + "name": "HP-TPU @K2 Plus-all", + "sub_path": "filament/HP-TPU @K2 Plus-all.json" + }, + { + "name": "HP-TPU @K2 Pro-all", + "sub_path": "filament/HP-TPU @K2 Pro-all.json" + }, + { + "name": "HP-TPU @K2 SE-all", + "sub_path": "filament/HP-TPU @K2 SE-all.json" + }, + { + "name": "HP-TPU @K2-all", + "sub_path": "filament/HP-TPU @K2-all.json" + }, + { + "name": "HP-TPU @SPARKX i7-all", + "sub_path": "filament/HP-TPU @SPARKX i7-all.json" + }, + { + "name": "Generic ABS @Creality Ender-3V3-all", + "sub_path": "filament/Generic ABS @Creality Ender-3V3-all.json" + }, + { + "name": "Generic ABS @Creality Hi-all", + "sub_path": "filament/Generic ABS @Creality Hi-all.json" + }, + { + "name": "Generic ABS @Creality K1-all", + "sub_path": "filament/Generic ABS @Creality K1-all.json" + }, + { + "name": "Generic ABS @Creality K2-all", + "sub_path": "filament/Generic ABS @Creality K2-all.json" + }, + { + "name": "Generic ASA @Creality Ender-3V3-all", + "sub_path": "filament/Generic ASA @Creality Ender-3V3-all.json" + }, + { + "name": "Generic ASA @Creality Hi-all", + "sub_path": "filament/Generic ASA @Creality Hi-all.json" + }, + { + "name": "Generic ASA @Creality K1-all", + "sub_path": "filament/Generic ASA @Creality K1-all.json" + }, + { + "name": "Generic ASA @Creality K2-all", + "sub_path": "filament/Generic ASA @Creality K2-all.json" + }, + { + "name": "Generic PA-CF @Creality Ender-3V3-all", + "sub_path": "filament/Generic PA-CF @Creality Ender-3V3-all.json" + }, + { + "name": "Generic PA-CF @Creality K1-all", + "sub_path": "filament/Generic PA-CF @Creality K1-all.json" + }, + { + "name": "Generic PA-CF @Creality K2-all", + "sub_path": "filament/Generic PA-CF @Creality K2-all.json" + }, + { + "name": "Generic PC @Creality K1-all", + "sub_path": "filament/Generic PC @Creality K1-all.json" + }, + { + "name": "Generic PETG @Creality Ender-3V3-all", + "sub_path": "filament/Generic PETG @Creality Ender-3V3-all.json" + }, + { + "name": "Generic PETG @Creality Hi-all", + "sub_path": "filament/Generic PETG @Creality Hi-all.json" + }, + { + "name": "Generic PETG @Creality K1-all", + "sub_path": "filament/Generic PETG @Creality K1-all.json" + }, + { + "name": "Generic PETG @Creality K2-all", + "sub_path": "filament/Generic PETG @Creality K2-all.json" + }, + { + "name": "Generic PLA @Creality Ender-3V3-all", + "sub_path": "filament/Generic PLA @Creality Ender-3V3-all.json" + }, + { + "name": "Generic PLA @Creality Hi-all", + "sub_path": "filament/Generic PLA @Creality Hi-all.json" + }, + { + "name": "Generic PLA @Creality K1-all", + "sub_path": "filament/Generic PLA @Creality K1-all.json" + }, + { + "name": "Generic PLA @Creality K2-all", + "sub_path": "filament/Generic PLA @Creality K2-all.json" + }, + { + "name": "Generic PLA-CF @Creality Hi-all", + "sub_path": "filament/Generic PLA-CF @Creality Hi-all.json" + }, + { + "name": "Generic PLA-CF @Creality K1-all", + "sub_path": "filament/Generic PLA-CF @Creality K1-all.json" + }, + { + "name": "Generic PLA-CF @Creality K2-all", + "sub_path": "filament/Generic PLA-CF @Creality K2-all.json" + }, + { + "name": "Generic TPU @Creality Ender-3V3-all", + "sub_path": "filament/Generic TPU @Creality Ender-3V3-all.json" + }, + { + "name": "Generic TPU @Creality Hi-all", + "sub_path": "filament/Generic TPU @Creality Hi-all.json" + }, + { + "name": "Generic TPU @Creality K1-all", + "sub_path": "filament/Generic TPU @Creality K1-all.json" + }, + { + "name": "Generic TPU @Creality K2-all", + "sub_path": "filament/Generic TPU @Creality K2-all.json" + }, + { + "name": "Generic ASA-CF @Creality Hi-all", + "sub_path": "filament/Generic ASA-CF @Creality Hi-all.json" + }, + { + "name": "Generic PETG-CF @Creality Hi-all", + "sub_path": "filament/Generic PETG-CF @Creality Hi-all.json" + }, + { + "name": "Generic PLA High Speed @Creality Ender-3V3-all", + "sub_path": "filament/Generic PLA High Speed @Creality Ender-3V3-all.json" + }, + { + "name": "Generic PLA Matte @Creality Ender-3V3-all", + "sub_path": "filament/Generic PLA Matte @Creality Ender-3V3-all.json" + }, + { + "name": "Generic PLA Silk @Creality Ender-3V3-all", + "sub_path": "filament/Generic PLA Silk @Creality Ender-3V3-all.json" + }, + { + "name": "Generic PLA High Speed @Creality Hi-all", + "sub_path": "filament/Generic PLA High Speed @Creality Hi-all.json" + }, + { + "name": "Generic PLA Matte @Creality Hi-all", + "sub_path": "filament/Generic PLA Matte @Creality Hi-all.json" + }, + { + "name": "Generic PLA Silk @Creality Hi-all", + "sub_path": "filament/Generic PLA Silk @Creality Hi-all.json" + }, + { + "name": "Generic PLA Wood @Creality Hi-all", + "sub_path": "filament/Generic PLA Wood @Creality Hi-all.json" + }, + { + "name": "Generic PLA High Speed @Creality K1-all", + "sub_path": "filament/Generic PLA High Speed @Creality K1-all.json" + }, + { + "name": "Generic PLA Matte @Creality K1-all", + "sub_path": "filament/Generic PLA Matte @Creality K1-all.json" + }, + { + "name": "Generic PLA Silk @Creality K1-all", + "sub_path": "filament/Generic PLA Silk @Creality K1-all.json" + }, + { + "name": "Generic PLA High Speed @Creality K2-all", + "sub_path": "filament/Generic PLA High Speed @Creality K2-all.json" + }, + { + "name": "Generic PLA Matte @Creality K2-all", + "sub_path": "filament/Generic PLA Matte @Creality K2-all.json" + }, + { + "name": "Generic PLA Silk @Creality K2-all", + "sub_path": "filament/Generic PLA Silk @Creality K2-all.json" + }, + { + "name": "fdm_filament_pva", + "sub_path": "filament/fdm_filament_pva.json" } ], "machine_list": [ @@ -4122,10 +4122,6 @@ "name": "Creality K1 (0.8 nozzle)", "sub_path": "machine/Creality K1 (0.8 nozzle).json" }, - { - "name": "Creality K1_CFS-C 0.4 nozzle", - "sub_path": "machine/Creality K1_CFS-C 0.4 nozzle.json" - }, { "name": "Creality K1 Max (0.4 nozzle)", "sub_path": "machine/Creality K1 Max (0.4 nozzle).json" @@ -4174,6 +4170,10 @@ "name": "Creality K1C_CFS-C 0.4 nozzle", "sub_path": "machine/Creality K1C_CFS-C 0.4 nozzle.json" }, + { + "name": "Creality K1_CFS-C 0.4 nozzle", + "sub_path": "machine/Creality K1_CFS-C 0.4 nozzle.json" + }, { "name": "Creality K2 0.2 nozzle", "sub_path": "machine/Creality K2 0.2 nozzle.json" @@ -4226,10 +4226,6 @@ "name": "Creality K2 SE 0.4 nozzle", "sub_path": "machine/Creality K2 SE 0.4 nozzle.json" }, - { - "name": "Creality Sermoon V1 0.4 nozzle", - "sub_path": "machine/Creality Sermoon V1 0.4 nozzle.json" - }, { "name": "Creality SPARKX i7 0.2 nozzle", "sub_path": "machine/Creality SPARKX i7 0.2 nozzle.json" @@ -4245,6 +4241,10 @@ { "name": "Creality SPARKX i7 0.8 nozzle", "sub_path": "machine/Creality SPARKX i7 0.8 nozzle.json" + }, + { + "name": "Creality Sermoon V1 0.4 nozzle", + "sub_path": "machine/Creality Sermoon V1 0.4 nozzle.json" } ] -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/filament/CR-ABS @Ender-5 Max-all.json b/resources/profiles/Creality/filament/CR-ABS @Ender-5 Max-all.json deleted file mode 100644 index 53d18bfeda..0000000000 --- a/resources/profiles/Creality/filament/CR-ABS @Ender-5 Max-all.json +++ /dev/null @@ -1,160 +0,0 @@ -{ - "type": "filament", - "name": "CR-ABS @Ender-5 Max-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "iCeI2obXsgQdrmmd", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "90" - ], - "cool_plate_temp_initial_layer": [ - "90" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_max_speed": [ - "30" - ], - "filament_cost": [ - "15" - ], - "filament_density": [ - "1.08" - ], - "filament_deretraction_speed": [ - "35" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "35" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "overhang_fan_speed": [ - "60" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; Filament gcode\n" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "90", - "customized_plate_temp_initial_layer": "90", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "90", - "epoxy_resin_plate_temp_initial_layer": "90", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "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_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,230],[5.0,250],[10.0,260]]", - "pressure_advance": "0.03", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-Nylon @Ender-5 Max-all.json b/resources/profiles/Creality/filament/CR-Nylon @Ender-5 Max-all.json deleted file mode 100644 index e4e5cad0e8..0000000000 --- a/resources/profiles/Creality/filament/CR-Nylon @Ender-5 Max-all.json +++ /dev/null @@ -1,185 +0,0 @@ -{ - "type": "filament", - "name": "CR-Nylon @Ender-5 Max-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "HHnHotIUIBzTdckU", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "100" - ], - "cool_plate_temp": [ - "45" - ], - "cool_plate_temp_initial_layer": [ - "45" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "filament_cost": [ - "50" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.9" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.5" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "0.2" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "45" - ], - "hot_plate_temp_initial_layer": [ - "45" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "nozzle_temperature_range_low": [ - "250" - ], - "overhang_fan_speed": [ - "50" - ], - "overhang_fan_threshold": [ - "50%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "5" - ], - "textured_plate_temp": [ - "45" - ], - "textured_plate_temp_initial_layer": [ - "45" - ], - "filament_start_gcode": [ - "; Filament gcode\n" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "45", - "epoxy_resin_plate_temp_initial_layer": "45", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "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_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.042", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PETG @Ender-5 Max-all.json b/resources/profiles/Creality/filament/CR-PETG @Ender-5 Max-all.json deleted file mode 100644 index 0514484af8..0000000000 --- a/resources/profiles/Creality/filament/CR-PETG @Ender-5 Max-all.json +++ /dev/null @@ -1,163 +0,0 @@ -{ - "type": "filament", - "name": "CR-PETG @Ender-5 Max-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "jMfevCqhjSPahBHJ", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "40" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "14" - ], - "filament_density": [ - "1.23" - ], - "filament_deretraction_speed": [ - "30" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_type": [ - "PETG" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe_distance": [ - "2" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "80", - "customized_plate_temp_initial_layer": "80", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "80", - "epoxy_resin_plate_temp_initial_layer": "80", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "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_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,220],[5.0,240],[10.0,250]]", - "pressure_advance": "0.05", - "filament_id": "06101", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle", - "Creality Ender-5 Max 0.6 nozzle", - "Creality Ender-5 Max 0.8 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA @Ender-5 Max-all.json b/resources/profiles/Creality/filament/CR-PLA @Ender-5 Max-all.json deleted file mode 100644 index 68fa08da55..0000000000 --- a/resources/profiles/Creality/filament/CR-PLA @Ender-5 Max-all.json +++ /dev/null @@ -1,157 +0,0 @@ -{ - "type": "filament", - "name": "CR-PLA @Ender-5 Max-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "sU0HCPjQoOLHPmPc", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "45" - ], - "cool_plate_temp_initial_layer": [ - "45" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_deretraction_speed": [ - "35" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "35" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "45" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; Filament gcode\n" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "50", - "customized_plate_temp_initial_layer": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "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_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "1", - "material_flow_temp_graph": "[[0.5,190],[1.0,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-Silk @Ender-5 Max-all.json b/resources/profiles/Creality/filament/CR-Silk @Ender-5 Max-all.json deleted file mode 100644 index 41047d385c..0000000000 --- a/resources/profiles/Creality/filament/CR-Silk @Ender-5 Max-all.json +++ /dev/null @@ -1,157 +0,0 @@ -{ - "type": "filament", - "name": "CR-Silk @Ender-5 Max-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "vFgKdtdiuqqrL9rk", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "45" - ], - "cool_plate_temp_initial_layer": [ - "45" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "22" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "35" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "35" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "55", - "customized_plate_temp_initial_layer": "55", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "55", - "epoxy_resin_plate_temp_initial_layer": "55", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "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_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,190],[1.2,220]]", - "pressure_advance": "0.048", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic ABS @Ender-5 Max-all.json b/resources/profiles/Creality/filament/Generic ABS @Ender-5 Max-all.json deleted file mode 100644 index ca7518e9b3..0000000000 --- a/resources/profiles/Creality/filament/Generic ABS @Ender-5 Max-all.json +++ /dev/null @@ -1,163 +0,0 @@ -{ - "type": "filament", - "name": "Generic ABS @Ender-5 Max-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "3BjyaE4hGrz7tqnk", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "90" - ], - "cool_plate_temp_initial_layer": [ - "90" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_max_speed": [ - "30" - ], - "filament_cost": [ - "15" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "35" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "35" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "overhang_fan_speed": [ - "60" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; Filament gcode\n" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "90", - "customized_plate_temp_initial_layer": "90", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "90", - "epoxy_resin_plate_temp_initial_layer": "90", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "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_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,230],[5.0,250],[10.0,260]]", - "pressure_advance": "0.034", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic ASA @Ender-5 Max-all.json b/resources/profiles/Creality/filament/Generic ASA @Ender-5 Max-all.json deleted file mode 100644 index 85251468b0..0000000000 --- a/resources/profiles/Creality/filament/Generic ASA @Ender-5 Max-all.json +++ /dev/null @@ -1,175 +0,0 @@ -{ - "type": "filament", - "name": "Generic ASA @Ender-5 Max-all", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "1cOFjktr0dBTbYS4", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "90" - ], - "cool_plate_temp_initial_layer": [ - "90" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "70" - ], - "fan_min_speed": [ - "20" - ], - "filament_cost": [ - "30" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "35" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "35" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "55", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "90", - "customized_plate_temp_initial_layer": "90", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "90", - "epoxy_resin_plate_temp_initial_layer": "90", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "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_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,240],[8.0,250],[12.0,260]]", - "pressure_advance": "0.03", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PETG @Ender-5 Max-all.json b/resources/profiles/Creality/filament/Generic PETG @Ender-5 Max-all.json deleted file mode 100644 index 229ac91f2b..0000000000 --- a/resources/profiles/Creality/filament/Generic PETG @Ender-5 Max-all.json +++ /dev/null @@ -1,163 +0,0 @@ -{ - "type": "filament", - "name": "Generic PETG @Ender-5 Max-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "yNgF407ERXuU7LHE", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "60" - ], - "fan_min_speed": [ - "20" - ], - "filament_cost": [ - "14" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "40" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retraction_length": [ - "0.4" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_type": [ - "PETG" - ], - "filament_wipe_distance": [ - "2" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "80", - "customized_plate_temp_initial_layer": "80", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "80", - "epoxy_resin_plate_temp_initial_layer": "80", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "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_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,230],[1.0,240]]", - "pressure_advance": "0.064", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA @Ender-5 Max-all.json b/resources/profiles/Creality/filament/Generic PLA @Ender-5 Max-all.json deleted file mode 100644 index 54783f5efc..0000000000 --- a/resources/profiles/Creality/filament/Generic PLA @Ender-5 Max-all.json +++ /dev/null @@ -1,161 +0,0 @@ -{ - "type": "filament", - "name": "Generic PLA @Ender-5 Max-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "ubfcxetXGj6agAoi", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "45" - ], - "cool_plate_temp_initial_layer": [ - "45" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_deretraction_speed": [ - "35" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "35" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature": [ - "210" - ], - "nozzle_temperature_initial_layer": [ - "210" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "55", - "customized_plate_temp_initial_layer": "55", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "55", - "epoxy_resin_plate_temp_initial_layer": "55", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "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_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,190],[1.0,210]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA-CF @Ender-5 Max-all.json b/resources/profiles/Creality/filament/Generic PLA-CF @Ender-5 Max-all.json deleted file mode 100644 index ed024bf161..0000000000 --- a/resources/profiles/Creality/filament/Generic PLA-CF @Ender-5 Max-all.json +++ /dev/null @@ -1,161 +0,0 @@ -{ - "type": "filament", - "name": "Generic PLA-CF @Ender-5 Max-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "AHrCSGRui6sRCmQx", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "45" - ], - "cool_plate_temp_initial_layer": [ - "45" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "30" - ], - "filament_deretraction_speed": [ - "35" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "35" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "50", - "customized_plate_temp_initial_layer": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "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_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,190],[1.2,220]]", - "pressure_advance": "0.03", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA-Silk @Ender-5 Max-all.json b/resources/profiles/Creality/filament/Generic PLA-Silk @Ender-5 Max-all.json deleted file mode 100644 index 250c387982..0000000000 --- a/resources/profiles/Creality/filament/Generic PLA-Silk @Ender-5 Max-all.json +++ /dev/null @@ -1,155 +0,0 @@ -{ - "type": "filament", - "name": "Generic PLA-Silk @Ender-5 Max-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "zIrKl9P6Aer6sbiS", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "45" - ], - "cool_plate_temp_initial_layer": [ - "45" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_deretraction_speed": [ - "30" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "14" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "55", - "customized_plate_temp_initial_layer": "55", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "55", - "epoxy_resin_plate_temp_initial_layer": "55", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "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_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,190],[1.0,220]]", - "pressure_advance": "0.044", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic TPU @Ender-5 Max-all.json b/resources/profiles/Creality/filament/Generic TPU @Ender-5 Max-all.json deleted file mode 100644 index 940f0bdb03..0000000000 --- a/resources/profiles/Creality/filament/Generic TPU @Ender-5 Max-all.json +++ /dev/null @@ -1,166 +0,0 @@ -{ - "type": "filament", - "name": "Generic TPU @Ender-5 Max-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "KPUcdZyegXYeyHOL", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "45" - ], - "cool_plate_temp_initial_layer": [ - "45" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "35" - ], - "eng_plate_temp_initial_layer": [ - "35" - ], - "filament_cost": [ - "25" - ], - "filament_deretraction_speed": [ - "35" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "35" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "210" - ], - "nozzle_temperature_initial_layer": [ - "210" - ], - "nozzle_temperature_range_high": [ - "220" - ], - "overhang_fan_threshold": [ - "50%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "50", - "customized_plate_temp_initial_layer": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "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_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.4", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/HP-ASA @Ender-5 Max-all.json b/resources/profiles/Creality/filament/HP-ASA @Ender-5 Max-all.json deleted file mode 100644 index b2d283fae0..0000000000 --- a/resources/profiles/Creality/filament/HP-ASA @Ender-5 Max-all.json +++ /dev/null @@ -1,175 +0,0 @@ -{ - "type": "filament", - "name": "HP-ASA @Ender-5 Max-all", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "JzsojF2Um23vm2qT", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "90" - ], - "cool_plate_temp_initial_layer": [ - "90" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "20" - ], - "filament_cost": [ - "29" - ], - "filament_density": [ - "1.15" - ], - "filament_deretraction_speed": [ - "35" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.88" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "35" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "55", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "90", - "customized_plate_temp_initial_layer": "90", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "90", - "epoxy_resin_plate_temp_initial_layer": "90", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "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_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,240],[8.0,250],[12.0,260]]", - "pressure_advance": "0.032", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/HP-TPU @Ender-5 Max-all.json b/resources/profiles/Creality/filament/HP-TPU @Ender-5 Max-all.json deleted file mode 100644 index c25294789b..0000000000 --- a/resources/profiles/Creality/filament/HP-TPU @Ender-5 Max-all.json +++ /dev/null @@ -1,168 +0,0 @@ -{ - "type": "filament", - "name": "HP-TPU @Ender-5 Max-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "7Y7KjqVEXrce3jKO", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "45" - ], - "cool_plate_temp_initial_layer": [ - "45" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "35" - ], - "eng_plate_temp_initial_layer": [ - "35" - ], - "filament_density": [ - "1.26" - ], - "filament_deretraction_speed": [ - "35" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "2.5" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "35" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "210" - ], - "nozzle_temperature_initial_layer": [ - "210" - ], - "nozzle_temperature_range_high": [ - "220" - ], - "overhang_fan_threshold": [ - "50%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "50", - "customized_plate_temp_initial_layer": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "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_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.4", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle", - "Creality Ender-5 Max 0.6 nozzle", - "Creality Ender-5 Max 0.8 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper ABS @Ender-5 Max-all.json b/resources/profiles/Creality/filament/Hyper ABS @Ender-5 Max-all.json deleted file mode 100644 index 097434bdc4..0000000000 --- a/resources/profiles/Creality/filament/Hyper ABS @Ender-5 Max-all.json +++ /dev/null @@ -1,166 +0,0 @@ -{ - "type": "filament", - "name": "Hyper ABS @Ender-5 Max-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "jPfMyNBquP31h2Eb", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "90" - ], - "cool_plate_temp_initial_layer": [ - "90" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_max_speed": [ - "20" - ], - "fan_min_speed": [ - "20" - ], - "filament_cost": [ - "15" - ], - "filament_density": [ - "1.08" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.92" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "60" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "overhang_fan_speed": [ - "20" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "5" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; Filament gcode\n" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "90", - "epoxy_resin_plate_temp_initial_layer": "90", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "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_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,230],[5.0,250],[10.0,260]]", - "pressure_advance": "0.025", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle", - "Creality Ender-5 Max 0.6 nozzle", - "Creality Ender-5 Max 0.8 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PETG @Ender-5 Max-all.json b/resources/profiles/Creality/filament/Hyper PETG @Ender-5 Max-all.json deleted file mode 100644 index fe1f0fbded..0000000000 --- a/resources/profiles/Creality/filament/Hyper PETG @Ender-5 Max-all.json +++ /dev/null @@ -1,163 +0,0 @@ -{ - "type": "filament", - "name": "Hyper PETG @Ender-5 Max-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "nr57CpZ5PwPmcOCR", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "20" - ], - "filament_cost": [ - "25" - ], - "filament_density": [ - "1.23" - ], - "filament_deretraction_speed": [ - "30" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_type": [ - "PETG" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe_distance": [ - "2" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "80", - "customized_plate_temp_initial_layer": "80", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "80", - "epoxy_resin_plate_temp_initial_layer": "80", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "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_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,220],[1.0,240]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PLA @Ender-5 Max-all.json b/resources/profiles/Creality/filament/Hyper PLA @Ender-5 Max-all.json deleted file mode 100644 index 6c5bac864d..0000000000 --- a/resources/profiles/Creality/filament/Hyper PLA @Ender-5 Max-all.json +++ /dev/null @@ -1,160 +0,0 @@ -{ - "type": "filament", - "name": "Hyper PLA @Ender-5 Max-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "Nb1H9jKg8CPQXLVI", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "45" - ], - "cool_plate_temp_initial_layer": [ - "45" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "30" - ], - "filament_deretraction_speed": [ - "35" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "35" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "45" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "45" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "55", - "customized_plate_temp_initial_layer": "45", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "55", - "epoxy_resin_plate_temp_initial_layer": "45", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "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_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,190],[1.5,220]]", - "pressure_advance": "0.048", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle", - "Creality Ender-5 Max 0.6 nozzle", - "Creality Ender-5 Max 0.8 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PLA-CF @Ender-5 Max-all.json b/resources/profiles/Creality/filament/Hyper PLA-CF @Ender-5 Max-all.json deleted file mode 100644 index 7592840259..0000000000 --- a/resources/profiles/Creality/filament/Hyper PLA-CF @Ender-5 Max-all.json +++ /dev/null @@ -1,163 +0,0 @@ -{ - "type": "filament", - "name": "Hyper PLA-CF @Ender-5 Max-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "pW3AHx1VemLWSa7q", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "45" - ], - "cool_plate_temp_initial_layer": [ - "45" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "32" - ], - "filament_density": [ - "1.27" - ], - "filament_deretraction_speed": [ - "35" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "35" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "50", - "customized_plate_temp_initial_layer": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "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_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,190],[1.2,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Elegoo.json b/resources/profiles/Elegoo.json index f85e19bb76..9d2da9692c 100644 --- a/resources/profiles/Elegoo.json +++ b/resources/profiles/Elegoo.json @@ -1,2546 +1,2546 @@ { - "name": "Elegoo", - "version": "02.04.00.07", - "force_update": "0", - "description": "Elegoo configurations", - "machine_model_list": [ - { - "name": "Elegoo Centauri Carbon 2", - "sub_path": "machine/ECC2/Elegoo Centauri Carbon 2.json" - }, - { - "name": "Elegoo Centauri 2", - "sub_path": "machine/EC2/Elegoo Centauri 2.json" - }, - { - "name": "Elegoo Centauri Carbon", - "sub_path": "machine/ECC/Elegoo Centauri Carbon.json" - }, - { - "name": "Elegoo Centauri", - "sub_path": "machine/EC/Elegoo Centauri.json" - }, - { - "name": "Elegoo OrangeStorm Giga", - "sub_path": "machine/EOSGIGA/Elegoo OrangeStorm Giga.json" - }, - { - "name": "Elegoo Neptune 4 Max", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Max.json" - }, - { - "name": "Elegoo Neptune 4 Plus", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Plus.json" - }, - { - "name": "Elegoo Neptune 4 Pro", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Pro.json" - }, - { - "name": "Elegoo Neptune 4", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4.json" - }, - { - "name": "Elegoo Neptune 3 Max", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Max.json" - }, - { - "name": "Elegoo Neptune 3 Plus", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Plus.json" - }, - { - "name": "Elegoo Neptune 3 Pro", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Pro.json" - }, - { - "name": "Elegoo Neptune 3", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 3.json" - }, - { - "name": "Elegoo Neptune X", - "sub_path": "machine/EN2SERIES/Elegoo Neptune X.json" - }, - { - "name": "Elegoo Neptune 2S", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 2S.json" - }, - { - "name": "Elegoo Neptune 2D", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 2D.json" - }, - { - "name": "Elegoo Neptune 2", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 2.json" - }, - { - "name": "Elegoo Neptune", - "sub_path": "machine/EN2SERIES/Elegoo Neptune.json" - } - ], - "process_list": [ - { - "name": "fdm_process_common", - "sub_path": "process/fdm_process_common.json" - }, - { - "name": "fdm_process_elegoo_common", - "sub_path": "process/fdm_process_elegoo_common.json" - }, - { - "name": "fdm_process_elegoo_02010", - "sub_path": "process/fdm_process_elegoo_02010.json" - }, - { - "name": "fdm_process_elegoo_04020", - "sub_path": "process/fdm_process_elegoo_04020.json" - }, - { - "name": "fdm_process_elegoo_06030", - "sub_path": "process/fdm_process_elegoo_06030.json" - }, - { - "name": "fdm_process_elegoo_08040", - "sub_path": "process/fdm_process_elegoo_08040.json" - }, - { - "name": "fdm_process_elegoo_10050", - "sub_path": "process/fdm_process_elegoo_10050.json" - }, - { - "name": "0.20mm Standard @Elegoo CC2 0.4 nozzle", - "sub_path": "process/ECC2/0.20mm Standard @Elegoo CC2 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Elegoo C2 0.4 nozzle", - "sub_path": "process/EC2/0.20mm Standard @Elegoo C2 0.4 nozzle.json" - }, - { - "name": "0.10mm Standard @Elegoo CC2 0.2 nozzle", - "sub_path": "process/ECC2/0.10mm Standard @Elegoo CC2 0.2 nozzle.json" - }, - { - "name": "0.10mm Standard @Elegoo C2 0.2 nozzle", - "sub_path": "process/EC2/0.10mm Standard @Elegoo C2 0.2 nozzle.json" - }, - { - "name": "0.30mm Standard @Elegoo CC2 0.6 nozzle", - "sub_path": "process/ECC2/0.30mm Standard @Elegoo CC2 0.6 nozzle.json" - }, - { - "name": "0.30mm Standard @Elegoo C2 0.6 nozzle", - "sub_path": "process/EC2/0.30mm Standard @Elegoo C2 0.6 nozzle.json" - }, - { - "name": "0.40mm Standard @Elegoo CC2 0.8 nozzle", - "sub_path": "process/ECC2/0.40mm Standard @Elegoo CC2 0.8 nozzle.json" - }, - { - "name": "0.40mm Standard @Elegoo C2 0.8 nozzle", - "sub_path": "process/EC2/0.40mm Standard @Elegoo C2 0.8 nozzle.json" - }, - { - "name": "0.48mm Draft @Elegoo CC2 0.8 nozzle", - "sub_path": "process/ECC2/0.48mm Draft @Elegoo CC2 0.8 nozzle.json" - }, - { - "name": "0.48mm Draft @Elegoo C2 0.8 nozzle", - "sub_path": "process/EC2/0.48mm Draft @Elegoo C2 0.8 nozzle.json" - }, - { - "name": "0.42mm Extra Draft @Elegoo CC2 0.6 nozzle", - "sub_path": "process/ECC2/0.42mm Extra Draft @Elegoo CC2 0.6 nozzle.json" - }, - { - "name": "0.42mm Extra Draft @Elegoo C2 0.6 nozzle", - "sub_path": "process/EC2/0.42mm Extra Draft @Elegoo C2 0.6 nozzle.json" - }, - { - "name": "0.36mm Draft @Elegoo CC2 0.6 nozzle", - "sub_path": "process/ECC2/0.36mm Draft @Elegoo CC2 0.6 nozzle.json" - }, - { - "name": "0.36mm Draft @Elegoo C2 0.6 nozzle", - "sub_path": "process/EC2/0.36mm Draft @Elegoo C2 0.6 nozzle.json" - }, - { - "name": "0.32mm Optimal @Elegoo CC2 0.8 nozzle", - "sub_path": "process/ECC2/0.32mm Optimal @Elegoo CC2 0.8 nozzle.json" - }, - { - "name": "0.32mm Optimal @Elegoo C2 0.8 nozzle", - "sub_path": "process/EC2/0.32mm Optimal @Elegoo C2 0.8 nozzle.json" - }, - { - "name": "0.30mm Strength @Elegoo CC2 0.6 nozzle", - "sub_path": "process/ECC2/0.30mm Strength @Elegoo CC2 0.6 nozzle.json" - }, - { - "name": "0.30mm Strength @Elegoo C2 0.6 nozzle", - "sub_path": "process/EC2/0.30mm Strength @Elegoo C2 0.6 nozzle.json" - }, - { - "name": "0.28mm Extra Draft @Elegoo CC2 0.4 nozzle", - "sub_path": "process/ECC2/0.28mm Extra Draft @Elegoo CC2 0.4 nozzle.json" - }, - { - "name": "0.28mm Extra Draft @Elegoo C2 0.4 nozzle", - "sub_path": "process/EC2/0.28mm Extra Draft @Elegoo C2 0.4 nozzle.json" - }, - { - "name": "0.24mm Optimal @Elegoo CC2 0.6 nozzle", - "sub_path": "process/ECC2/0.24mm Optimal @Elegoo CC2 0.6 nozzle.json" - }, - { - "name": "0.24mm Optimal @Elegoo C2 0.6 nozzle", - "sub_path": "process/EC2/0.24mm Optimal @Elegoo C2 0.6 nozzle.json" - }, - { - "name": "0.24mm Fine @Elegoo CC2 0.8 nozzle", - "sub_path": "process/ECC2/0.24mm Fine @Elegoo CC2 0.8 nozzle.json" - }, - { - "name": "0.24mm Fine @Elegoo C2 0.8 nozzle", - "sub_path": "process/EC2/0.24mm Fine @Elegoo C2 0.8 nozzle.json" - }, - { - "name": "0.24mm Draft @Elegoo CC2 0.4 nozzle", - "sub_path": "process/ECC2/0.24mm Draft @Elegoo CC2 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Elegoo C2 0.4 nozzle", - "sub_path": "process/EC2/0.24mm Draft @Elegoo C2 0.4 nozzle.json" - }, - { - "name": "0.20mm Strength @Elegoo CC2 0.4 nozzle", - "sub_path": "process/ECC2/0.20mm Strength @Elegoo CC2 0.4 nozzle.json" - }, - { - "name": "0.20mm Strength @Elegoo C2 0.4 nozzle", - "sub_path": "process/EC2/0.20mm Strength @Elegoo C2 0.4 nozzle.json" - }, - { - "name": "0.18mm Fine @Elegoo CC2 0.6 nozzle", - "sub_path": "process/ECC2/0.18mm Fine @Elegoo CC2 0.6 nozzle.json" - }, - { - "name": "0.18mm Fine @Elegoo C2 0.6 nozzle", - "sub_path": "process/EC2/0.18mm Fine @Elegoo C2 0.6 nozzle.json" - }, - { - "name": "0.16mm Optimal @Elegoo CC2 0.4 nozzle", - "sub_path": "process/ECC2/0.16mm Optimal @Elegoo CC2 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Elegoo C2 0.4 nozzle", - "sub_path": "process/EC2/0.16mm Optimal @Elegoo C2 0.4 nozzle.json" - }, - { - "name": "0.16mm Extra Fine @Elegoo CC2 0.8 nozzle", - "sub_path": "process/ECC2/0.16mm Extra Fine @Elegoo CC2 0.8 nozzle.json" - }, - { - "name": "0.16mm Extra Fine @Elegoo C2 0.8 nozzle", - "sub_path": "process/EC2/0.16mm Extra Fine @Elegoo C2 0.8 nozzle.json" - }, - { - "name": "0.14mm Extra Draft @Elegoo CC2 0.2 nozzle", - "sub_path": "process/ECC2/0.14mm Extra Draft @Elegoo CC2 0.2 nozzle.json" - }, - { - "name": "0.14mm Extra Draft @Elegoo C2 0.2 nozzle", - "sub_path": "process/EC2/0.14mm Extra Draft @Elegoo C2 0.2 nozzle.json" - }, - { - "name": "0.12mm Fine @Elegoo CC2 0.4 nozzle", - "sub_path": "process/ECC2/0.12mm Fine @Elegoo CC2 0.4 nozzle.json" - }, - { - "name": "0.12mm Fine @Elegoo C2 0.4 nozzle", - "sub_path": "process/EC2/0.12mm Fine @Elegoo C2 0.4 nozzle.json" - }, - { - "name": "0.12mm Draft @Elegoo CC2 0.2 nozzle", - "sub_path": "process/ECC2/0.12mm Draft @Elegoo CC2 0.2 nozzle.json" - }, - { - "name": "0.12mm Draft @Elegoo C2 0.2 nozzle", - "sub_path": "process/EC2/0.12mm Draft @Elegoo C2 0.2 nozzle.json" - }, - { - "name": "0.08mm Optimal @Elegoo CC2 0.2 nozzle", - "sub_path": "process/ECC2/0.08mm Optimal @Elegoo CC2 0.2 nozzle.json" - }, - { - "name": "0.08mm Optimal @Elegoo C2 0.2 nozzle", - "sub_path": "process/EC2/0.08mm Optimal @Elegoo C2 0.2 nozzle.json" - }, - { - "name": "0.20mm Standard @Elegoo CC 0.4 nozzle", - "sub_path": "process/ECC/0.20mm Standard @Elegoo CC 0.4 nozzle.json" - }, - { - "name": "0.10mm Standard @Elegoo CC 0.2 nozzle", - "sub_path": "process/ECC/0.10mm Standard @Elegoo CC 0.2 nozzle.json" - }, - { - "name": "0.30mm Standard @Elegoo CC 0.6 nozzle", - "sub_path": "process/ECC/0.30mm Standard @Elegoo CC 0.6 nozzle.json" - }, - { - "name": "0.40mm Standard @Elegoo CC 0.8 nozzle", - "sub_path": "process/ECC/0.40mm Standard @Elegoo CC 0.8 nozzle.json" - }, - { - "name": "0.48mm Draft @Elegoo CC 0.8 nozzle", - "sub_path": "process/ECC/0.48mm Draft @Elegoo CC 0.8 nozzle.json" - }, - { - "name": "0.42mm Extra Draft @Elegoo CC 0.6 nozzle", - "sub_path": "process/ECC/0.42mm Extra Draft @Elegoo CC 0.6 nozzle.json" - }, - { - "name": "0.36mm Draft @Elegoo CC 0.6 nozzle", - "sub_path": "process/ECC/0.36mm Draft @Elegoo CC 0.6 nozzle.json" - }, - { - "name": "0.32mm Optimal @Elegoo CC 0.8 nozzle", - "sub_path": "process/ECC/0.32mm Optimal @Elegoo CC 0.8 nozzle.json" - }, - { - "name": "0.30mm Strength @Elegoo CC 0.6 nozzle", - "sub_path": "process/ECC/0.30mm Strength @Elegoo CC 0.6 nozzle.json" - }, - { - "name": "0.28mm Extra Draft @Elegoo CC 0.4 nozzle", - "sub_path": "process/ECC/0.28mm Extra Draft @Elegoo CC 0.4 nozzle.json" - }, - { - "name": "0.24mm Optimal @Elegoo CC 0.6 nozzle", - "sub_path": "process/ECC/0.24mm Optimal @Elegoo CC 0.6 nozzle.json" - }, - { - "name": "0.24mm Fine @Elegoo CC 0.8 nozzle", - "sub_path": "process/ECC/0.24mm Fine @Elegoo CC 0.8 nozzle.json" - }, - { - "name": "0.24mm Draft @Elegoo CC 0.4 nozzle", - "sub_path": "process/ECC/0.24mm Draft @Elegoo CC 0.4 nozzle.json" - }, - { - "name": "0.20mm Strength @Elegoo CC 0.4 nozzle", - "sub_path": "process/ECC/0.20mm Strength @Elegoo CC 0.4 nozzle.json" - }, - { - "name": "0.18mm Fine @Elegoo CC 0.6 nozzle", - "sub_path": "process/ECC/0.18mm Fine @Elegoo CC 0.6 nozzle.json" - }, - { - "name": "0.16mm Optimal @Elegoo CC 0.4 nozzle", - "sub_path": "process/ECC/0.16mm Optimal @Elegoo CC 0.4 nozzle.json" - }, - { - "name": "0.16mm Extra Fine @Elegoo CC 0.8 nozzle", - "sub_path": "process/ECC/0.16mm Extra Fine @Elegoo CC 0.8 nozzle.json" - }, - { - "name": "0.14mm Extra Draft @Elegoo CC 0.2 nozzle", - "sub_path": "process/ECC/0.14mm Extra Draft @Elegoo CC 0.2 nozzle.json" - }, - { - "name": "0.12mm Fine @Elegoo CC 0.4 nozzle", - "sub_path": "process/ECC/0.12mm Fine @Elegoo CC 0.4 nozzle.json" - }, - { - "name": "0.12mm Draft @Elegoo CC 0.2 nozzle", - "sub_path": "process/ECC/0.12mm Draft @Elegoo CC 0.2 nozzle.json" - }, - { - "name": "0.08mm Optimal @Elegoo CC 0.2 nozzle", - "sub_path": "process/ECC/0.08mm Optimal @Elegoo CC 0.2 nozzle.json" - }, - { - "name": "0.20mm Standard @Elegoo C 0.4 nozzle", - "sub_path": "process/EC/0.20mm Standard @Elegoo C 0.4 nozzle.json" - }, - { - "name": "0.10mm Standard @Elegoo C 0.2 nozzle", - "sub_path": "process/EC/0.10mm Standard @Elegoo C 0.2 nozzle.json" - }, - { - "name": "0.30mm Standard @Elegoo C 0.6 nozzle", - "sub_path": "process/EC/0.30mm Standard @Elegoo C 0.6 nozzle.json" - }, - { - "name": "0.40mm Standard @Elegoo C 0.8 nozzle", - "sub_path": "process/EC/0.40mm Standard @Elegoo C 0.8 nozzle.json" - }, - { - "name": "0.48mm Draft @Elegoo C 0.8 nozzle", - "sub_path": "process/EC/0.48mm Draft @Elegoo C 0.8 nozzle.json" - }, - { - "name": "0.42mm Extra Draft @Elegoo C 0.6 nozzle", - "sub_path": "process/EC/0.42mm Extra Draft @Elegoo C 0.6 nozzle.json" - }, - { - "name": "0.36mm Draft @Elegoo C 0.6 nozzle", - "sub_path": "process/EC/0.36mm Draft @Elegoo C 0.6 nozzle.json" - }, - { - "name": "0.32mm Optimal @Elegoo C 0.8 nozzle", - "sub_path": "process/EC/0.32mm Optimal @Elegoo C 0.8 nozzle.json" - }, - { - "name": "0.30mm Strength @Elegoo C 0.6 nozzle", - "sub_path": "process/EC/0.30mm Strength @Elegoo C 0.6 nozzle.json" - }, - { - "name": "0.28mm Extra Draft @Elegoo C 0.4 nozzle", - "sub_path": "process/EC/0.28mm Extra Draft @Elegoo C 0.4 nozzle.json" - }, - { - "name": "0.24mm Optimal @Elegoo C 0.6 nozzle", - "sub_path": "process/EC/0.24mm Optimal @Elegoo C 0.6 nozzle.json" - }, - { - "name": "0.24mm Fine @Elegoo C 0.8 nozzle", - "sub_path": "process/EC/0.24mm Fine @Elegoo C 0.8 nozzle.json" - }, - { - "name": "0.24mm Draft @Elegoo C 0.4 nozzle", - "sub_path": "process/EC/0.24mm Draft @Elegoo C 0.4 nozzle.json" - }, - { - "name": "0.20mm Strength @Elegoo C 0.4 nozzle", - "sub_path": "process/EC/0.20mm Strength @Elegoo C 0.4 nozzle.json" - }, - { - "name": "0.18mm Fine @Elegoo C 0.6 nozzle", - "sub_path": "process/EC/0.18mm Fine @Elegoo C 0.6 nozzle.json" - }, - { - "name": "0.16mm Optimal @Elegoo C 0.4 nozzle", - "sub_path": "process/EC/0.16mm Optimal @Elegoo C 0.4 nozzle.json" - }, - { - "name": "0.16mm Extra Fine @Elegoo C 0.8 nozzle", - "sub_path": "process/EC/0.16mm Extra Fine @Elegoo C 0.8 nozzle.json" - }, - { - "name": "0.14mm Extra Draft @Elegoo C 0.2 nozzle", - "sub_path": "process/EC/0.14mm Extra Draft @Elegoo C 0.2 nozzle.json" - }, - { - "name": "0.12mm Fine @Elegoo C 0.4 nozzle", - "sub_path": "process/EC/0.12mm Fine @Elegoo C 0.4 nozzle.json" - }, - { - "name": "0.12mm Draft @Elegoo C 0.2 nozzle", - "sub_path": "process/EC/0.12mm Draft @Elegoo C 0.2 nozzle.json" - }, - { - "name": "0.08mm Optimal @Elegoo C 0.2 nozzle", - "sub_path": "process/EC/0.08mm Optimal @Elegoo C 0.2 nozzle.json" - }, - { - "name": "0.20mm Standard @Elegoo N4 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.20mm Standard @Elegoo N4 0.4 nozzle.json" - }, - { - "name": "0.12mm Fine @Elegoo N4 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.12mm Fine @Elegoo N4 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Elegoo N4 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.16mm Optimal @Elegoo N4 0.4 nozzle.json" - }, - { - "name": "0.20mm Strength @Elegoo N4 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.20mm Strength @Elegoo N4 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Elegoo N4 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.24mm Draft @Elegoo N4 0.4 nozzle.json" - }, - { - "name": "0.28mm Extra Draft @Elegoo N4 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.28mm Extra Draft @Elegoo N4 0.4 nozzle.json" - }, - { - "name": "0.10mm Standard @Elegoo N4 0.2 nozzle", - "sub_path": "process/EN4SERIES/0.10mm Standard @Elegoo N4 0.2 nozzle.json" - }, - { - "name": "0.08mm Optimal @Elegoo N4 0.2 nozzle", - "sub_path": "process/EN4SERIES/0.08mm Optimal @Elegoo N4 0.2 nozzle.json" - }, - { - "name": "0.12mm Draft @Elegoo N4 0.2 nozzle", - "sub_path": "process/EN4SERIES/0.12mm Draft @Elegoo N4 0.2 nozzle.json" - }, - { - "name": "0.30mm Standard @Elegoo N4 0.6 nozzle", - "sub_path": "process/EN4SERIES/0.30mm Standard @Elegoo N4 0.6 nozzle.json" - }, - { - "name": "0.24mm Optimal @Elegoo N4 0.6 nozzle", - "sub_path": "process/EN4SERIES/0.24mm Optimal @Elegoo N4 0.6 nozzle.json" - }, - { - "name": "0.36mm Draft @Elegoo N4 0.6 nozzle", - "sub_path": "process/EN4SERIES/0.36mm Draft @Elegoo N4 0.6 nozzle.json" - }, - { - "name": "0.42mm Extra Draft @Elegoo N4 0.6 nozzle", - "sub_path": "process/EN4SERIES/0.42mm Extra Draft @Elegoo N4 0.6 nozzle.json" - }, - { - "name": "0.40mm Standard @Elegoo N4 0.8 nozzle", - "sub_path": "process/EN4SERIES/0.40mm Standard @Elegoo N4 0.8 nozzle.json" - }, - { - "name": "0.24mm Fine @Elegoo N4 0.8 nozzle", - "sub_path": "process/EN4SERIES/0.24mm Fine @Elegoo N4 0.8 nozzle.json" - }, - { - "name": "0.32mm Optimal @Elegoo N4 0.8 nozzle", - "sub_path": "process/EN4SERIES/0.32mm Optimal @Elegoo N4 0.8 nozzle.json" - }, - { - "name": "0.48mm Draft @Elegoo N4 0.8 nozzle", - "sub_path": "process/EN4SERIES/0.48mm Draft @Elegoo N4 0.8 nozzle.json" - }, - { - "name": "0.50mm Standard @Elegoo N4 1.0 nozzle", - "sub_path": "process/EN4SERIES/0.50mm Standard @Elegoo N4 1.0 nozzle.json" - }, - { - "name": "0.30mm Fine @Elegoo N4 1.0 nozzle", - "sub_path": "process/EN4SERIES/0.30mm Fine @Elegoo N4 1.0 nozzle.json" - }, - { - "name": "0.40mm Optimal @Elegoo N4 1.0 nozzle", - "sub_path": "process/EN4SERIES/0.40mm Optimal @Elegoo N4 1.0 nozzle.json" - }, - { - "name": "0.60mm Draft @Elegoo N4 1.0 nozzle", - "sub_path": "process/EN4SERIES/0.60mm Draft @Elegoo N4 1.0 nozzle.json" - }, - { - "name": "0.20mm Standard @Elegoo N4Pro 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.20mm Standard @Elegoo N4Pro 0.4 nozzle.json" - }, - { - "name": "0.12mm Fine @Elegoo N4Pro 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.12mm Fine @Elegoo N4Pro 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Elegoo N4Pro 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.16mm Optimal @Elegoo N4Pro 0.4 nozzle.json" - }, - { - "name": "0.20mm Strength @Elegoo N4Pro 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.20mm Strength @Elegoo N4Pro 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Elegoo N4Pro 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.24mm Draft @Elegoo N4Pro 0.4 nozzle.json" - }, - { - "name": "0.28mm Extra Draft @Elegoo N4Pro 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.28mm Extra Draft @Elegoo N4Pro 0.4 nozzle.json" - }, - { - "name": "0.10mm Standard @Elegoo N4Pro 0.2 nozzle", - "sub_path": "process/EN4SERIES/0.10mm Standard @Elegoo N4Pro 0.2 nozzle.json" - }, - { - "name": "0.08mm Optimal @Elegoo N4Pro 0.2 nozzle", - "sub_path": "process/EN4SERIES/0.08mm Optimal @Elegoo N4Pro 0.2 nozzle.json" - }, - { - "name": "0.12mm Draft @Elegoo N4Pro 0.2 nozzle", - "sub_path": "process/EN4SERIES/0.12mm Draft @Elegoo N4Pro 0.2 nozzle.json" - }, - { - "name": "0.30mm Standard @Elegoo N4Pro 0.6 nozzle", - "sub_path": "process/EN4SERIES/0.30mm Standard @Elegoo N4Pro 0.6 nozzle.json" - }, - { - "name": "0.24mm Optimal @Elegoo N4Pro 0.6 nozzle", - "sub_path": "process/EN4SERIES/0.24mm Optimal @Elegoo N4Pro 0.6 nozzle.json" - }, - { - "name": "0.36mm Draft @Elegoo N4Pro 0.6 nozzle", - "sub_path": "process/EN4SERIES/0.36mm Draft @Elegoo N4Pro 0.6 nozzle.json" - }, - { - "name": "0.42mm Extra Draft @Elegoo N4Pro 0.6 nozzle", - "sub_path": "process/EN4SERIES/0.42mm Extra Draft @Elegoo N4Pro 0.6 nozzle.json" - }, - { - "name": "0.40mm Standard @Elegoo N4Pro 0.8 nozzle", - "sub_path": "process/EN4SERIES/0.40mm Standard @Elegoo N4Pro 0.8 nozzle.json" - }, - { - "name": "0.24mm Fine @Elegoo N4Pro 0.8 nozzle", - "sub_path": "process/EN4SERIES/0.24mm Fine @Elegoo N4Pro 0.8 nozzle.json" - }, - { - "name": "0.32mm Optimal @Elegoo N4Pro 0.8 nozzle", - "sub_path": "process/EN4SERIES/0.32mm Optimal @Elegoo N4Pro 0.8 nozzle.json" - }, - { - "name": "0.48mm Draft @Elegoo N4Pro 0.8 nozzle", - "sub_path": "process/EN4SERIES/0.48mm Draft @Elegoo N4Pro 0.8 nozzle.json" - }, - { - "name": "0.50mm Standard @Elegoo N4Pro 1.0 nozzle", - "sub_path": "process/EN4SERIES/0.50mm Standard @Elegoo N4Pro 1.0 nozzle.json" - }, - { - "name": "0.30mm Fine @Elegoo N4Pro 1.0 nozzle", - "sub_path": "process/EN4SERIES/0.30mm Fine @Elegoo N4Pro 1.0 nozzle.json" - }, - { - "name": "0.40mm Optimal @Elegoo N4Pro 1.0 nozzle", - "sub_path": "process/EN4SERIES/0.40mm Optimal @Elegoo N4Pro 1.0 nozzle.json" - }, - { - "name": "0.60mm Draft @Elegoo N4Pro 1.0 nozzle", - "sub_path": "process/EN4SERIES/0.60mm Draft @Elegoo N4Pro 1.0 nozzle.json" - }, - { - "name": "0.20mm Standard @Elegoo N4Plus 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.20mm Standard @Elegoo N4Plus 0.4 nozzle.json" - }, - { - "name": "0.12mm Fine @Elegoo N4Plus 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.12mm Fine @Elegoo N4Plus 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Elegoo N4Plus 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.16mm Optimal @Elegoo N4Plus 0.4 nozzle.json" - }, - { - "name": "0.20mm Strength @Elegoo N4Plus 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.20mm Strength @Elegoo N4Plus 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Elegoo N4Plus 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.24mm Draft @Elegoo N4Plus 0.4 nozzle.json" - }, - { - "name": "0.28mm Extra Draft @Elegoo N4Plus 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.28mm Extra Draft @Elegoo N4Plus 0.4 nozzle.json" - }, - { - "name": "0.10mm Standard @Elegoo N4Plus 0.2 nozzle", - "sub_path": "process/EN4SERIES/0.10mm Standard @Elegoo N4Plus 0.2 nozzle.json" - }, - { - "name": "0.08mm Optimal @Elegoo N4Plus 0.2 nozzle", - "sub_path": "process/EN4SERIES/0.08mm Optimal @Elegoo N4Plus 0.2 nozzle.json" - }, - { - "name": "0.12mm Draft @Elegoo N4Plus 0.2 nozzle", - "sub_path": "process/EN4SERIES/0.12mm Draft @Elegoo N4Plus 0.2 nozzle.json" - }, - { - "name": "0.30mm Standard @Elegoo N4Plus 0.6 nozzle", - "sub_path": "process/EN4SERIES/0.30mm Standard @Elegoo N4Plus 0.6 nozzle.json" - }, - { - "name": "0.24mm Optimal @Elegoo N4Plus 0.6 nozzle", - "sub_path": "process/EN4SERIES/0.24mm Optimal @Elegoo N4Plus 0.6 nozzle.json" - }, - { - "name": "0.36mm Draft @Elegoo N4Plus 0.6 nozzle", - "sub_path": "process/EN4SERIES/0.36mm Draft @Elegoo N4Plus 0.6 nozzle.json" - }, - { - "name": "0.42mm Extra Draft @Elegoo N4Plus 0.6 nozzle", - "sub_path": "process/EN4SERIES/0.42mm Extra Draft @Elegoo N4Plus 0.6 nozzle.json" - }, - { - "name": "0.40mm Standard @Elegoo N4Plus 0.8 nozzle", - "sub_path": "process/EN4SERIES/0.40mm Standard @Elegoo N4Plus 0.8 nozzle.json" - }, - { - "name": "0.24mm Fine @Elegoo N4Plus 0.8 nozzle", - "sub_path": "process/EN4SERIES/0.24mm Fine @Elegoo N4Plus 0.8 nozzle.json" - }, - { - "name": "0.32mm Optimal @Elegoo N4Plus 0.8 nozzle", - "sub_path": "process/EN4SERIES/0.32mm Optimal @Elegoo N4Plus 0.8 nozzle.json" - }, - { - "name": "0.48mm Draft @Elegoo N4Plus 0.8 nozzle", - "sub_path": "process/EN4SERIES/0.48mm Draft @Elegoo N4Plus 0.8 nozzle.json" - }, - { - "name": "0.50mm Standard @Elegoo N4Plus 1.0 nozzle", - "sub_path": "process/EN4SERIES/0.50mm Standard @Elegoo N4Plus 1.0 nozzle.json" - }, - { - "name": "0.30mm Fine @Elegoo N4Plus 1.0 nozzle", - "sub_path": "process/EN4SERIES/0.30mm Fine @Elegoo N4Plus 1.0 nozzle.json" - }, - { - "name": "0.40mm Optimal @Elegoo N4Plus 1.0 nozzle", - "sub_path": "process/EN4SERIES/0.40mm Optimal @Elegoo N4Plus 1.0 nozzle.json" - }, - { - "name": "0.60mm Draft @Elegoo N4Plus 1.0 nozzle", - "sub_path": "process/EN4SERIES/0.60mm Draft @Elegoo N4Plus 1.0 nozzle.json" - }, - { - "name": "0.20mm Standard @Elegoo N4Max 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.20mm Standard @Elegoo N4Max 0.4 nozzle.json" - }, - { - "name": "0.12mm Fine @Elegoo N4Max 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.12mm Fine @Elegoo N4Max 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Elegoo N4Max 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.16mm Optimal @Elegoo N4Max 0.4 nozzle.json" - }, - { - "name": "0.20mm Strength @Elegoo N4Max 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.20mm Strength @Elegoo N4Max 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Elegoo N4Max 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.24mm Draft @Elegoo N4Max 0.4 nozzle.json" - }, - { - "name": "0.28mm Extra Draft @Elegoo N4Max 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.28mm Extra Draft @Elegoo N4Max 0.4 nozzle.json" - }, - { - "name": "0.10mm Standard @Elegoo N4Max 0.2 nozzle", - "sub_path": "process/EN4SERIES/0.10mm Standard @Elegoo N4Max 0.2 nozzle.json" - }, - { - "name": "0.08mm Optimal @Elegoo N4Max 0.2 nozzle", - "sub_path": "process/EN4SERIES/0.08mm Optimal @Elegoo N4Max 0.2 nozzle.json" - }, - { - "name": "0.12mm Draft @Elegoo N4Max 0.2 nozzle", - "sub_path": "process/EN4SERIES/0.12mm Draft @Elegoo N4Max 0.2 nozzle.json" - }, - { - "name": "0.30mm Standard @Elegoo N4Max 0.6 nozzle", - "sub_path": "process/EN4SERIES/0.30mm Standard @Elegoo N4Max 0.6 nozzle.json" - }, - { - "name": "0.24mm Optimal @Elegoo N4Max 0.6 nozzle", - "sub_path": "process/EN4SERIES/0.24mm Optimal @Elegoo N4Max 0.6 nozzle.json" - }, - { - "name": "0.36mm Draft @Elegoo N4Max 0.6 nozzle", - "sub_path": "process/EN4SERIES/0.36mm Draft @Elegoo N4Max 0.6 nozzle.json" - }, - { - "name": "0.42mm Extra Draft @Elegoo N4Max 0.6 nozzle", - "sub_path": "process/EN4SERIES/0.42mm Extra Draft @Elegoo N4Max 0.6 nozzle.json" - }, - { - "name": "0.40mm Standard @Elegoo N4Max 0.8 nozzle", - "sub_path": "process/EN4SERIES/0.40mm Standard @Elegoo N4Max 0.8 nozzle.json" - }, - { - "name": "0.24mm Fine @Elegoo N4Max 0.8 nozzle", - "sub_path": "process/EN4SERIES/0.24mm Fine @Elegoo N4Max 0.8 nozzle.json" - }, - { - "name": "0.32mm Optimal @Elegoo N4Max 0.8 nozzle", - "sub_path": "process/EN4SERIES/0.32mm Optimal @Elegoo N4Max 0.8 nozzle.json" - }, - { - "name": "0.48mm Draft @Elegoo N4Max 0.8 nozzle", - "sub_path": "process/EN4SERIES/0.48mm Draft @Elegoo N4Max 0.8 nozzle.json" - }, - { - "name": "0.50mm Standard @Elegoo N4Max 1.0 nozzle", - "sub_path": "process/EN4SERIES/0.50mm Standard @Elegoo N4Max 1.0 nozzle.json" - }, - { - "name": "0.30mm Fine @Elegoo N4Max 1.0 nozzle", - "sub_path": "process/EN4SERIES/0.30mm Fine @Elegoo N4Max 1.0 nozzle.json" - }, - { - "name": "0.40mm Optimal @Elegoo N4Max 1.0 nozzle", - "sub_path": "process/EN4SERIES/0.40mm Optimal @Elegoo N4Max 1.0 nozzle.json" - }, - { - "name": "0.60mm Draft @Elegoo N4Max 1.0 nozzle", - "sub_path": "process/EN4SERIES/0.60mm Draft @Elegoo N4Max 1.0 nozzle.json" - }, - { - "name": "0.20mm Standard @Elegoo N3Pro 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.20mm Standard @Elegoo N3Pro 0.4 nozzle.json" - }, - { - "name": "0.12mm Fine @Elegoo N3Pro 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.12mm Fine @Elegoo N3Pro 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Elegoo N3Pro 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.16mm Optimal @Elegoo N3Pro 0.4 nozzle.json" - }, - { - "name": "0.20mm Strength @Elegoo N3Pro 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.20mm Strength @Elegoo N3Pro 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Elegoo N3Pro 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.24mm Draft @Elegoo N3Pro 0.4 nozzle.json" - }, - { - "name": "0.28mm Extra Draft @Elegoo N3Pro 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.28mm Extra Draft @Elegoo N3Pro 0.4 nozzle.json" - }, - { - "name": "0.10mm Standard @Elegoo N3Pro 0.2 nozzle", - "sub_path": "process/EN3SERIES/0.10mm Standard @Elegoo N3Pro 0.2 nozzle.json" - }, - { - "name": "0.08mm Optimal @Elegoo N3Pro 0.2 nozzle", - "sub_path": "process/EN3SERIES/0.08mm Optimal @Elegoo N3Pro 0.2 nozzle.json" - }, - { - "name": "0.12mm Draft @Elegoo N3Pro 0.2 nozzle", - "sub_path": "process/EN3SERIES/0.12mm Draft @Elegoo N3Pro 0.2 nozzle.json" - }, - { - "name": "0.30mm Standard @Elegoo N3Pro 0.6 nozzle", - "sub_path": "process/EN3SERIES/0.30mm Standard @Elegoo N3Pro 0.6 nozzle.json" - }, - { - "name": "0.24mm Optimal @Elegoo N3Pro 0.6 nozzle", - "sub_path": "process/EN3SERIES/0.24mm Optimal @Elegoo N3Pro 0.6 nozzle.json" - }, - { - "name": "0.36mm Draft @Elegoo N3Pro 0.6 nozzle", - "sub_path": "process/EN3SERIES/0.36mm Draft @Elegoo N3Pro 0.6 nozzle.json" - }, - { - "name": "0.42mm Extra Draft @Elegoo N3Pro 0.6 nozzle", - "sub_path": "process/EN3SERIES/0.42mm Extra Draft @Elegoo N3Pro 0.6 nozzle.json" - }, - { - "name": "0.40mm Standard @Elegoo N3Pro 0.8 nozzle", - "sub_path": "process/EN3SERIES/0.40mm Standard @Elegoo N3Pro 0.8 nozzle.json" - }, - { - "name": "0.24mm Fine @Elegoo N3Pro 0.8 nozzle", - "sub_path": "process/EN3SERIES/0.24mm Fine @Elegoo N3Pro 0.8 nozzle.json" - }, - { - "name": "0.32mm Optimal @Elegoo N3Pro 0.8 nozzle", - "sub_path": "process/EN3SERIES/0.32mm Optimal @Elegoo N3Pro 0.8 nozzle.json" - }, - { - "name": "0.48mm Draft @Elegoo N3Pro 0.8 nozzle", - "sub_path": "process/EN3SERIES/0.48mm Draft @Elegoo N3Pro 0.8 nozzle.json" - }, - { - "name": "0.50mm Standard @Elegoo N3Pro 1.0 nozzle", - "sub_path": "process/EN3SERIES/0.50mm Standard @Elegoo N3Pro 1.0 nozzle.json" - }, - { - "name": "0.30mm Fine @Elegoo N3Pro 1.0 nozzle", - "sub_path": "process/EN3SERIES/0.30mm Fine @Elegoo N3Pro 1.0 nozzle.json" - }, - { - "name": "0.40mm Optimal @Elegoo N3Pro 1.0 nozzle", - "sub_path": "process/EN3SERIES/0.40mm Optimal @Elegoo N3Pro 1.0 nozzle.json" - }, - { - "name": "0.60mm Draft @Elegoo N3Pro 1.0 nozzle", - "sub_path": "process/EN3SERIES/0.60mm Draft @Elegoo N3Pro 1.0 nozzle.json" - }, - { - "name": "0.20mm Standard @Elegoo N3Plus 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.20mm Standard @Elegoo N3Plus 0.4 nozzle.json" - }, - { - "name": "0.12mm Fine @Elegoo N3Plus 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.12mm Fine @Elegoo N3Plus 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Elegoo N3Plus 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.16mm Optimal @Elegoo N3Plus 0.4 nozzle.json" - }, - { - "name": "0.20mm Strength @Elegoo N3Plus 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.20mm Strength @Elegoo N3Plus 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Elegoo N3Plus 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.24mm Draft @Elegoo N3Plus 0.4 nozzle.json" - }, - { - "name": "0.28mm Extra Draft @Elegoo N3Plus 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.28mm Extra Draft @Elegoo N3Plus 0.4 nozzle.json" - }, - { - "name": "0.10mm Standard @Elegoo N3Plus 0.2 nozzle", - "sub_path": "process/EN3SERIES/0.10mm Standard @Elegoo N3Plus 0.2 nozzle.json" - }, - { - "name": "0.08mm Optimal @Elegoo N3Plus 0.2 nozzle", - "sub_path": "process/EN3SERIES/0.08mm Optimal @Elegoo N3Plus 0.2 nozzle.json" - }, - { - "name": "0.12mm Draft @Elegoo N3Plus 0.2 nozzle", - "sub_path": "process/EN3SERIES/0.12mm Draft @Elegoo N3Plus 0.2 nozzle.json" - }, - { - "name": "0.30mm Standard @Elegoo N3Plus 0.6 nozzle", - "sub_path": "process/EN3SERIES/0.30mm Standard @Elegoo N3Plus 0.6 nozzle.json" - }, - { - "name": "0.24mm Optimal @Elegoo N3Plus 0.6 nozzle", - "sub_path": "process/EN3SERIES/0.24mm Optimal @Elegoo N3Plus 0.6 nozzle.json" - }, - { - "name": "0.36mm Draft @Elegoo N3Plus 0.6 nozzle", - "sub_path": "process/EN3SERIES/0.36mm Draft @Elegoo N3Plus 0.6 nozzle.json" - }, - { - "name": "0.42mm Extra Draft @Elegoo N3Plus 0.6 nozzle", - "sub_path": "process/EN3SERIES/0.42mm Extra Draft @Elegoo N3Plus 0.6 nozzle.json" - }, - { - "name": "0.40mm Standard @Elegoo N3Plus 0.8 nozzle", - "sub_path": "process/EN3SERIES/0.40mm Standard @Elegoo N3Plus 0.8 nozzle.json" - }, - { - "name": "0.24mm Fine @Elegoo N3Plus 0.8 nozzle", - "sub_path": "process/EN3SERIES/0.24mm Fine @Elegoo N3Plus 0.8 nozzle.json" - }, - { - "name": "0.32mm Optimal @Elegoo N3Plus 0.8 nozzle", - "sub_path": "process/EN3SERIES/0.32mm Optimal @Elegoo N3Plus 0.8 nozzle.json" - }, - { - "name": "0.48mm Draft @Elegoo N3Plus 0.8 nozzle", - "sub_path": "process/EN3SERIES/0.48mm Draft @Elegoo N3Plus 0.8 nozzle.json" - }, - { - "name": "0.50mm Standard @Elegoo N3Plus 1.0 nozzle", - "sub_path": "process/EN3SERIES/0.50mm Standard @Elegoo N3Plus 1.0 nozzle.json" - }, - { - "name": "0.30mm Fine @Elegoo N3Plus 1.0 nozzle", - "sub_path": "process/EN3SERIES/0.30mm Fine @Elegoo N3Plus 1.0 nozzle.json" - }, - { - "name": "0.40mm Optimal @Elegoo N3Plus 1.0 nozzle", - "sub_path": "process/EN3SERIES/0.40mm Optimal @Elegoo N3Plus 1.0 nozzle.json" - }, - { - "name": "0.60mm Draft @Elegoo N3Plus 1.0 nozzle", - "sub_path": "process/EN3SERIES/0.60mm Draft @Elegoo N3Plus 1.0 nozzle.json" - }, - { - "name": "0.20mm Standard @Elegoo N3Max 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.20mm Standard @Elegoo N3Max 0.4 nozzle.json" - }, - { - "name": "0.12mm Fine @Elegoo N3Max 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.12mm Fine @Elegoo N3Max 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Elegoo N3Max 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.16mm Optimal @Elegoo N3Max 0.4 nozzle.json" - }, - { - "name": "0.20mm Strength @Elegoo N3Max 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.20mm Strength @Elegoo N3Max 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Elegoo N3Max 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.24mm Draft @Elegoo N3Max 0.4 nozzle.json" - }, - { - "name": "0.28mm Extra Draft @Elegoo N3Max 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.28mm Extra Draft @Elegoo N3Max 0.4 nozzle.json" - }, - { - "name": "0.10mm Standard @Elegoo N3Max 0.2 nozzle", - "sub_path": "process/EN3SERIES/0.10mm Standard @Elegoo N3Max 0.2 nozzle.json" - }, - { - "name": "0.08mm Optimal @Elegoo N3Max 0.2 nozzle", - "sub_path": "process/EN3SERIES/0.08mm Optimal @Elegoo N3Max 0.2 nozzle.json" - }, - { - "name": "0.12mm Draft @Elegoo N3Max 0.2 nozzle", - "sub_path": "process/EN3SERIES/0.12mm Draft @Elegoo N3Max 0.2 nozzle.json" - }, - { - "name": "0.30mm Standard @Elegoo N3Max 0.6 nozzle", - "sub_path": "process/EN3SERIES/0.30mm Standard @Elegoo N3Max 0.6 nozzle.json" - }, - { - "name": "0.24mm Optimal @Elegoo N3Max 0.6 nozzle", - "sub_path": "process/EN3SERIES/0.24mm Optimal @Elegoo N3Max 0.6 nozzle.json" - }, - { - "name": "0.36mm Draft @Elegoo N3Max 0.6 nozzle", - "sub_path": "process/EN3SERIES/0.36mm Draft @Elegoo N3Max 0.6 nozzle.json" - }, - { - "name": "0.42mm Extra Draft @Elegoo N3Max 0.6 nozzle", - "sub_path": "process/EN3SERIES/0.42mm Extra Draft @Elegoo N3Max 0.6 nozzle.json" - }, - { - "name": "0.40mm Standard @Elegoo N3Max 0.8 nozzle", - "sub_path": "process/EN3SERIES/0.40mm Standard @Elegoo N3Max 0.8 nozzle.json" - }, - { - "name": "0.24mm Fine @Elegoo N3Max 0.8 nozzle", - "sub_path": "process/EN3SERIES/0.24mm Fine @Elegoo N3Max 0.8 nozzle.json" - }, - { - "name": "0.32mm Optimal @Elegoo N3Max 0.8 nozzle", - "sub_path": "process/EN3SERIES/0.32mm Optimal @Elegoo N3Max 0.8 nozzle.json" - }, - { - "name": "0.48mm Draft @Elegoo N3Max 0.8 nozzle", - "sub_path": "process/EN3SERIES/0.48mm Draft @Elegoo N3Max 0.8 nozzle.json" - }, - { - "name": "0.50mm Standard @Elegoo N3Max 1.0 nozzle", - "sub_path": "process/EN3SERIES/0.50mm Standard @Elegoo N3Max 1.0 nozzle.json" - }, - { - "name": "0.30mm Fine @Elegoo N3Max 1.0 nozzle", - "sub_path": "process/EN3SERIES/0.30mm Fine @Elegoo N3Max 1.0 nozzle.json" - }, - { - "name": "0.40mm Optimal @Elegoo N3Max 1.0 nozzle", - "sub_path": "process/EN3SERIES/0.40mm Optimal @Elegoo N3Max 1.0 nozzle.json" - }, - { - "name": "0.60mm Draft @Elegoo N3Max 1.0 nozzle", - "sub_path": "process/EN3SERIES/0.60mm Draft @Elegoo N3Max 1.0 nozzle.json" - }, - { - "name": "0.20mm Standard @Elegoo Neptune 0.4 nozzle", - "sub_path": "process/EN2SERIES/0.20mm Standard @Elegoo Neptune 0.4 nozzle.json" - }, - { - "name": "0.12mm Fine @Elegoo Neptune 0.4 nozzle", - "sub_path": "process/EN2SERIES/0.12mm Fine @Elegoo Neptune 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Elegoo Neptune 0.4 nozzle", - "sub_path": "process/EN2SERIES/0.16mm Optimal @Elegoo Neptune 0.4 nozzle.json" - }, - { - "name": "0.20mm Strength @Elegoo Neptune 0.4 nozzle", - "sub_path": "process/EN2SERIES/0.20mm Strength @Elegoo Neptune 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Elegoo Neptune 0.4 nozzle", - "sub_path": "process/EN2SERIES/0.24mm Draft @Elegoo Neptune 0.4 nozzle.json" - }, - { - "name": "0.28mm Extra Draft @Elegoo Neptune 0.4 nozzle", - "sub_path": "process/EN2SERIES/0.28mm Extra Draft @Elegoo Neptune 0.4 nozzle.json" - }, - { - "name": "0.30mm Standard @Elegoo Neptune 0.6 nozzle", - "sub_path": "process/EN2SERIES/0.30mm Standard @Elegoo Neptune 0.6 nozzle.json" - }, - { - "name": "0.24mm Optimal @Elegoo Neptune 0.6 nozzle", - "sub_path": "process/EN2SERIES/0.24mm Optimal @Elegoo Neptune 0.6 nozzle.json" - }, - { - "name": "0.36mm Draft @Elegoo Neptune 0.6 nozzle", - "sub_path": "process/EN2SERIES/0.36mm Draft @Elegoo Neptune 0.6 nozzle.json" - }, - { - "name": "0.42mm Extra Draft @Elegoo Neptune 0.6 nozzle", - "sub_path": "process/EN2SERIES/0.42mm Extra Draft @Elegoo Neptune 0.6 nozzle.json" - }, - { - "name": "0.40mm Standard @Elegoo Neptune 0.8 nozzle", - "sub_path": "process/EN2SERIES/0.40mm Standard @Elegoo Neptune 0.8 nozzle.json" - }, - { - "name": "0.24mm Fine @Elegoo Neptune 0.8 nozzle", - "sub_path": "process/EN2SERIES/0.24mm Fine @Elegoo Neptune 0.8 nozzle.json" - }, - { - "name": "0.32mm Optimal @Elegoo Neptune 0.8 nozzle", - "sub_path": "process/EN2SERIES/0.32mm Optimal @Elegoo Neptune 0.8 nozzle.json" - }, - { - "name": "0.20mm Standard @Elegoo Giga 0.4 nozzle", - "sub_path": "process/EOSGIGA/0.20mm Standard @Elegoo Giga 0.4 nozzle.json" - }, - { - "name": "0.30mm Standard @Elegoo Giga 0.6 nozzle", - "sub_path": "process/EOSGIGA/0.30mm Standard @Elegoo Giga 0.6 nozzle.json" - }, - { - "name": "0.40mm Standard @Elegoo Giga 0.8 nozzle", - "sub_path": "process/EOSGIGA/0.40mm Standard @Elegoo Giga 0.8 nozzle.json" - }, - { - "name": "0.50mm Standard @Elegoo Giga 1.0 nozzle", - "sub_path": "process/EOSGIGA/0.50mm Standard @Elegoo Giga 1.0 nozzle.json" - }, - { - "name": "0.20mm Strength @Elegoo Giga 0.4 nozzle", - "sub_path": "process/EOSGIGA/0.20mm Strength @Elegoo Giga 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Elegoo Giga 0.4 nozzle", - "sub_path": "process/EOSGIGA/0.16mm Optimal @Elegoo Giga 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Elegoo Giga 0.4 nozzle", - "sub_path": "process/EOSGIGA/0.24mm Draft @Elegoo Giga 0.4 nozzle.json" - }, - { - "name": "0.28mm Extra Draft @Elegoo Giga 0.4 nozzle", - "sub_path": "process/EOSGIGA/0.28mm Extra Draft @Elegoo Giga 0.4 nozzle.json" - }, - { - "name": "0.30mm Strength @Elegoo Giga 0.6 nozzle", - "sub_path": "process/EOSGIGA/0.30mm Strength @Elegoo Giga 0.6 nozzle.json" - }, - { - "name": "0.18mm Fine @Elegoo Giga 0.6 nozzle", - "sub_path": "process/EOSGIGA/0.18mm Fine @Elegoo Giga 0.6 nozzle.json" - }, - { - "name": "0.24mm Optimal @Elegoo Giga 0.6 nozzle", - "sub_path": "process/EOSGIGA/0.24mm Optimal @Elegoo Giga 0.6 nozzle.json" - }, - { - "name": "0.36mm Draft @Elegoo Giga 0.6 nozzle", - "sub_path": "process/EOSGIGA/0.36mm Draft @Elegoo Giga 0.6 nozzle.json" - }, - { - "name": "0.42mm Extra Draft @Elegoo Giga 0.6 nozzle", - "sub_path": "process/EOSGIGA/0.42mm Extra Draft @Elegoo Giga 0.6 nozzle.json" - }, - { - "name": "0.24mm Fine @Elegoo Giga 0.8 nozzle", - "sub_path": "process/EOSGIGA/0.24mm Fine @Elegoo Giga 0.8 nozzle.json" - }, - { - "name": "0.32mm Optimal @Elegoo Giga 0.8 nozzle", - "sub_path": "process/EOSGIGA/0.32mm Optimal @Elegoo Giga 0.8 nozzle.json" - }, - { - "name": "0.48mm Draft @Elegoo Giga 0.8 nozzle", - "sub_path": "process/EOSGIGA/0.48mm Draft @Elegoo Giga 0.8 nozzle.json" - }, - { - "name": "0.56mm Extra Draft @Elegoo Giga 0.8 nozzle", - "sub_path": "process/EOSGIGA/0.56mm Extra Draft @Elegoo Giga 0.8 nozzle.json" - }, - { - "name": "0.60mm Draft @Elegoo Giga 1.0 nozzle", - "sub_path": "process/EOSGIGA/0.60mm Draft @Elegoo Giga 1.0 nozzle.json" - }, - { - "name": "0.40mm Optimal @Elegoo Giga 1.0 nozzle", - "sub_path": "process/EOSGIGA/0.40mm Optimal @Elegoo Giga 1.0 nozzle.json" - }, - { - "name": "0.30mm Fine @Elegoo Giga 1.0 nozzle", - "sub_path": "process/EOSGIGA/0.30mm Fine @Elegoo Giga 1.0 nozzle.json" - } - ], - "filament_list": [ - { - "name": "fdm_filament_common", - "sub_path": "filament/fdm_filament_common.json" - }, - { - "name": "fdm_filament_pla", - "sub_path": "filament/fdm_filament_pla.json" - }, - { - "name": "fdm_filament_tpu", - "sub_path": "filament/fdm_filament_tpu.json" - }, - { - "name": "fdm_filament_pet", - "sub_path": "filament/fdm_filament_pet.json" - }, - { - "name": "fdm_filament_abs", - "sub_path": "filament/fdm_filament_abs.json" - }, - { - "name": "fdm_filament_pc", - "sub_path": "filament/fdm_filament_pc.json" - }, - { - "name": "fdm_filament_asa", - "sub_path": "filament/fdm_filament_asa.json" - }, - { - "name": "fdm_filament_pva", - "sub_path": "filament/fdm_filament_pva.json" - }, - { - "name": "fdm_filament_pa", - "sub_path": "filament/fdm_filament_pa.json" - }, - { - "name": "fdm_filament_hips", - "sub_path": "filament/fdm_filament_hips.json" - }, - { - "name": "fdm_filament_pps", - "sub_path": "filament/fdm_filament_pps.json" - }, - { - "name": "fdm_filament_ppa", - "sub_path": "filament/fdm_filament_ppa.json" - }, - { - "name": "Generic ABS @base", - "sub_path": "filament/BASE/Generic ABS @base.json" - }, - { - "name": "Generic PA @base", - "sub_path": "filament/BASE/Generic PA @base.json" - }, - { - "name": "Generic PETG @base", - "sub_path": "filament/BASE/Generic PETG @base.json" - }, - { - "name": "Generic PET @base", - "sub_path": "filament/BASE/Generic PET @base.json" - }, - { - "name": "Generic PLA @base", - "sub_path": "filament/BASE/Generic PLA @base.json" - }, - { - "name": "Generic PC @base", - "sub_path": "filament/BASE/Generic PC @base.json" - }, - { - "name": "Generic ASA @base", - "sub_path": "filament/BASE/Generic ASA @base.json" - }, - { - "name": "Elegoo TPU 95A @base", - "sub_path": "filament/BASE/Elegoo TPU 95A @base.json" - }, - { - "name": "Elegoo PETG @base", - "sub_path": "filament/BASE/Elegoo PETG @base.json" - }, - { - "name": "Elegoo PLA @base", - "sub_path": "filament/BASE/Elegoo PLA @base.json" - }, - { - "name": "Elegoo ASA @base", - "sub_path": "filament/BASE/Elegoo ASA @base.json" - }, - { - "name": "Elegoo ABS @base", - "sub_path": "filament/BASE/Elegoo ABS @base.json" - }, - { - "name": "Elegoo PAHT-CF @base", - "sub_path": "filament/BASE/Elegoo PAHT-CF @base.json" - }, - { - "name": "Elegoo PC @base", - "sub_path": "filament/BASE/Elegoo PC @base.json" - }, - { - "name": "Elegoo ASA @0.2 nozzle", - "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo ASA @0.2 nozzle.json" - }, - { - "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" - }, - { - "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" - }, - { - "name": "Elegoo ABS @0.2 nozzle", - "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo ABS @0.2 nozzle.json" - }, - { - "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" - }, - { - "name": "Elegoo PLA @ECC", - "sub_path": "filament/ECC/Elegoo PLA @ECC.json" - }, - { - "name": "Elegoo PLA PRO @ECC", - "sub_path": "filament/ECC/Elegoo PLA PRO @ECC.json" - }, - { - "name": "Elegoo PLA+ @ECC", - "sub_path": "filament/ECC/Elegoo PLA+ @ECC.json" - }, - { - "name": "Elegoo Rapid PLA+ @ECC", - "sub_path": "filament/ECC/Elegoo Rapid PLA+ @ECC.json" - }, - { - "name": "Elegoo PLA Silk @ECC", - "sub_path": "filament/ECC/Elegoo PLA Silk @ECC.json" - }, - { - "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" - }, - { - "name": "Elegoo PETG @ECC", - "sub_path": "filament/ECC/Elegoo PETG @ECC.json" - }, - { - "name": "Elegoo PETG PRO @ECC", - "sub_path": "filament/ECC/Elegoo PETG PRO @ECC.json" - }, - { - "name": "Elegoo Rapid PETG @ECC", - "sub_path": "filament/ECC/Elegoo Rapid PETG @ECC.json" - }, - { - "name": "Elegoo TPU 95A @ECC", - "sub_path": "filament/ECC/Elegoo TPU 95A @ECC.json" - }, - { - "name": "Elegoo ASA @ECC", - "sub_path": "filament/ECC/Elegoo ASA @ECC.json" - }, - { - "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" - }, - { - "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" - }, - { - "name": "Elegoo PAHT-CF @ECC", - "sub_path": "filament/ECC/Elegoo PAHT-CF @ECC.json" - }, - { - "name": "Elegoo PC @ECC", - "sub_path": "filament/ECC/Elegoo PC @ECC.json" - }, - { - "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" - }, - { - "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" - }, - { - "name": "Elegoo PLA @EC", - "sub_path": "filament/EC/Elegoo PLA @EC.json" - }, - { - "name": "Elegoo PLA PRO @EC", - "sub_path": "filament/EC/Elegoo PLA PRO @EC.json" - }, - { - "name": "Elegoo PLA+ @EC", - "sub_path": "filament/EC/Elegoo PLA+ @EC.json" - }, - { - "name": "Elegoo Rapid PLA+ @EC", - "sub_path": "filament/EC/Elegoo Rapid PLA+ @EC.json" - }, - { - "name": "Elegoo PLA Silk @EC", - "sub_path": "filament/EC/Elegoo PLA Silk @EC.json" - }, - { - "name": "Elegoo PLA Matte @EC", - "sub_path": "filament/EC/Elegoo PLA Matte @EC.json" - }, - { - "name": "Elegoo PETG @EC", - "sub_path": "filament/EC/Elegoo PETG @EC.json" - }, - { - "name": "Elegoo PETG PRO @EC", - "sub_path": "filament/EC/Elegoo PETG PRO @EC.json" - }, - { - "name": "Elegoo Rapid PETG @EC", - "sub_path": "filament/EC/Elegoo Rapid PETG @EC.json" - }, - { - "name": "Elegoo TPU 95A @EC", - "sub_path": "filament/EC/Elegoo TPU 95A @EC.json" - }, - { - "name": "Elegoo ASA @EC", - "sub_path": "filament/EC/Elegoo ASA @EC.json" - }, - { - "name": "Elegoo ABS @EC", - "sub_path": "filament/EC/Elegoo ABS @EC.json" - }, - { - "name": "Elegoo PLA Galaxy @EC", - "sub_path": "filament/EC/Elegoo PLA Galaxy @EC.json" - }, - { - "name": "Elegoo PLA Basic @EC", - "sub_path": "filament/EC/Elegoo PLA Basic @EC.json" - }, - { - "name": "Elegoo PLA Marble @EC", - "sub_path": "filament/EC/Elegoo PLA Marble @EC.json" - }, - { - "name": "Elegoo PLA Sparkle @EC", - "sub_path": "filament/EC/Elegoo PLA Sparkle @EC.json" - }, - { - "name": "Elegoo PLA Wood @EC", - "sub_path": "filament/EC/Elegoo PLA Wood @EC.json" - }, - { - "name": "Elegoo PAHT-CF @EC", - "sub_path": "filament/EC/Elegoo PAHT-CF @EC.json" - }, - { - "name": "Elegoo PC @EC", - "sub_path": "filament/EC/Elegoo PC @EC.json" - }, - { - "name": "Elegoo PC-FR @EC", - "sub_path": "filament/EC/Elegoo PC-FR @EC.json" - }, - { - "name": "Elegoo PETG-CF @EC", - "sub_path": "filament/EC/Elegoo PETG-CF @EC.json" - }, - { - "name": "Elegoo PETG-GF @EC", - "sub_path": "filament/EC/Elegoo PETG-GF @EC.json" - }, - { - "name": "Elegoo PETG Translucent @EC", - "sub_path": "filament/EC/Elegoo PETG Translucent @EC.json" - }, - { - "name": "Elegoo Rapid TPU 95A @EC", - "sub_path": "filament/EC/Elegoo Rapid TPU 95A @EC.json" - }, - { - "name": "Elegoo PLA @ECC2", - "sub_path": "filament/ECC2/Elegoo PLA @ECC2.json" - }, - { - "name": "Elegoo PLA @EC2", - "sub_path": "filament/EC2/Elegoo PLA @EC2.json" - }, - { - "name": "Elegoo PLA PRO @ECC2", - "sub_path": "filament/ECC2/Elegoo PLA PRO @ECC2.json" - }, - { - "name": "Elegoo PLA PRO @EC2", - "sub_path": "filament/EC2/Elegoo PLA PRO @EC2.json" - }, - { - "name": "Elegoo PLA+ @ECC2", - "sub_path": "filament/ECC2/Elegoo PLA+ @ECC2.json" - }, - { - "name": "Elegoo PLA+ @EC2", - "sub_path": "filament/EC2/Elegoo PLA+ @EC2.json" - }, - { - "name": "Elegoo Rapid PLA+ @ECC2", - "sub_path": "filament/ECC2/Elegoo Rapid PLA+ @ECC2.json" - }, - { - "name": "Elegoo Rapid PLA+ @EC2", - "sub_path": "filament/EC2/Elegoo Rapid PLA+ @EC2.json" - }, - { - "name": "Elegoo PLA Silk @ECC2", - "sub_path": "filament/ECC2/Elegoo PLA Silk @ECC2.json" - }, - { - "name": "Elegoo PLA Silk @EC2", - "sub_path": "filament/EC2/Elegoo PLA Silk @EC2.json" - }, - { - "name": "Elegoo PLA Matte @ECC2", - "sub_path": "filament/ECC2/Elegoo PLA Matte @ECC2.json" - }, - { - "name": "Elegoo PLA Matte @EC2", - "sub_path": "filament/EC2/Elegoo PLA Matte @EC2.json" - }, - { - "name": "Elegoo PLA-CF @ECC2", - "sub_path": "filament/ECC2/Elegoo PLA-CF @ECC2.json" - }, - { - "name": "Elegoo PLA-CF @EC2", - "sub_path": "filament/EC2/Elegoo PLA-CF @EC2.json" - }, - { - "name": "Elegoo PETG @ECC2", - "sub_path": "filament/ECC2/Elegoo PETG @ECC2.json" - }, - { - "name": "Elegoo PETG @EC2", - "sub_path": "filament/EC2/Elegoo PETG @EC2.json" - }, - { - "name": "Elegoo PETG PRO @ECC2", - "sub_path": "filament/ECC2/Elegoo PETG PRO @ECC2.json" - }, - { - "name": "Elegoo PETG PRO @EC2", - "sub_path": "filament/EC2/Elegoo PETG PRO @EC2.json" - }, - { - "name": "Elegoo Rapid PETG @ECC2", - "sub_path": "filament/ECC2/Elegoo Rapid PETG @ECC2.json" - }, - { - "name": "Elegoo Rapid PETG @EC2", - "sub_path": "filament/EC2/Elegoo Rapid PETG @EC2.json" - }, - { - "name": "Elegoo TPU 95A @ECC2", - "sub_path": "filament/ECC2/Elegoo TPU 95A @ECC2.json" - }, - { - "name": "Elegoo TPU 95A @EC2", - "sub_path": "filament/EC2/Elegoo TPU 95A @EC2.json" - }, - { - "name": "Elegoo ASA @ECC2", - "sub_path": "filament/ECC2/Elegoo ASA @ECC2.json" - }, - { - "name": "Elegoo ASA @EC2", - "sub_path": "filament/EC2/Elegoo ASA @EC2.json" - }, - { - "name": "Elegoo ABS @ECC2", - "sub_path": "filament/ECC2/Elegoo ABS @ECC2.json" - }, - { - "name": "Elegoo ABS @EC2", - "sub_path": "filament/EC2/Elegoo ABS @EC2.json" - }, - { - "name": "Elegoo PLA Galaxy @ECC2", - "sub_path": "filament/ECC2/Elegoo PLA Galaxy @ECC2.json" - }, - { - "name": "Elegoo PLA Galaxy @EC2", - "sub_path": "filament/EC2/Elegoo PLA Galaxy @EC2.json" - }, - { - "name": "Elegoo PLA Basic @ECC2", - "sub_path": "filament/ECC2/Elegoo PLA Basic @ECC2.json" - }, - { - "name": "Elegoo PLA Basic @EC2", - "sub_path": "filament/EC2/Elegoo PLA Basic @EC2.json" - }, - { - "name": "Elegoo PLA Marble @ECC2", - "sub_path": "filament/ECC2/Elegoo PLA Marble @ECC2.json" - }, - { - "name": "Elegoo PLA Marble @EC2", - "sub_path": "filament/EC2/Elegoo PLA Marble @EC2.json" - }, - { - "name": "Elegoo PLA Sparkle @ECC2", - "sub_path": "filament/ECC2/Elegoo PLA Sparkle @ECC2.json" - }, - { - "name": "Elegoo PLA Sparkle @EC2", - "sub_path": "filament/EC2/Elegoo PLA Sparkle @EC2.json" - }, - { - "name": "Elegoo PLA Wood @ECC2", - "sub_path": "filament/ECC2/Elegoo PLA Wood @ECC2.json" - }, - { - "name": "Elegoo PLA Wood @EC2", - "sub_path": "filament/EC2/Elegoo PLA Wood @EC2.json" - }, - { - "name": "Elegoo PAHT-CF @ECC2", - "sub_path": "filament/ECC2/Elegoo PAHT-CF @ECC2.json" - }, - { - "name": "Elegoo PAHT-CF @EC2", - "sub_path": "filament/EC2/Elegoo PAHT-CF @EC2.json" - }, - { - "name": "Elegoo PC @ECC2", - "sub_path": "filament/ECC2/Elegoo PC @ECC2.json" - }, - { - "name": "Elegoo PC @EC2", - "sub_path": "filament/EC2/Elegoo PC @EC2.json" - }, - { - "name": "Elegoo PC-FR @ECC2", - "sub_path": "filament/ECC2/Elegoo PC-FR @ECC2.json" - }, - { - "name": "Elegoo PC-FR @EC2", - "sub_path": "filament/EC2/Elegoo PC-FR @EC2.json" - }, - { - "name": "Elegoo PETG-CF @ECC2", - "sub_path": "filament/ECC2/Elegoo PETG-CF @ECC2.json" - }, - { - "name": "Elegoo PETG-CF @EC2", - "sub_path": "filament/EC2/Elegoo PETG-CF @EC2.json" - }, - { - "name": "Elegoo PETG-GF @ECC2", - "sub_path": "filament/ECC2/Elegoo PETG-GF @ECC2.json" - }, - { - "name": "Elegoo PETG-GF @EC2", - "sub_path": "filament/EC2/Elegoo PETG-GF @EC2.json" - }, - { - "name": "Elegoo PETG Translucent @ECC2", - "sub_path": "filament/ECC2/Elegoo PETG Translucent @ECC2.json" - }, - { - "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" - }, - { - "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" - }, - { - "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" - }, - { - "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" - }, - { - "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" - }, - { - "name": "Elegoo PLA Translucent2 @EC2", - "sub_path": "filament/EC2/Elegoo PLA Translucent2 @EC2.json" - }, - { - "name": "Elegoo Rapid TPU 95A @ECC2", - "sub_path": "filament/ECC2/Elegoo Rapid TPU 95A @ECC2.json" - }, - { - "name": "Elegoo Rapid TPU 95A @EC2", - "sub_path": "filament/EC2/Elegoo Rapid TPU 95A @EC2.json" - }, - { - "name": "Elegoo PLA @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo PLA @EN4 Series.json" - }, - { - "name": "Elegoo PLA PRO @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo PLA PRO @EN4 Series.json" - }, - { - "name": "Elegoo PLA+ @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo PLA+ @EN4 Series.json" - }, - { - "name": "Elegoo Rapid PLA+ @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo Rapid PLA+ @EN4 Series.json" - }, - { - "name": "Elegoo PLA Silk @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo PLA Silk @EN4 Series.json" - }, - { - "name": "Elegoo PLA Matte @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo PLA Matte @EN4 Series.json" - }, - { - "name": "Elegoo PLA-CF @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo PLA-CF @EN4 Series.json" - }, - { - "name": "Elegoo PETG @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo PETG @EN4 Series.json" - }, - { - "name": "Elegoo PETG PRO @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo PETG PRO @EN4 Series.json" - }, - { - "name": "Elegoo Rapid PETG @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo Rapid PETG @EN4 Series.json" - }, - { - "name": "Elegoo TPU 95A @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo TPU 95A @EN4 Series.json" - }, - { - "name": "Elegoo ASA @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo ASA @EN4 Series.json" - }, - { - "name": "Elegoo PLA Galaxy @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo PLA Galaxy @EN4 Series.json" - }, - { - "name": "Elegoo PLA Basic @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo PLA Basic @EN4 Series.json" - }, - { - "name": "Elegoo PLA Marble @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo PLA Marble @EN4 Series.json" - }, - { - "name": "Elegoo PLA Sparkle @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo PLA Sparkle @EN4 Series.json" - }, - { - "name": "Elegoo PLA Wood @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo PLA Wood @EN4 Series.json" - }, - { - "name": "Elegoo PETG-CF @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo PETG-CF @EN4 Series.json" - }, - { - "name": "Elegoo PETG-GF @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo PETG-GF @EN4 Series.json" - }, - { - "name": "Elegoo PETG Translucent @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo PETG Translucent @EN4 Series.json" - }, - { - "name": "Elegoo Rapid TPU 95A @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo Rapid TPU 95A @EN4 Series.json" - }, - { - "name": "Elegoo PLA @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo PLA @EN3 Series.json" - }, - { - "name": "Elegoo PLA PRO @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo PLA PRO @EN3 Series.json" - }, - { - "name": "Elegoo PLA+ @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo PLA+ @EN3 Series.json" - }, - { - "name": "Elegoo Rapid PLA+ @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo Rapid PLA+ @EN3 Series.json" - }, - { - "name": "Elegoo PLA Silk @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo PLA Silk @EN3 Series.json" - }, - { - "name": "Elegoo PLA Matte @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo PLA Matte @EN3 Series.json" - }, - { - "name": "Elegoo PLA-CF @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo PLA-CF @EN3 Series.json" - }, - { - "name": "Elegoo PETG @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo PETG @EN3 Series.json" - }, - { - "name": "Elegoo PETG PRO @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo PETG PRO @EN3 Series.json" - }, - { - "name": "Elegoo Rapid PETG @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo Rapid PETG @EN3 Series.json" - }, - { - "name": "Elegoo TPU 95A @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo TPU 95A @EN3 Series.json" - }, - { - "name": "Elegoo ASA @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo ASA @EN3 Series.json" - }, - { - "name": "Elegoo PLA Galaxy @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo PLA Galaxy @EN3 Series.json" - }, - { - "name": "Elegoo PLA Basic @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo PLA Basic @EN3 Series.json" - }, - { - "name": "Elegoo PLA Marble @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo PLA Marble @EN3 Series.json" - }, - { - "name": "Elegoo PLA Sparkle @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo PLA Sparkle @EN3 Series.json" - }, - { - "name": "Elegoo PLA Wood @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo PLA Wood @EN3 Series.json" - }, - { - "name": "Elegoo PETG-CF @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo PETG-CF @EN3 Series.json" - }, - { - "name": "Elegoo PETG-GF @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo PETG-GF @EN3 Series.json" - }, - { - "name": "Elegoo PETG Translucent @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo PETG Translucent @EN3 Series.json" - }, - { - "name": "Elegoo Rapid TPU 95A @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo Rapid TPU 95A @EN3 Series.json" - }, - { - "name": "Elegoo PLA @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo PLA @EN2 Series.json" - }, - { - "name": "Elegoo PLA PRO @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo PLA PRO @EN2 Series.json" - }, - { - "name": "Elegoo PLA+ @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo PLA+ @EN2 Series.json" - }, - { - "name": "Elegoo Rapid PLA+ @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo Rapid PLA+ @EN2 Series.json" - }, - { - "name": "Elegoo PLA Silk @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo PLA Silk @EN2 Series.json" - }, - { - "name": "Elegoo PLA Matte @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo PLA Matte @EN2 Series.json" - }, - { - "name": "Elegoo PLA-CF @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo PLA-CF @EN2 Series.json" - }, - { - "name": "Elegoo PETG @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo PETG @EN2 Series.json" - }, - { - "name": "Elegoo PETG PRO @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo PETG PRO @EN2 Series.json" - }, - { - "name": "Elegoo Rapid PETG @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo Rapid PETG @EN2 Series.json" - }, - { - "name": "Elegoo ASA @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo ASA @EN2 Series.json" - }, - { - "name": "Elegoo PLA Galaxy @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo PLA Galaxy @EN2 Series.json" - }, - { - "name": "Elegoo PLA Basic @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo PLA Basic @EN2 Series.json" - }, - { - "name": "Elegoo PLA Marble @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo PLA Marble @EN2 Series.json" - }, - { - "name": "Elegoo PLA Sparkle @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo PLA Sparkle @EN2 Series.json" - }, - { - "name": "Elegoo PLA Wood @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo PLA Wood @EN2 Series.json" - }, - { - "name": "Elegoo PETG-CF @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo PETG-CF @EN2 Series.json" - }, - { - "name": "Elegoo PETG-GF @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo PETG-GF @EN2 Series.json" - }, - { - "name": "Elegoo PETG Translucent @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo PETG Translucent @EN2 Series.json" - }, - { - "name": "Elegoo Rapid TPU 95A @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo Rapid TPU 95A @EN2 Series.json" - }, - { - "name": "Elegoo ASA @Elegoo Giga", - "sub_path": "filament/EOSGIGA/Elegoo ASA @Elegoo Giga.json" - }, - { - "name": "Elegoo PETG @Elegoo Giga", - "sub_path": "filament/EOSGIGA/Elegoo PETG @Elegoo Giga.json" - }, - { - "name": "Elegoo PETG PRO @Elegoo Giga", - "sub_path": "filament/EOSGIGA/Elegoo PETG PRO @Elegoo Giga.json" - }, - { - "name": "Elegoo PLA @Elegoo Giga", - "sub_path": "filament/EOSGIGA/Elegoo PLA @Elegoo Giga.json" - }, - { - "name": "Elegoo PLA Matte @Elegoo Giga", - "sub_path": "filament/EOSGIGA/Elegoo PLA Matte @Elegoo Giga.json" - }, - { - "name": "Elegoo Rapid PETG @Elegoo Giga", - "sub_path": "filament/EOSGIGA/Elegoo Rapid PETG @Elegoo Giga.json" - }, - { - "name": "Elegoo Rapid PLA+ @Elegoo Giga", - "sub_path": "filament/EOSGIGA/Elegoo Rapid PLA+ @Elegoo Giga.json" - }, - { - "name": "Elegoo PLA Galaxy @Elegoo Giga", - "sub_path": "filament/EOSGIGA/Elegoo PLA Galaxy @Elegoo Giga.json" - }, - { - "name": "Elegoo PLA Basic @Elegoo Giga", - "sub_path": "filament/EOSGIGA/Elegoo PLA Basic @Elegoo Giga.json" - }, - { - "name": "Elegoo PLA Marble @Elegoo Giga", - "sub_path": "filament/EOSGIGA/Elegoo PLA Marble @Elegoo Giga.json" - }, - { - "name": "Elegoo PLA Sparkle @Elegoo Giga", - "sub_path": "filament/EOSGIGA/Elegoo PLA Sparkle @Elegoo Giga.json" - }, - { - "name": "Elegoo PLA Wood @Elegoo Giga", - "sub_path": "filament/EOSGIGA/Elegoo PLA Wood @Elegoo Giga.json" - }, - { - "name": "Elegoo PETG-CF @Elegoo Giga", - "sub_path": "filament/EOSGIGA/Elegoo PETG-CF @Elegoo Giga.json" - }, - { - "name": "Elegoo PETG-GF @Elegoo Giga", - "sub_path": "filament/EOSGIGA/Elegoo PETG-GF @Elegoo Giga.json" - }, - { - "name": "Elegoo PETG Translucent @Elegoo Giga", - "sub_path": "filament/EOSGIGA/Elegoo PETG Translucent @Elegoo Giga.json" - }, - { - "name": "Elegoo Rapid TPU 95A @Elegoo Giga", - "sub_path": "filament/EOSGIGA/Elegoo Rapid TPU 95A @Elegoo Giga.json" - }, - { - "name": "Generic ABS @Elegoo Centauri", - "sub_path": "filament/Generic/Generic ABS @Elegoo Centauri.json" - }, - { - "name": "Generic ABS @Elegoo", - "sub_path": "filament/Generic/Generic ABS @Elegoo.json" - }, - { - "name": "Generic ABS-CF @Elegoo Centauri", - "sub_path": "filament/Generic/Generic ABS-CF @Elegoo Centauri.json" - }, - { - "name": "Generic ASA @Elegoo", - "sub_path": "filament/Generic/Generic ASA @Elegoo.json" - }, - { - "name": "Generic ASA-CF @Elegoo Centauri", - "sub_path": "filament/Generic/Generic ASA-CF @Elegoo Centauri.json" - }, - { - "name": "Generic PA @Elegoo", - "sub_path": "filament/Generic/Generic PA @Elegoo.json" - }, - { - "name": "Generic PA6-CF @Elegoo", - "sub_path": "filament/Generic/Generic PA6-CF @Elegoo.json" - }, - { - "name": "Generic PC @Elegoo", - "sub_path": "filament/Generic/Generic PC @Elegoo.json" - }, - { - "name": "Generic PC-CF @Elegoo", - "sub_path": "filament/Generic/Generic PC-CF @Elegoo.json" - }, - { - "name": "Generic PET @Elegoo Centauri", - "sub_path": "filament/Generic/Generic PET @Elegoo Centauri.json" - }, - { - "name": "Generic PET-CF @Elegoo Centauri", - "sub_path": "filament/Generic/Generic PET-CF @Elegoo Centauri.json" - }, - { - "name": "Generic PETG @Elegoo", - "sub_path": "filament/Generic/Generic PETG @Elegoo.json" - }, - { - "name": "Generic PETG PRO @Elegoo", - "sub_path": "filament/Generic/Generic PETG PRO @Elegoo.json" - }, - { - "name": "Generic PETG-CF @Elegoo Centauri", - "sub_path": "filament/Generic/Generic PETG-CF @Elegoo Centauri.json" - }, - { - "name": "Generic PLA @Elegoo Centauri", - "sub_path": "filament/Generic/Generic PLA @Elegoo Centauri.json" - }, - { - "name": "Generic PLA @Elegoo", - "sub_path": "filament/Generic/Generic PLA @Elegoo.json" - }, - { - "name": "Generic PLA Matte @Elegoo", - "sub_path": "filament/Generic/Generic PLA Matte @Elegoo.json" - } - ], - "machine_list": [ - { - "name": "fdm_machine_common", - "sub_path": "machine/fdm_machine_common.json" - }, - { - "name": "fdm_elegoo_common", - "sub_path": "machine/fdm_elegoo_common.json" - }, - { - "name": "fdm_elegoo_3dp_001_common", - "sub_path": "machine/fdm_elegoo_3dp_001_common.json" - }, - { - "name": "Elegoo Centauri Carbon 0.4 nozzle", - "sub_path": "machine/ECC/Elegoo Centauri Carbon 0.4 nozzle.json" - }, - { - "name": "Elegoo Centauri Carbon 0.2 nozzle", - "sub_path": "machine/ECC/Elegoo Centauri Carbon 0.2 nozzle.json" - }, - { - "name": "Elegoo Centauri Carbon 0.6 nozzle", - "sub_path": "machine/ECC/Elegoo Centauri Carbon 0.6 nozzle.json" - }, - { - "name": "Elegoo Centauri Carbon 0.8 nozzle", - "sub_path": "machine/ECC/Elegoo Centauri Carbon 0.8 nozzle.json" - }, - { - "name": "Elegoo Centauri 0.4 nozzle", - "sub_path": "machine/EC/Elegoo Centauri 0.4 nozzle.json" - }, - { - "name": "Elegoo Centauri 0.2 nozzle", - "sub_path": "machine/EC/Elegoo Centauri 0.2 nozzle.json" - }, - { - "name": "Elegoo Centauri 0.6 nozzle", - "sub_path": "machine/EC/Elegoo Centauri 0.6 nozzle.json" - }, - { - "name": "Elegoo Centauri 0.8 nozzle", - "sub_path": "machine/EC/Elegoo Centauri 0.8 nozzle.json" - }, - { - "name": "Elegoo Centauri Carbon 2 0.4 nozzle", - "sub_path": "machine/ECC2/Elegoo Centauri Carbon 2 0.4 nozzle.json" - }, - { - "name": "Elegoo Centauri 2 0.4 nozzle", - "sub_path": "machine/EC2/Elegoo Centauri 2 0.4 nozzle.json" - }, - { - "name": "Elegoo Centauri Carbon 2 0.2 nozzle", - "sub_path": "machine/ECC2/Elegoo Centauri Carbon 2 0.2 nozzle.json" - }, - { - "name": "Elegoo Centauri 2 0.2 nozzle", - "sub_path": "machine/EC2/Elegoo Centauri 2 0.2 nozzle.json" - }, - { - "name": "Elegoo Centauri Carbon 2 0.6 nozzle", - "sub_path": "machine/ECC2/Elegoo Centauri Carbon 2 0.6 nozzle.json" - }, - { - "name": "Elegoo Centauri 2 0.6 nozzle", - "sub_path": "machine/EC2/Elegoo Centauri 2 0.6 nozzle.json" - }, - { - "name": "Elegoo Centauri Carbon 2 0.8 nozzle", - "sub_path": "machine/ECC2/Elegoo Centauri Carbon 2 0.8 nozzle.json" - }, - { - "name": "Elegoo Centauri 2 0.8 nozzle", - "sub_path": "machine/EC2/Elegoo Centauri 2 0.8 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 0.4 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 0.4 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 0.2 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 0.2 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 0.6 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 0.6 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 0.8 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 0.8 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 1.0 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 1.0 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 Pro 0.4 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Pro 0.4 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 Pro 0.2 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Pro 0.2 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 Pro 0.6 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Pro 0.6 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 Pro 0.8 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Pro 0.8 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 Pro 1.0 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Pro 1.0 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 Plus 0.4 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Plus 0.4 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 Plus 0.2 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Plus 0.2 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 Plus 0.6 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Plus 0.6 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 Plus 0.8 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Plus 0.8 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 Plus 1.0 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Plus 1.0 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 Max 0.4 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Max 0.4 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 Max 0.2 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Max 0.2 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 Max 0.6 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Max 0.6 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 Max 0.8 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Max 0.8 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 Max 1.0 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Max 1.0 nozzle.json" - }, - { - "name": "Elegoo OrangeStorm Giga 0.4 nozzle", - "sub_path": "machine/EOSGIGA/Elegoo OrangeStorm Giga 0.4 nozzle.json" - }, - { - "name": "Elegoo OrangeStorm Giga 0.6 nozzle", - "sub_path": "machine/EOSGIGA/Elegoo OrangeStorm Giga 0.6 nozzle.json" - }, - { - "name": "Elegoo OrangeStorm Giga 0.8 nozzle", - "sub_path": "machine/EOSGIGA/Elegoo OrangeStorm Giga 0.8 nozzle.json" - }, - { - "name": "Elegoo OrangeStorm Giga 1.0 nozzle", - "sub_path": "machine/EOSGIGA/Elegoo OrangeStorm Giga 1.0 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 Pro 0.4 nozzle", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Pro 0.4 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 Pro 0.2 nozzle", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Pro 0.2 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 Pro 0.6 nozzle", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Pro 0.6 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 Pro 0.8 nozzle", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Pro 0.8 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 Pro 1.0 nozzle", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Pro 1.0 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 Plus 0.4 nozzle", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Plus 0.4 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 Plus 0.2 nozzle", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Plus 0.2 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 Plus 0.6 nozzle", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Plus 0.6 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 Plus 0.8 nozzle", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Plus 0.8 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 Plus 1.0 nozzle", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Plus 1.0 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 Max 0.4 nozzle", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Max 0.4 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 Max 0.2 nozzle", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Max 0.2 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 Max 0.6 nozzle", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Max 0.6 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 Max 0.8 nozzle", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Max 0.8 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 Max 1.0 nozzle", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Max 1.0 nozzle.json" - }, - { - "name": "Elegoo Neptune 2 0.4 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 2 0.4 nozzle.json" - }, - { - "name": "Elegoo Neptune 2 0.6 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 2 0.6 nozzle.json" - }, - { - "name": "Elegoo Neptune 2 0.8 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 2 0.8 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 0.4 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 3 0.4 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 0.6 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 3 0.6 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 0.8 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 3 0.8 nozzle.json" - }, - { - "name": "Elegoo Neptune X 0.4 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune X 0.4 nozzle.json" - }, - { - "name": "Elegoo Neptune X 0.6 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune X 0.6 nozzle.json" - }, - { - "name": "Elegoo Neptune X 0.8 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune X 0.8 nozzle.json" - }, - { - "name": "Elegoo Neptune 2S 0.4 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 2S 0.4 nozzle.json" - }, - { - "name": "Elegoo Neptune 2S 0.6 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 2S 0.6 nozzle.json" - }, - { - "name": "Elegoo Neptune 2S 0.8 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 2S 0.8 nozzle.json" - }, - { - "name": "Elegoo Neptune 2D 0.4 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 2D 0.4 nozzle.json" - }, - { - "name": "Elegoo Neptune 2D 0.6 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 2D 0.6 nozzle.json" - }, - { - "name": "Elegoo Neptune 2D 0.8 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 2D 0.8 nozzle.json" - }, - { - "name": "Elegoo Neptune 0.4 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 0.4 nozzle.json" - }, - { - "name": "Elegoo Neptune 0.6 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 0.6 nozzle.json" - }, - { - "name": "Elegoo Neptune 0.8 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 0.8 nozzle.json" - } - ] -} \ No newline at end of file + "name": "Elegoo", + "version": "02.04.00.08", + "force_update": "0", + "description": "Elegoo configurations", + "machine_model_list": [ + { + "name": "Elegoo Centauri", + "sub_path": "machine/EC/Elegoo Centauri.json" + }, + { + "name": "Elegoo Centauri 2", + "sub_path": "machine/EC2/Elegoo Centauri 2.json" + }, + { + "name": "Elegoo Centauri Carbon", + "sub_path": "machine/ECC/Elegoo Centauri Carbon.json" + }, + { + "name": "Elegoo Centauri Carbon 2", + "sub_path": "machine/ECC2/Elegoo Centauri Carbon 2.json" + }, + { + "name": "Elegoo Neptune", + "sub_path": "machine/EN2SERIES/Elegoo Neptune.json" + }, + { + "name": "Elegoo Neptune 2", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 2.json" + }, + { + "name": "Elegoo Neptune 2D", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 2D.json" + }, + { + "name": "Elegoo Neptune 2S", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 2S.json" + }, + { + "name": "Elegoo Neptune 3", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 3.json" + }, + { + "name": "Elegoo Neptune 3 Max", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Max.json" + }, + { + "name": "Elegoo Neptune 3 Plus", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Plus.json" + }, + { + "name": "Elegoo Neptune 3 Pro", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Pro.json" + }, + { + "name": "Elegoo Neptune 4", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4.json" + }, + { + "name": "Elegoo Neptune 4 Max", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Max.json" + }, + { + "name": "Elegoo Neptune 4 Plus", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Plus.json" + }, + { + "name": "Elegoo Neptune 4 Pro", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Pro.json" + }, + { + "name": "Elegoo Neptune X", + "sub_path": "machine/EN2SERIES/Elegoo Neptune X.json" + }, + { + "name": "Elegoo OrangeStorm Giga", + "sub_path": "machine/EOSGIGA/Elegoo OrangeStorm Giga.json" + } + ], + "process_list": [ + { + "name": "fdm_process_common", + "sub_path": "process/fdm_process_common.json" + }, + { + "name": "fdm_process_elegoo_common", + "sub_path": "process/fdm_process_elegoo_common.json" + }, + { + "name": "fdm_process_elegoo_02010", + "sub_path": "process/fdm_process_elegoo_02010.json" + }, + { + "name": "fdm_process_elegoo_04020", + "sub_path": "process/fdm_process_elegoo_04020.json" + }, + { + "name": "fdm_process_elegoo_06030", + "sub_path": "process/fdm_process_elegoo_06030.json" + }, + { + "name": "fdm_process_elegoo_08040", + "sub_path": "process/fdm_process_elegoo_08040.json" + }, + { + "name": "fdm_process_elegoo_10050", + "sub_path": "process/fdm_process_elegoo_10050.json" + }, + { + "name": "0.10mm Standard @Elegoo C 0.2 nozzle", + "sub_path": "process/EC/0.10mm Standard @Elegoo C 0.2 nozzle.json" + }, + { + "name": "0.10mm Standard @Elegoo C2 0.2 nozzle", + "sub_path": "process/EC2/0.10mm Standard @Elegoo C2 0.2 nozzle.json" + }, + { + "name": "0.10mm Standard @Elegoo CC 0.2 nozzle", + "sub_path": "process/ECC/0.10mm Standard @Elegoo CC 0.2 nozzle.json" + }, + { + "name": "0.10mm Standard @Elegoo CC2 0.2 nozzle", + "sub_path": "process/ECC2/0.10mm Standard @Elegoo CC2 0.2 nozzle.json" + }, + { + "name": "0.10mm Standard @Elegoo N3Max 0.2 nozzle", + "sub_path": "process/EN3SERIES/0.10mm Standard @Elegoo N3Max 0.2 nozzle.json" + }, + { + "name": "0.10mm Standard @Elegoo N3Plus 0.2 nozzle", + "sub_path": "process/EN3SERIES/0.10mm Standard @Elegoo N3Plus 0.2 nozzle.json" + }, + { + "name": "0.10mm Standard @Elegoo N3Pro 0.2 nozzle", + "sub_path": "process/EN3SERIES/0.10mm Standard @Elegoo N3Pro 0.2 nozzle.json" + }, + { + "name": "0.10mm Standard @Elegoo N4 0.2 nozzle", + "sub_path": "process/EN4SERIES/0.10mm Standard @Elegoo N4 0.2 nozzle.json" + }, + { + "name": "0.10mm Standard @Elegoo N4Max 0.2 nozzle", + "sub_path": "process/EN4SERIES/0.10mm Standard @Elegoo N4Max 0.2 nozzle.json" + }, + { + "name": "0.10mm Standard @Elegoo N4Plus 0.2 nozzle", + "sub_path": "process/EN4SERIES/0.10mm Standard @Elegoo N4Plus 0.2 nozzle.json" + }, + { + "name": "0.10mm Standard @Elegoo N4Pro 0.2 nozzle", + "sub_path": "process/EN4SERIES/0.10mm Standard @Elegoo N4Pro 0.2 nozzle.json" + }, + { + "name": "0.20mm Standard @Elegoo C 0.4 nozzle", + "sub_path": "process/EC/0.20mm Standard @Elegoo C 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Elegoo C2 0.4 nozzle", + "sub_path": "process/EC2/0.20mm Standard @Elegoo C2 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Elegoo CC 0.4 nozzle", + "sub_path": "process/ECC/0.20mm Standard @Elegoo CC 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Elegoo CC2 0.4 nozzle", + "sub_path": "process/ECC2/0.20mm Standard @Elegoo CC2 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Elegoo Giga 0.4 nozzle", + "sub_path": "process/EOSGIGA/0.20mm Standard @Elegoo Giga 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Elegoo N3Max 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.20mm Standard @Elegoo N3Max 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Elegoo N3Plus 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.20mm Standard @Elegoo N3Plus 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Elegoo N3Pro 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.20mm Standard @Elegoo N3Pro 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Elegoo N4 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.20mm Standard @Elegoo N4 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Elegoo N4Max 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.20mm Standard @Elegoo N4Max 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Elegoo N4Plus 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.20mm Standard @Elegoo N4Plus 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Elegoo N4Pro 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.20mm Standard @Elegoo N4Pro 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Elegoo Neptune 0.4 nozzle", + "sub_path": "process/EN2SERIES/0.20mm Standard @Elegoo Neptune 0.4 nozzle.json" + }, + { + "name": "0.30mm Standard @Elegoo C 0.6 nozzle", + "sub_path": "process/EC/0.30mm Standard @Elegoo C 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Elegoo C2 0.6 nozzle", + "sub_path": "process/EC2/0.30mm Standard @Elegoo C2 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Elegoo CC 0.6 nozzle", + "sub_path": "process/ECC/0.30mm Standard @Elegoo CC 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Elegoo CC2 0.6 nozzle", + "sub_path": "process/ECC2/0.30mm Standard @Elegoo CC2 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Elegoo Giga 0.6 nozzle", + "sub_path": "process/EOSGIGA/0.30mm Standard @Elegoo Giga 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Elegoo N3Max 0.6 nozzle", + "sub_path": "process/EN3SERIES/0.30mm Standard @Elegoo N3Max 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Elegoo N3Plus 0.6 nozzle", + "sub_path": "process/EN3SERIES/0.30mm Standard @Elegoo N3Plus 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Elegoo N3Pro 0.6 nozzle", + "sub_path": "process/EN3SERIES/0.30mm Standard @Elegoo N3Pro 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Elegoo N4 0.6 nozzle", + "sub_path": "process/EN4SERIES/0.30mm Standard @Elegoo N4 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Elegoo N4Max 0.6 nozzle", + "sub_path": "process/EN4SERIES/0.30mm Standard @Elegoo N4Max 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Elegoo N4Plus 0.6 nozzle", + "sub_path": "process/EN4SERIES/0.30mm Standard @Elegoo N4Plus 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Elegoo N4Pro 0.6 nozzle", + "sub_path": "process/EN4SERIES/0.30mm Standard @Elegoo N4Pro 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Elegoo Neptune 0.6 nozzle", + "sub_path": "process/EN2SERIES/0.30mm Standard @Elegoo Neptune 0.6 nozzle.json" + }, + { + "name": "0.40mm Standard @Elegoo C 0.8 nozzle", + "sub_path": "process/EC/0.40mm Standard @Elegoo C 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Elegoo C2 0.8 nozzle", + "sub_path": "process/EC2/0.40mm Standard @Elegoo C2 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Elegoo CC 0.8 nozzle", + "sub_path": "process/ECC/0.40mm Standard @Elegoo CC 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Elegoo CC2 0.8 nozzle", + "sub_path": "process/ECC2/0.40mm Standard @Elegoo CC2 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Elegoo Giga 0.8 nozzle", + "sub_path": "process/EOSGIGA/0.40mm Standard @Elegoo Giga 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Elegoo N3Max 0.8 nozzle", + "sub_path": "process/EN3SERIES/0.40mm Standard @Elegoo N3Max 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Elegoo N3Plus 0.8 nozzle", + "sub_path": "process/EN3SERIES/0.40mm Standard @Elegoo N3Plus 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Elegoo N3Pro 0.8 nozzle", + "sub_path": "process/EN3SERIES/0.40mm Standard @Elegoo N3Pro 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Elegoo N4 0.8 nozzle", + "sub_path": "process/EN4SERIES/0.40mm Standard @Elegoo N4 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Elegoo N4Max 0.8 nozzle", + "sub_path": "process/EN4SERIES/0.40mm Standard @Elegoo N4Max 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Elegoo N4Plus 0.8 nozzle", + "sub_path": "process/EN4SERIES/0.40mm Standard @Elegoo N4Plus 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Elegoo N4Pro 0.8 nozzle", + "sub_path": "process/EN4SERIES/0.40mm Standard @Elegoo N4Pro 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Elegoo Neptune 0.8 nozzle", + "sub_path": "process/EN2SERIES/0.40mm Standard @Elegoo Neptune 0.8 nozzle.json" + }, + { + "name": "0.50mm Standard @Elegoo Giga 1.0 nozzle", + "sub_path": "process/EOSGIGA/0.50mm Standard @Elegoo Giga 1.0 nozzle.json" + }, + { + "name": "0.50mm Standard @Elegoo N3Max 1.0 nozzle", + "sub_path": "process/EN3SERIES/0.50mm Standard @Elegoo N3Max 1.0 nozzle.json" + }, + { + "name": "0.50mm Standard @Elegoo N3Plus 1.0 nozzle", + "sub_path": "process/EN3SERIES/0.50mm Standard @Elegoo N3Plus 1.0 nozzle.json" + }, + { + "name": "0.50mm Standard @Elegoo N3Pro 1.0 nozzle", + "sub_path": "process/EN3SERIES/0.50mm Standard @Elegoo N3Pro 1.0 nozzle.json" + }, + { + "name": "0.50mm Standard @Elegoo N4 1.0 nozzle", + "sub_path": "process/EN4SERIES/0.50mm Standard @Elegoo N4 1.0 nozzle.json" + }, + { + "name": "0.50mm Standard @Elegoo N4Max 1.0 nozzle", + "sub_path": "process/EN4SERIES/0.50mm Standard @Elegoo N4Max 1.0 nozzle.json" + }, + { + "name": "0.50mm Standard @Elegoo N4Plus 1.0 nozzle", + "sub_path": "process/EN4SERIES/0.50mm Standard @Elegoo N4Plus 1.0 nozzle.json" + }, + { + "name": "0.50mm Standard @Elegoo N4Pro 1.0 nozzle", + "sub_path": "process/EN4SERIES/0.50mm Standard @Elegoo N4Pro 1.0 nozzle.json" + }, + { + "name": "0.08mm Optimal @Elegoo C 0.2 nozzle", + "sub_path": "process/EC/0.08mm Optimal @Elegoo C 0.2 nozzle.json" + }, + { + "name": "0.12mm Draft @Elegoo C 0.2 nozzle", + "sub_path": "process/EC/0.12mm Draft @Elegoo C 0.2 nozzle.json" + }, + { + "name": "0.14mm Extra Draft @Elegoo C 0.2 nozzle", + "sub_path": "process/EC/0.14mm Extra Draft @Elegoo C 0.2 nozzle.json" + }, + { + "name": "0.08mm Optimal @Elegoo C2 0.2 nozzle", + "sub_path": "process/EC2/0.08mm Optimal @Elegoo C2 0.2 nozzle.json" + }, + { + "name": "0.12mm Draft @Elegoo C2 0.2 nozzle", + "sub_path": "process/EC2/0.12mm Draft @Elegoo C2 0.2 nozzle.json" + }, + { + "name": "0.14mm Extra Draft @Elegoo C2 0.2 nozzle", + "sub_path": "process/EC2/0.14mm Extra Draft @Elegoo C2 0.2 nozzle.json" + }, + { + "name": "0.08mm Optimal @Elegoo CC 0.2 nozzle", + "sub_path": "process/ECC/0.08mm Optimal @Elegoo CC 0.2 nozzle.json" + }, + { + "name": "0.12mm Draft @Elegoo CC 0.2 nozzle", + "sub_path": "process/ECC/0.12mm Draft @Elegoo CC 0.2 nozzle.json" + }, + { + "name": "0.14mm Extra Draft @Elegoo CC 0.2 nozzle", + "sub_path": "process/ECC/0.14mm Extra Draft @Elegoo CC 0.2 nozzle.json" + }, + { + "name": "0.08mm Optimal @Elegoo CC2 0.2 nozzle", + "sub_path": "process/ECC2/0.08mm Optimal @Elegoo CC2 0.2 nozzle.json" + }, + { + "name": "0.12mm Draft @Elegoo CC2 0.2 nozzle", + "sub_path": "process/ECC2/0.12mm Draft @Elegoo CC2 0.2 nozzle.json" + }, + { + "name": "0.14mm Extra Draft @Elegoo CC2 0.2 nozzle", + "sub_path": "process/ECC2/0.14mm Extra Draft @Elegoo CC2 0.2 nozzle.json" + }, + { + "name": "0.08mm Optimal @Elegoo N3Max 0.2 nozzle", + "sub_path": "process/EN3SERIES/0.08mm Optimal @Elegoo N3Max 0.2 nozzle.json" + }, + { + "name": "0.12mm Draft @Elegoo N3Max 0.2 nozzle", + "sub_path": "process/EN3SERIES/0.12mm Draft @Elegoo N3Max 0.2 nozzle.json" + }, + { + "name": "0.08mm Optimal @Elegoo N3Plus 0.2 nozzle", + "sub_path": "process/EN3SERIES/0.08mm Optimal @Elegoo N3Plus 0.2 nozzle.json" + }, + { + "name": "0.12mm Draft @Elegoo N3Plus 0.2 nozzle", + "sub_path": "process/EN3SERIES/0.12mm Draft @Elegoo N3Plus 0.2 nozzle.json" + }, + { + "name": "0.08mm Optimal @Elegoo N3Pro 0.2 nozzle", + "sub_path": "process/EN3SERIES/0.08mm Optimal @Elegoo N3Pro 0.2 nozzle.json" + }, + { + "name": "0.12mm Draft @Elegoo N3Pro 0.2 nozzle", + "sub_path": "process/EN3SERIES/0.12mm Draft @Elegoo N3Pro 0.2 nozzle.json" + }, + { + "name": "0.08mm Optimal @Elegoo N4 0.2 nozzle", + "sub_path": "process/EN4SERIES/0.08mm Optimal @Elegoo N4 0.2 nozzle.json" + }, + { + "name": "0.12mm Draft @Elegoo N4 0.2 nozzle", + "sub_path": "process/EN4SERIES/0.12mm Draft @Elegoo N4 0.2 nozzle.json" + }, + { + "name": "0.08mm Optimal @Elegoo N4Max 0.2 nozzle", + "sub_path": "process/EN4SERIES/0.08mm Optimal @Elegoo N4Max 0.2 nozzle.json" + }, + { + "name": "0.12mm Draft @Elegoo N4Max 0.2 nozzle", + "sub_path": "process/EN4SERIES/0.12mm Draft @Elegoo N4Max 0.2 nozzle.json" + }, + { + "name": "0.08mm Optimal @Elegoo N4Plus 0.2 nozzle", + "sub_path": "process/EN4SERIES/0.08mm Optimal @Elegoo N4Plus 0.2 nozzle.json" + }, + { + "name": "0.12mm Draft @Elegoo N4Plus 0.2 nozzle", + "sub_path": "process/EN4SERIES/0.12mm Draft @Elegoo N4Plus 0.2 nozzle.json" + }, + { + "name": "0.08mm Optimal @Elegoo N4Pro 0.2 nozzle", + "sub_path": "process/EN4SERIES/0.08mm Optimal @Elegoo N4Pro 0.2 nozzle.json" + }, + { + "name": "0.12mm Draft @Elegoo N4Pro 0.2 nozzle", + "sub_path": "process/EN4SERIES/0.12mm Draft @Elegoo N4Pro 0.2 nozzle.json" + }, + { + "name": "0.12mm Fine @Elegoo C 0.4 nozzle", + "sub_path": "process/EC/0.12mm Fine @Elegoo C 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Elegoo C 0.4 nozzle", + "sub_path": "process/EC/0.16mm Optimal @Elegoo C 0.4 nozzle.json" + }, + { + "name": "0.20mm Strength @Elegoo C 0.4 nozzle", + "sub_path": "process/EC/0.20mm Strength @Elegoo C 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Elegoo C 0.4 nozzle", + "sub_path": "process/EC/0.24mm Draft @Elegoo C 0.4 nozzle.json" + }, + { + "name": "0.28mm Extra Draft @Elegoo C 0.4 nozzle", + "sub_path": "process/EC/0.28mm Extra Draft @Elegoo C 0.4 nozzle.json" + }, + { + "name": "0.12mm Fine @Elegoo C2 0.4 nozzle", + "sub_path": "process/EC2/0.12mm Fine @Elegoo C2 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Elegoo C2 0.4 nozzle", + "sub_path": "process/EC2/0.16mm Optimal @Elegoo C2 0.4 nozzle.json" + }, + { + "name": "0.20mm Strength @Elegoo C2 0.4 nozzle", + "sub_path": "process/EC2/0.20mm Strength @Elegoo C2 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Elegoo C2 0.4 nozzle", + "sub_path": "process/EC2/0.24mm Draft @Elegoo C2 0.4 nozzle.json" + }, + { + "name": "0.28mm Extra Draft @Elegoo C2 0.4 nozzle", + "sub_path": "process/EC2/0.28mm Extra Draft @Elegoo C2 0.4 nozzle.json" + }, + { + "name": "0.12mm Fine @Elegoo CC 0.4 nozzle", + "sub_path": "process/ECC/0.12mm Fine @Elegoo CC 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Elegoo CC 0.4 nozzle", + "sub_path": "process/ECC/0.16mm Optimal @Elegoo CC 0.4 nozzle.json" + }, + { + "name": "0.20mm Strength @Elegoo CC 0.4 nozzle", + "sub_path": "process/ECC/0.20mm Strength @Elegoo CC 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Elegoo CC 0.4 nozzle", + "sub_path": "process/ECC/0.24mm Draft @Elegoo CC 0.4 nozzle.json" + }, + { + "name": "0.28mm Extra Draft @Elegoo CC 0.4 nozzle", + "sub_path": "process/ECC/0.28mm Extra Draft @Elegoo CC 0.4 nozzle.json" + }, + { + "name": "0.12mm Fine @Elegoo CC2 0.4 nozzle", + "sub_path": "process/ECC2/0.12mm Fine @Elegoo CC2 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Elegoo CC2 0.4 nozzle", + "sub_path": "process/ECC2/0.16mm Optimal @Elegoo CC2 0.4 nozzle.json" + }, + { + "name": "0.20mm Strength @Elegoo CC2 0.4 nozzle", + "sub_path": "process/ECC2/0.20mm Strength @Elegoo CC2 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Elegoo CC2 0.4 nozzle", + "sub_path": "process/ECC2/0.24mm Draft @Elegoo CC2 0.4 nozzle.json" + }, + { + "name": "0.28mm Extra Draft @Elegoo CC2 0.4 nozzle", + "sub_path": "process/ECC2/0.28mm Extra Draft @Elegoo CC2 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Elegoo Giga 0.4 nozzle", + "sub_path": "process/EOSGIGA/0.16mm Optimal @Elegoo Giga 0.4 nozzle.json" + }, + { + "name": "0.20mm Strength @Elegoo Giga 0.4 nozzle", + "sub_path": "process/EOSGIGA/0.20mm Strength @Elegoo Giga 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Elegoo Giga 0.4 nozzle", + "sub_path": "process/EOSGIGA/0.24mm Draft @Elegoo Giga 0.4 nozzle.json" + }, + { + "name": "0.28mm Extra Draft @Elegoo Giga 0.4 nozzle", + "sub_path": "process/EOSGIGA/0.28mm Extra Draft @Elegoo Giga 0.4 nozzle.json" + }, + { + "name": "0.12mm Fine @Elegoo N3Max 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.12mm Fine @Elegoo N3Max 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Elegoo N3Max 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.16mm Optimal @Elegoo N3Max 0.4 nozzle.json" + }, + { + "name": "0.20mm Strength @Elegoo N3Max 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.20mm Strength @Elegoo N3Max 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Elegoo N3Max 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.24mm Draft @Elegoo N3Max 0.4 nozzle.json" + }, + { + "name": "0.28mm Extra Draft @Elegoo N3Max 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.28mm Extra Draft @Elegoo N3Max 0.4 nozzle.json" + }, + { + "name": "0.12mm Fine @Elegoo N3Plus 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.12mm Fine @Elegoo N3Plus 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Elegoo N3Plus 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.16mm Optimal @Elegoo N3Plus 0.4 nozzle.json" + }, + { + "name": "0.20mm Strength @Elegoo N3Plus 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.20mm Strength @Elegoo N3Plus 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Elegoo N3Plus 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.24mm Draft @Elegoo N3Plus 0.4 nozzle.json" + }, + { + "name": "0.28mm Extra Draft @Elegoo N3Plus 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.28mm Extra Draft @Elegoo N3Plus 0.4 nozzle.json" + }, + { + "name": "0.12mm Fine @Elegoo N3Pro 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.12mm Fine @Elegoo N3Pro 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Elegoo N3Pro 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.16mm Optimal @Elegoo N3Pro 0.4 nozzle.json" + }, + { + "name": "0.20mm Strength @Elegoo N3Pro 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.20mm Strength @Elegoo N3Pro 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Elegoo N3Pro 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.24mm Draft @Elegoo N3Pro 0.4 nozzle.json" + }, + { + "name": "0.28mm Extra Draft @Elegoo N3Pro 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.28mm Extra Draft @Elegoo N3Pro 0.4 nozzle.json" + }, + { + "name": "0.12mm Fine @Elegoo N4 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.12mm Fine @Elegoo N4 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Elegoo N4 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.16mm Optimal @Elegoo N4 0.4 nozzle.json" + }, + { + "name": "0.20mm Strength @Elegoo N4 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.20mm Strength @Elegoo N4 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Elegoo N4 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.24mm Draft @Elegoo N4 0.4 nozzle.json" + }, + { + "name": "0.28mm Extra Draft @Elegoo N4 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.28mm Extra Draft @Elegoo N4 0.4 nozzle.json" + }, + { + "name": "0.12mm Fine @Elegoo N4Max 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.12mm Fine @Elegoo N4Max 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Elegoo N4Max 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.16mm Optimal @Elegoo N4Max 0.4 nozzle.json" + }, + { + "name": "0.20mm Strength @Elegoo N4Max 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.20mm Strength @Elegoo N4Max 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Elegoo N4Max 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.24mm Draft @Elegoo N4Max 0.4 nozzle.json" + }, + { + "name": "0.28mm Extra Draft @Elegoo N4Max 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.28mm Extra Draft @Elegoo N4Max 0.4 nozzle.json" + }, + { + "name": "0.12mm Fine @Elegoo N4Plus 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.12mm Fine @Elegoo N4Plus 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Elegoo N4Plus 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.16mm Optimal @Elegoo N4Plus 0.4 nozzle.json" + }, + { + "name": "0.20mm Strength @Elegoo N4Plus 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.20mm Strength @Elegoo N4Plus 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Elegoo N4Plus 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.24mm Draft @Elegoo N4Plus 0.4 nozzle.json" + }, + { + "name": "0.28mm Extra Draft @Elegoo N4Plus 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.28mm Extra Draft @Elegoo N4Plus 0.4 nozzle.json" + }, + { + "name": "0.12mm Fine @Elegoo N4Pro 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.12mm Fine @Elegoo N4Pro 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Elegoo N4Pro 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.16mm Optimal @Elegoo N4Pro 0.4 nozzle.json" + }, + { + "name": "0.20mm Strength @Elegoo N4Pro 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.20mm Strength @Elegoo N4Pro 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Elegoo N4Pro 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.24mm Draft @Elegoo N4Pro 0.4 nozzle.json" + }, + { + "name": "0.28mm Extra Draft @Elegoo N4Pro 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.28mm Extra Draft @Elegoo N4Pro 0.4 nozzle.json" + }, + { + "name": "0.12mm Fine @Elegoo Neptune 0.4 nozzle", + "sub_path": "process/EN2SERIES/0.12mm Fine @Elegoo Neptune 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Elegoo Neptune 0.4 nozzle", + "sub_path": "process/EN2SERIES/0.16mm Optimal @Elegoo Neptune 0.4 nozzle.json" + }, + { + "name": "0.20mm Strength @Elegoo Neptune 0.4 nozzle", + "sub_path": "process/EN2SERIES/0.20mm Strength @Elegoo Neptune 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Elegoo Neptune 0.4 nozzle", + "sub_path": "process/EN2SERIES/0.24mm Draft @Elegoo Neptune 0.4 nozzle.json" + }, + { + "name": "0.28mm Extra Draft @Elegoo Neptune 0.4 nozzle", + "sub_path": "process/EN2SERIES/0.28mm Extra Draft @Elegoo Neptune 0.4 nozzle.json" + }, + { + "name": "0.18mm Fine @Elegoo C 0.6 nozzle", + "sub_path": "process/EC/0.18mm Fine @Elegoo C 0.6 nozzle.json" + }, + { + "name": "0.24mm Optimal @Elegoo C 0.6 nozzle", + "sub_path": "process/EC/0.24mm Optimal @Elegoo C 0.6 nozzle.json" + }, + { + "name": "0.30mm Strength @Elegoo C 0.6 nozzle", + "sub_path": "process/EC/0.30mm Strength @Elegoo C 0.6 nozzle.json" + }, + { + "name": "0.36mm Draft @Elegoo C 0.6 nozzle", + "sub_path": "process/EC/0.36mm Draft @Elegoo C 0.6 nozzle.json" + }, + { + "name": "0.42mm Extra Draft @Elegoo C 0.6 nozzle", + "sub_path": "process/EC/0.42mm Extra Draft @Elegoo C 0.6 nozzle.json" + }, + { + "name": "0.18mm Fine @Elegoo C2 0.6 nozzle", + "sub_path": "process/EC2/0.18mm Fine @Elegoo C2 0.6 nozzle.json" + }, + { + "name": "0.24mm Optimal @Elegoo C2 0.6 nozzle", + "sub_path": "process/EC2/0.24mm Optimal @Elegoo C2 0.6 nozzle.json" + }, + { + "name": "0.30mm Strength @Elegoo C2 0.6 nozzle", + "sub_path": "process/EC2/0.30mm Strength @Elegoo C2 0.6 nozzle.json" + }, + { + "name": "0.36mm Draft @Elegoo C2 0.6 nozzle", + "sub_path": "process/EC2/0.36mm Draft @Elegoo C2 0.6 nozzle.json" + }, + { + "name": "0.42mm Extra Draft @Elegoo C2 0.6 nozzle", + "sub_path": "process/EC2/0.42mm Extra Draft @Elegoo C2 0.6 nozzle.json" + }, + { + "name": "0.18mm Fine @Elegoo CC 0.6 nozzle", + "sub_path": "process/ECC/0.18mm Fine @Elegoo CC 0.6 nozzle.json" + }, + { + "name": "0.24mm Optimal @Elegoo CC 0.6 nozzle", + "sub_path": "process/ECC/0.24mm Optimal @Elegoo CC 0.6 nozzle.json" + }, + { + "name": "0.30mm Strength @Elegoo CC 0.6 nozzle", + "sub_path": "process/ECC/0.30mm Strength @Elegoo CC 0.6 nozzle.json" + }, + { + "name": "0.36mm Draft @Elegoo CC 0.6 nozzle", + "sub_path": "process/ECC/0.36mm Draft @Elegoo CC 0.6 nozzle.json" + }, + { + "name": "0.42mm Extra Draft @Elegoo CC 0.6 nozzle", + "sub_path": "process/ECC/0.42mm Extra Draft @Elegoo CC 0.6 nozzle.json" + }, + { + "name": "0.18mm Fine @Elegoo CC2 0.6 nozzle", + "sub_path": "process/ECC2/0.18mm Fine @Elegoo CC2 0.6 nozzle.json" + }, + { + "name": "0.24mm Optimal @Elegoo CC2 0.6 nozzle", + "sub_path": "process/ECC2/0.24mm Optimal @Elegoo CC2 0.6 nozzle.json" + }, + { + "name": "0.30mm Strength @Elegoo CC2 0.6 nozzle", + "sub_path": "process/ECC2/0.30mm Strength @Elegoo CC2 0.6 nozzle.json" + }, + { + "name": "0.36mm Draft @Elegoo CC2 0.6 nozzle", + "sub_path": "process/ECC2/0.36mm Draft @Elegoo CC2 0.6 nozzle.json" + }, + { + "name": "0.42mm Extra Draft @Elegoo CC2 0.6 nozzle", + "sub_path": "process/ECC2/0.42mm Extra Draft @Elegoo CC2 0.6 nozzle.json" + }, + { + "name": "0.18mm Fine @Elegoo Giga 0.6 nozzle", + "sub_path": "process/EOSGIGA/0.18mm Fine @Elegoo Giga 0.6 nozzle.json" + }, + { + "name": "0.24mm Optimal @Elegoo Giga 0.6 nozzle", + "sub_path": "process/EOSGIGA/0.24mm Optimal @Elegoo Giga 0.6 nozzle.json" + }, + { + "name": "0.30mm Strength @Elegoo Giga 0.6 nozzle", + "sub_path": "process/EOSGIGA/0.30mm Strength @Elegoo Giga 0.6 nozzle.json" + }, + { + "name": "0.36mm Draft @Elegoo Giga 0.6 nozzle", + "sub_path": "process/EOSGIGA/0.36mm Draft @Elegoo Giga 0.6 nozzle.json" + }, + { + "name": "0.42mm Extra Draft @Elegoo Giga 0.6 nozzle", + "sub_path": "process/EOSGIGA/0.42mm Extra Draft @Elegoo Giga 0.6 nozzle.json" + }, + { + "name": "0.24mm Optimal @Elegoo N3Max 0.6 nozzle", + "sub_path": "process/EN3SERIES/0.24mm Optimal @Elegoo N3Max 0.6 nozzle.json" + }, + { + "name": "0.36mm Draft @Elegoo N3Max 0.6 nozzle", + "sub_path": "process/EN3SERIES/0.36mm Draft @Elegoo N3Max 0.6 nozzle.json" + }, + { + "name": "0.42mm Extra Draft @Elegoo N3Max 0.6 nozzle", + "sub_path": "process/EN3SERIES/0.42mm Extra Draft @Elegoo N3Max 0.6 nozzle.json" + }, + { + "name": "0.24mm Optimal @Elegoo N3Plus 0.6 nozzle", + "sub_path": "process/EN3SERIES/0.24mm Optimal @Elegoo N3Plus 0.6 nozzle.json" + }, + { + "name": "0.36mm Draft @Elegoo N3Plus 0.6 nozzle", + "sub_path": "process/EN3SERIES/0.36mm Draft @Elegoo N3Plus 0.6 nozzle.json" + }, + { + "name": "0.42mm Extra Draft @Elegoo N3Plus 0.6 nozzle", + "sub_path": "process/EN3SERIES/0.42mm Extra Draft @Elegoo N3Plus 0.6 nozzle.json" + }, + { + "name": "0.24mm Optimal @Elegoo N3Pro 0.6 nozzle", + "sub_path": "process/EN3SERIES/0.24mm Optimal @Elegoo N3Pro 0.6 nozzle.json" + }, + { + "name": "0.36mm Draft @Elegoo N3Pro 0.6 nozzle", + "sub_path": "process/EN3SERIES/0.36mm Draft @Elegoo N3Pro 0.6 nozzle.json" + }, + { + "name": "0.42mm Extra Draft @Elegoo N3Pro 0.6 nozzle", + "sub_path": "process/EN3SERIES/0.42mm Extra Draft @Elegoo N3Pro 0.6 nozzle.json" + }, + { + "name": "0.24mm Optimal @Elegoo N4 0.6 nozzle", + "sub_path": "process/EN4SERIES/0.24mm Optimal @Elegoo N4 0.6 nozzle.json" + }, + { + "name": "0.36mm Draft @Elegoo N4 0.6 nozzle", + "sub_path": "process/EN4SERIES/0.36mm Draft @Elegoo N4 0.6 nozzle.json" + }, + { + "name": "0.42mm Extra Draft @Elegoo N4 0.6 nozzle", + "sub_path": "process/EN4SERIES/0.42mm Extra Draft @Elegoo N4 0.6 nozzle.json" + }, + { + "name": "0.24mm Optimal @Elegoo N4Max 0.6 nozzle", + "sub_path": "process/EN4SERIES/0.24mm Optimal @Elegoo N4Max 0.6 nozzle.json" + }, + { + "name": "0.36mm Draft @Elegoo N4Max 0.6 nozzle", + "sub_path": "process/EN4SERIES/0.36mm Draft @Elegoo N4Max 0.6 nozzle.json" + }, + { + "name": "0.42mm Extra Draft @Elegoo N4Max 0.6 nozzle", + "sub_path": "process/EN4SERIES/0.42mm Extra Draft @Elegoo N4Max 0.6 nozzle.json" + }, + { + "name": "0.24mm Optimal @Elegoo N4Plus 0.6 nozzle", + "sub_path": "process/EN4SERIES/0.24mm Optimal @Elegoo N4Plus 0.6 nozzle.json" + }, + { + "name": "0.36mm Draft @Elegoo N4Plus 0.6 nozzle", + "sub_path": "process/EN4SERIES/0.36mm Draft @Elegoo N4Plus 0.6 nozzle.json" + }, + { + "name": "0.42mm Extra Draft @Elegoo N4Plus 0.6 nozzle", + "sub_path": "process/EN4SERIES/0.42mm Extra Draft @Elegoo N4Plus 0.6 nozzle.json" + }, + { + "name": "0.24mm Optimal @Elegoo N4Pro 0.6 nozzle", + "sub_path": "process/EN4SERIES/0.24mm Optimal @Elegoo N4Pro 0.6 nozzle.json" + }, + { + "name": "0.36mm Draft @Elegoo N4Pro 0.6 nozzle", + "sub_path": "process/EN4SERIES/0.36mm Draft @Elegoo N4Pro 0.6 nozzle.json" + }, + { + "name": "0.42mm Extra Draft @Elegoo N4Pro 0.6 nozzle", + "sub_path": "process/EN4SERIES/0.42mm Extra Draft @Elegoo N4Pro 0.6 nozzle.json" + }, + { + "name": "0.24mm Optimal @Elegoo Neptune 0.6 nozzle", + "sub_path": "process/EN2SERIES/0.24mm Optimal @Elegoo Neptune 0.6 nozzle.json" + }, + { + "name": "0.36mm Draft @Elegoo Neptune 0.6 nozzle", + "sub_path": "process/EN2SERIES/0.36mm Draft @Elegoo Neptune 0.6 nozzle.json" + }, + { + "name": "0.42mm Extra Draft @Elegoo Neptune 0.6 nozzle", + "sub_path": "process/EN2SERIES/0.42mm Extra Draft @Elegoo Neptune 0.6 nozzle.json" + }, + { + "name": "0.16mm Extra Fine @Elegoo C 0.8 nozzle", + "sub_path": "process/EC/0.16mm Extra Fine @Elegoo C 0.8 nozzle.json" + }, + { + "name": "0.24mm Fine @Elegoo C 0.8 nozzle", + "sub_path": "process/EC/0.24mm Fine @Elegoo C 0.8 nozzle.json" + }, + { + "name": "0.32mm Optimal @Elegoo C 0.8 nozzle", + "sub_path": "process/EC/0.32mm Optimal @Elegoo C 0.8 nozzle.json" + }, + { + "name": "0.48mm Draft @Elegoo C 0.8 nozzle", + "sub_path": "process/EC/0.48mm Draft @Elegoo C 0.8 nozzle.json" + }, + { + "name": "0.16mm Extra Fine @Elegoo C2 0.8 nozzle", + "sub_path": "process/EC2/0.16mm Extra Fine @Elegoo C2 0.8 nozzle.json" + }, + { + "name": "0.24mm Fine @Elegoo C2 0.8 nozzle", + "sub_path": "process/EC2/0.24mm Fine @Elegoo C2 0.8 nozzle.json" + }, + { + "name": "0.32mm Optimal @Elegoo C2 0.8 nozzle", + "sub_path": "process/EC2/0.32mm Optimal @Elegoo C2 0.8 nozzle.json" + }, + { + "name": "0.48mm Draft @Elegoo C2 0.8 nozzle", + "sub_path": "process/EC2/0.48mm Draft @Elegoo C2 0.8 nozzle.json" + }, + { + "name": "0.16mm Extra Fine @Elegoo CC 0.8 nozzle", + "sub_path": "process/ECC/0.16mm Extra Fine @Elegoo CC 0.8 nozzle.json" + }, + { + "name": "0.24mm Fine @Elegoo CC 0.8 nozzle", + "sub_path": "process/ECC/0.24mm Fine @Elegoo CC 0.8 nozzle.json" + }, + { + "name": "0.32mm Optimal @Elegoo CC 0.8 nozzle", + "sub_path": "process/ECC/0.32mm Optimal @Elegoo CC 0.8 nozzle.json" + }, + { + "name": "0.48mm Draft @Elegoo CC 0.8 nozzle", + "sub_path": "process/ECC/0.48mm Draft @Elegoo CC 0.8 nozzle.json" + }, + { + "name": "0.16mm Extra Fine @Elegoo CC2 0.8 nozzle", + "sub_path": "process/ECC2/0.16mm Extra Fine @Elegoo CC2 0.8 nozzle.json" + }, + { + "name": "0.24mm Fine @Elegoo CC2 0.8 nozzle", + "sub_path": "process/ECC2/0.24mm Fine @Elegoo CC2 0.8 nozzle.json" + }, + { + "name": "0.32mm Optimal @Elegoo CC2 0.8 nozzle", + "sub_path": "process/ECC2/0.32mm Optimal @Elegoo CC2 0.8 nozzle.json" + }, + { + "name": "0.48mm Draft @Elegoo CC2 0.8 nozzle", + "sub_path": "process/ECC2/0.48mm Draft @Elegoo CC2 0.8 nozzle.json" + }, + { + "name": "0.24mm Fine @Elegoo Giga 0.8 nozzle", + "sub_path": "process/EOSGIGA/0.24mm Fine @Elegoo Giga 0.8 nozzle.json" + }, + { + "name": "0.32mm Optimal @Elegoo Giga 0.8 nozzle", + "sub_path": "process/EOSGIGA/0.32mm Optimal @Elegoo Giga 0.8 nozzle.json" + }, + { + "name": "0.48mm Draft @Elegoo Giga 0.8 nozzle", + "sub_path": "process/EOSGIGA/0.48mm Draft @Elegoo Giga 0.8 nozzle.json" + }, + { + "name": "0.56mm Extra Draft @Elegoo Giga 0.8 nozzle", + "sub_path": "process/EOSGIGA/0.56mm Extra Draft @Elegoo Giga 0.8 nozzle.json" + }, + { + "name": "0.24mm Fine @Elegoo N3Max 0.8 nozzle", + "sub_path": "process/EN3SERIES/0.24mm Fine @Elegoo N3Max 0.8 nozzle.json" + }, + { + "name": "0.32mm Optimal @Elegoo N3Max 0.8 nozzle", + "sub_path": "process/EN3SERIES/0.32mm Optimal @Elegoo N3Max 0.8 nozzle.json" + }, + { + "name": "0.48mm Draft @Elegoo N3Max 0.8 nozzle", + "sub_path": "process/EN3SERIES/0.48mm Draft @Elegoo N3Max 0.8 nozzle.json" + }, + { + "name": "0.24mm Fine @Elegoo N3Plus 0.8 nozzle", + "sub_path": "process/EN3SERIES/0.24mm Fine @Elegoo N3Plus 0.8 nozzle.json" + }, + { + "name": "0.32mm Optimal @Elegoo N3Plus 0.8 nozzle", + "sub_path": "process/EN3SERIES/0.32mm Optimal @Elegoo N3Plus 0.8 nozzle.json" + }, + { + "name": "0.48mm Draft @Elegoo N3Plus 0.8 nozzle", + "sub_path": "process/EN3SERIES/0.48mm Draft @Elegoo N3Plus 0.8 nozzle.json" + }, + { + "name": "0.24mm Fine @Elegoo N3Pro 0.8 nozzle", + "sub_path": "process/EN3SERIES/0.24mm Fine @Elegoo N3Pro 0.8 nozzle.json" + }, + { + "name": "0.32mm Optimal @Elegoo N3Pro 0.8 nozzle", + "sub_path": "process/EN3SERIES/0.32mm Optimal @Elegoo N3Pro 0.8 nozzle.json" + }, + { + "name": "0.48mm Draft @Elegoo N3Pro 0.8 nozzle", + "sub_path": "process/EN3SERIES/0.48mm Draft @Elegoo N3Pro 0.8 nozzle.json" + }, + { + "name": "0.24mm Fine @Elegoo N4 0.8 nozzle", + "sub_path": "process/EN4SERIES/0.24mm Fine @Elegoo N4 0.8 nozzle.json" + }, + { + "name": "0.32mm Optimal @Elegoo N4 0.8 nozzle", + "sub_path": "process/EN4SERIES/0.32mm Optimal @Elegoo N4 0.8 nozzle.json" + }, + { + "name": "0.48mm Draft @Elegoo N4 0.8 nozzle", + "sub_path": "process/EN4SERIES/0.48mm Draft @Elegoo N4 0.8 nozzle.json" + }, + { + "name": "0.24mm Fine @Elegoo N4Max 0.8 nozzle", + "sub_path": "process/EN4SERIES/0.24mm Fine @Elegoo N4Max 0.8 nozzle.json" + }, + { + "name": "0.32mm Optimal @Elegoo N4Max 0.8 nozzle", + "sub_path": "process/EN4SERIES/0.32mm Optimal @Elegoo N4Max 0.8 nozzle.json" + }, + { + "name": "0.48mm Draft @Elegoo N4Max 0.8 nozzle", + "sub_path": "process/EN4SERIES/0.48mm Draft @Elegoo N4Max 0.8 nozzle.json" + }, + { + "name": "0.24mm Fine @Elegoo N4Plus 0.8 nozzle", + "sub_path": "process/EN4SERIES/0.24mm Fine @Elegoo N4Plus 0.8 nozzle.json" + }, + { + "name": "0.32mm Optimal @Elegoo N4Plus 0.8 nozzle", + "sub_path": "process/EN4SERIES/0.32mm Optimal @Elegoo N4Plus 0.8 nozzle.json" + }, + { + "name": "0.48mm Draft @Elegoo N4Plus 0.8 nozzle", + "sub_path": "process/EN4SERIES/0.48mm Draft @Elegoo N4Plus 0.8 nozzle.json" + }, + { + "name": "0.24mm Fine @Elegoo N4Pro 0.8 nozzle", + "sub_path": "process/EN4SERIES/0.24mm Fine @Elegoo N4Pro 0.8 nozzle.json" + }, + { + "name": "0.32mm Optimal @Elegoo N4Pro 0.8 nozzle", + "sub_path": "process/EN4SERIES/0.32mm Optimal @Elegoo N4Pro 0.8 nozzle.json" + }, + { + "name": "0.48mm Draft @Elegoo N4Pro 0.8 nozzle", + "sub_path": "process/EN4SERIES/0.48mm Draft @Elegoo N4Pro 0.8 nozzle.json" + }, + { + "name": "0.24mm Fine @Elegoo Neptune 0.8 nozzle", + "sub_path": "process/EN2SERIES/0.24mm Fine @Elegoo Neptune 0.8 nozzle.json" + }, + { + "name": "0.32mm Optimal @Elegoo Neptune 0.8 nozzle", + "sub_path": "process/EN2SERIES/0.32mm Optimal @Elegoo Neptune 0.8 nozzle.json" + }, + { + "name": "0.30mm Fine @Elegoo Giga 1.0 nozzle", + "sub_path": "process/EOSGIGA/0.30mm Fine @Elegoo Giga 1.0 nozzle.json" + }, + { + "name": "0.40mm Optimal @Elegoo Giga 1.0 nozzle", + "sub_path": "process/EOSGIGA/0.40mm Optimal @Elegoo Giga 1.0 nozzle.json" + }, + { + "name": "0.60mm Draft @Elegoo Giga 1.0 nozzle", + "sub_path": "process/EOSGIGA/0.60mm Draft @Elegoo Giga 1.0 nozzle.json" + }, + { + "name": "0.30mm Fine @Elegoo N3Max 1.0 nozzle", + "sub_path": "process/EN3SERIES/0.30mm Fine @Elegoo N3Max 1.0 nozzle.json" + }, + { + "name": "0.40mm Optimal @Elegoo N3Max 1.0 nozzle", + "sub_path": "process/EN3SERIES/0.40mm Optimal @Elegoo N3Max 1.0 nozzle.json" + }, + { + "name": "0.60mm Draft @Elegoo N3Max 1.0 nozzle", + "sub_path": "process/EN3SERIES/0.60mm Draft @Elegoo N3Max 1.0 nozzle.json" + }, + { + "name": "0.30mm Fine @Elegoo N3Plus 1.0 nozzle", + "sub_path": "process/EN3SERIES/0.30mm Fine @Elegoo N3Plus 1.0 nozzle.json" + }, + { + "name": "0.40mm Optimal @Elegoo N3Plus 1.0 nozzle", + "sub_path": "process/EN3SERIES/0.40mm Optimal @Elegoo N3Plus 1.0 nozzle.json" + }, + { + "name": "0.60mm Draft @Elegoo N3Plus 1.0 nozzle", + "sub_path": "process/EN3SERIES/0.60mm Draft @Elegoo N3Plus 1.0 nozzle.json" + }, + { + "name": "0.30mm Fine @Elegoo N3Pro 1.0 nozzle", + "sub_path": "process/EN3SERIES/0.30mm Fine @Elegoo N3Pro 1.0 nozzle.json" + }, + { + "name": "0.40mm Optimal @Elegoo N3Pro 1.0 nozzle", + "sub_path": "process/EN3SERIES/0.40mm Optimal @Elegoo N3Pro 1.0 nozzle.json" + }, + { + "name": "0.60mm Draft @Elegoo N3Pro 1.0 nozzle", + "sub_path": "process/EN3SERIES/0.60mm Draft @Elegoo N3Pro 1.0 nozzle.json" + }, + { + "name": "0.30mm Fine @Elegoo N4 1.0 nozzle", + "sub_path": "process/EN4SERIES/0.30mm Fine @Elegoo N4 1.0 nozzle.json" + }, + { + "name": "0.40mm Optimal @Elegoo N4 1.0 nozzle", + "sub_path": "process/EN4SERIES/0.40mm Optimal @Elegoo N4 1.0 nozzle.json" + }, + { + "name": "0.60mm Draft @Elegoo N4 1.0 nozzle", + "sub_path": "process/EN4SERIES/0.60mm Draft @Elegoo N4 1.0 nozzle.json" + }, + { + "name": "0.30mm Fine @Elegoo N4Max 1.0 nozzle", + "sub_path": "process/EN4SERIES/0.30mm Fine @Elegoo N4Max 1.0 nozzle.json" + }, + { + "name": "0.40mm Optimal @Elegoo N4Max 1.0 nozzle", + "sub_path": "process/EN4SERIES/0.40mm Optimal @Elegoo N4Max 1.0 nozzle.json" + }, + { + "name": "0.60mm Draft @Elegoo N4Max 1.0 nozzle", + "sub_path": "process/EN4SERIES/0.60mm Draft @Elegoo N4Max 1.0 nozzle.json" + }, + { + "name": "0.30mm Fine @Elegoo N4Plus 1.0 nozzle", + "sub_path": "process/EN4SERIES/0.30mm Fine @Elegoo N4Plus 1.0 nozzle.json" + }, + { + "name": "0.40mm Optimal @Elegoo N4Plus 1.0 nozzle", + "sub_path": "process/EN4SERIES/0.40mm Optimal @Elegoo N4Plus 1.0 nozzle.json" + }, + { + "name": "0.60mm Draft @Elegoo N4Plus 1.0 nozzle", + "sub_path": "process/EN4SERIES/0.60mm Draft @Elegoo N4Plus 1.0 nozzle.json" + }, + { + "name": "0.30mm Fine @Elegoo N4Pro 1.0 nozzle", + "sub_path": "process/EN4SERIES/0.30mm Fine @Elegoo N4Pro 1.0 nozzle.json" + }, + { + "name": "0.40mm Optimal @Elegoo N4Pro 1.0 nozzle", + "sub_path": "process/EN4SERIES/0.40mm Optimal @Elegoo N4Pro 1.0 nozzle.json" + }, + { + "name": "0.60mm Draft @Elegoo N4Pro 1.0 nozzle", + "sub_path": "process/EN4SERIES/0.60mm Draft @Elegoo N4Pro 1.0 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_hips", + "sub_path": "filament/fdm_filament_hips.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_ppa", + "sub_path": "filament/fdm_filament_ppa.json" + }, + { + "name": "fdm_filament_pps", + "sub_path": "filament/fdm_filament_pps.json" + }, + { + "name": "fdm_filament_pva", + "sub_path": "filament/fdm_filament_pva.json" + }, + { + "name": "fdm_filament_tpu", + "sub_path": "filament/fdm_filament_tpu.json" + }, + { + "name": "Elegoo ABS @base", + "sub_path": "filament/BASE/Elegoo ABS @base.json" + }, + { + "name": "Generic ABS @base", + "sub_path": "filament/BASE/Generic ABS @base.json" + }, + { + "name": "Elegoo ASA @base", + "sub_path": "filament/BASE/Elegoo ASA @base.json" + }, + { + "name": "Generic ASA @base", + "sub_path": "filament/BASE/Generic ASA @base.json" + }, + { + "name": "Elegoo PAHT-CF @base", + "sub_path": "filament/BASE/Elegoo PAHT-CF @base.json" + }, + { + "name": "Generic PA @base", + "sub_path": "filament/BASE/Generic PA @base.json" + }, + { + "name": "Elegoo PC @base", + "sub_path": "filament/BASE/Elegoo PC @base.json" + }, + { + "name": "Generic PC @base", + "sub_path": "filament/BASE/Generic PC @base.json" + }, + { + "name": "Elegoo PETG @base", + "sub_path": "filament/BASE/Elegoo PETG @base.json" + }, + { + "name": "Generic PET @base", + "sub_path": "filament/BASE/Generic PET @base.json" + }, + { + "name": "Generic PETG @base", + "sub_path": "filament/BASE/Generic PETG @base.json" + }, + { + "name": "Elegoo PLA @base", + "sub_path": "filament/BASE/Elegoo PLA @base.json" + }, + { + "name": "Generic PLA @base", + "sub_path": "filament/BASE/Generic PLA @base.json" + }, + { + "name": "Elegoo TPU 95A @base", + "sub_path": "filament/BASE/Elegoo TPU 95A @base.json" + }, + { + "name": "Elegoo ABS @0.2 nozzle", + "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo ABS @0.2 nozzle.json" + }, + { + "name": "Elegoo ABS @EC", + "sub_path": "filament/EC/Elegoo ABS @EC.json" + }, + { + "name": "Elegoo ABS @EC2", + "sub_path": "filament/EC2/Elegoo ABS @EC2.json" + }, + { + "name": "Elegoo ABS @ECC", + "sub_path": "filament/ECC/Elegoo ABS @ECC.json" + }, + { + "name": "Elegoo ABS @ECC2", + "sub_path": "filament/ECC2/Elegoo ABS @ECC2.json" + }, + { + "name": "Generic ABS @Elegoo", + "sub_path": "filament/Generic/Generic ABS @Elegoo.json" + }, + { + "name": "Generic ABS @Elegoo Centauri", + "sub_path": "filament/Generic/Generic ABS @Elegoo Centauri.json" + }, + { + "name": "Generic ABS-CF @Elegoo Centauri", + "sub_path": "filament/Generic/Generic ABS-CF @Elegoo Centauri.json" + }, + { + "name": "Elegoo ASA @0.2 nozzle", + "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo ASA @0.2 nozzle.json" + }, + { + "name": "Elegoo ASA @EC", + "sub_path": "filament/EC/Elegoo ASA @EC.json" + }, + { + "name": "Elegoo ASA @EC2", + "sub_path": "filament/EC2/Elegoo ASA @EC2.json" + }, + { + "name": "Elegoo ASA @ECC", + "sub_path": "filament/ECC/Elegoo ASA @ECC.json" + }, + { + "name": "Elegoo ASA @ECC2", + "sub_path": "filament/ECC2/Elegoo ASA @ECC2.json" + }, + { + "name": "Elegoo ASA @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo ASA @EN2 Series.json" + }, + { + "name": "Elegoo ASA @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo ASA @EN3 Series.json" + }, + { + "name": "Elegoo ASA @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo ASA @EN4 Series.json" + }, + { + "name": "Elegoo ASA @Elegoo Giga", + "sub_path": "filament/EOSGIGA/Elegoo ASA @Elegoo Giga.json" + }, + { + "name": "Elegoo ASA-CF @base", + "sub_path": "filament/BASE/Elegoo ASA-CF @base.json" + }, + { + "name": "Generic ASA @Elegoo", + "sub_path": "filament/Generic/Generic ASA @Elegoo.json" + }, + { + "name": "Generic ASA-CF @Elegoo Centauri", + "sub_path": "filament/Generic/Generic ASA-CF @Elegoo Centauri.json" + }, + { + "name": "Elegoo PAHT-CF @EC", + "sub_path": "filament/EC/Elegoo PAHT-CF @EC.json" + }, + { + "name": "Elegoo PAHT-CF @EC2", + "sub_path": "filament/EC2/Elegoo PAHT-CF @EC2.json" + }, + { + "name": "Elegoo PAHT-CF @ECC", + "sub_path": "filament/ECC/Elegoo PAHT-CF @ECC.json" + }, + { + "name": "Elegoo PAHT-CF @ECC2", + "sub_path": "filament/ECC2/Elegoo PAHT-CF @ECC2.json" + }, + { + "name": "Generic PA @Elegoo", + "sub_path": "filament/Generic/Generic PA @Elegoo.json" + }, + { + "name": "Generic PA6-CF @Elegoo", + "sub_path": "filament/Generic/Generic PA6-CF @Elegoo.json" + }, + { + "name": "Elegoo PC @0.2 nozzle", + "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PC @0.2 nozzle.json" + }, + { + "name": "Elegoo PC @EC", + "sub_path": "filament/EC/Elegoo PC @EC.json" + }, + { + "name": "Elegoo PC @EC2", + "sub_path": "filament/EC2/Elegoo PC @EC2.json" + }, + { + "name": "Elegoo PC @ECC", + "sub_path": "filament/ECC/Elegoo PC @ECC.json" + }, + { + "name": "Elegoo PC @ECC2", + "sub_path": "filament/ECC2/Elegoo PC @ECC2.json" + }, + { + "name": "Elegoo PC-FR @base", + "sub_path": "filament/BASE/Elegoo PC-FR @base.json" + }, + { + "name": "Generic PC @Elegoo", + "sub_path": "filament/Generic/Generic PC @Elegoo.json" + }, + { + "name": "Generic PC-CF @Elegoo", + "sub_path": "filament/Generic/Generic PC-CF @Elegoo.json" + }, + { + "name": "Elegoo PET-CF @base", + "sub_path": "filament/BASE/Elegoo PET-CF @base.json" + }, + { + "name": "Elegoo PETG @0.2 nozzle", + "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PETG @0.2 nozzle.json" + }, + { + "name": "Elegoo PETG @EC", + "sub_path": "filament/EC/Elegoo PETG @EC.json" + }, + { + "name": "Elegoo PETG @EC2", + "sub_path": "filament/EC2/Elegoo PETG @EC2.json" + }, + { + "name": "Elegoo PETG @ECC", + "sub_path": "filament/ECC/Elegoo PETG @ECC.json" + }, + { + "name": "Elegoo PETG @ECC2", + "sub_path": "filament/ECC2/Elegoo PETG @ECC2.json" + }, + { + "name": "Elegoo PETG @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo PETG @EN2 Series.json" + }, + { + "name": "Elegoo PETG @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo PETG @EN3 Series.json" + }, + { + "name": "Elegoo PETG @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo PETG @EN4 Series.json" + }, + { + "name": "Elegoo PETG @Elegoo Giga", + "sub_path": "filament/EOSGIGA/Elegoo PETG @Elegoo Giga.json" + }, + { + "name": "Elegoo PETG HF @base", + "sub_path": "filament/BASE/Elegoo PETG HF @base.json" + }, + { + "name": "Elegoo PETG PRO @base", + "sub_path": "filament/BASE/Elegoo PETG PRO @base.json" + }, + { + "name": "Elegoo PETG Translucent @base", + "sub_path": "filament/BASE/Elegoo PETG Translucent @base.json" + }, + { + "name": "Elegoo PETG-CF @base", + "sub_path": "filament/BASE/Elegoo PETG-CF @base.json" + }, + { + "name": "Elegoo PETG-GF @base", + "sub_path": "filament/BASE/Elegoo PETG-GF @base.json" + }, + { + "name": "Elegoo Rapid PETG @base", + "sub_path": "filament/BASE/Elegoo Rapid PETG @base.json" + }, + { + "name": "Generic PET @Elegoo Centauri", + "sub_path": "filament/Generic/Generic PET @Elegoo Centauri.json" + }, + { + "name": "Generic PET-CF @Elegoo Centauri", + "sub_path": "filament/Generic/Generic PET-CF @Elegoo Centauri.json" + }, + { + "name": "Generic PETG @Elegoo", + "sub_path": "filament/Generic/Generic PETG @Elegoo.json" + }, + { + "name": "Generic PETG PRO @Elegoo", + "sub_path": "filament/Generic/Generic PETG PRO @Elegoo.json" + }, + { + "name": "Generic PETG-CF @Elegoo Centauri", + "sub_path": "filament/Generic/Generic PETG-CF @Elegoo Centauri.json" + }, + { + "name": "Elegoo PLA @0.2 nozzle", + "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PLA @0.2 nozzle.json" + }, + { + "name": "Elegoo PLA @EC", + "sub_path": "filament/EC/Elegoo PLA @EC.json" + }, + { + "name": "Elegoo PLA @EC2", + "sub_path": "filament/EC2/Elegoo PLA @EC2.json" + }, + { + "name": "Elegoo PLA @ECC", + "sub_path": "filament/ECC/Elegoo PLA @ECC.json" + }, + { + "name": "Elegoo PLA @ECC2", + "sub_path": "filament/ECC2/Elegoo PLA @ECC2.json" + }, + { + "name": "Elegoo PLA @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo PLA @EN2 Series.json" + }, + { + "name": "Elegoo PLA @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo PLA @EN3 Series.json" + }, + { + "name": "Elegoo PLA @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo PLA @EN4 Series.json" + }, + { + "name": "Elegoo PLA @Elegoo Giga", + "sub_path": "filament/EOSGIGA/Elegoo PLA @Elegoo Giga.json" + }, + { + "name": "Elegoo PLA Basic @base", + "sub_path": "filament/BASE/Elegoo PLA Basic @base.json" + }, + { + "name": "Elegoo PLA Galaxy @base", + "sub_path": "filament/BASE/Elegoo PLA Galaxy @base.json" + }, + { + "name": "Elegoo PLA Glow @base", + "sub_path": "filament/BASE/Elegoo PLA Glow @base.json" + }, + { + "name": "Elegoo PLA Marble @base", + "sub_path": "filament/BASE/Elegoo PLA Marble @base.json" + }, + { + "name": "Elegoo PLA Matte @base", + "sub_path": "filament/BASE/Elegoo PLA Matte @base.json" + }, + { + "name": "Elegoo PLA PRO @base", + "sub_path": "filament/BASE/Elegoo PLA PRO @base.json" + }, + { + "name": "Elegoo PLA Silk @base", + "sub_path": "filament/BASE/Elegoo PLA Silk @base.json" + }, + { + "name": "Elegoo PLA Sparkle @base", + "sub_path": "filament/BASE/Elegoo PLA Sparkle @base.json" + }, + { + "name": "Elegoo PLA Translucent2 @base", + "sub_path": "filament/BASE/Elegoo PLA Translucent2 @base.json" + }, + { + "name": "Elegoo PLA Wood @base", + "sub_path": "filament/BASE/Elegoo PLA Wood @base.json" + }, + { + "name": "Elegoo PLA+ @base", + "sub_path": "filament/BASE/Elegoo PLA+ @base.json" + }, + { + "name": "Elegoo PLA-CF @base", + "sub_path": "filament/BASE/Elegoo PLA-CF @base.json" + }, + { + "name": "Elegoo Rapid PLA+ @base", + "sub_path": "filament/BASE/Elegoo Rapid PLA+ @base.json" + }, + { + "name": "Generic PLA @Elegoo", + "sub_path": "filament/Generic/Generic PLA @Elegoo.json" + }, + { + "name": "Generic PLA @Elegoo Centauri", + "sub_path": "filament/Generic/Generic PLA @Elegoo Centauri.json" + }, + { + "name": "Generic PLA Matte @Elegoo", + "sub_path": "filament/Generic/Generic PLA Matte @Elegoo.json" + }, + { + "name": "Elegoo Rapid TPU 95A @base", + "sub_path": "filament/BASE/Elegoo Rapid TPU 95A @base.json" + }, + { + "name": "Elegoo TPU 95A @EC", + "sub_path": "filament/EC/Elegoo TPU 95A @EC.json" + }, + { + "name": "Elegoo TPU 95A @EC2", + "sub_path": "filament/EC2/Elegoo TPU 95A @EC2.json" + }, + { + "name": "Elegoo TPU 95A @ECC", + "sub_path": "filament/ECC/Elegoo TPU 95A @ECC.json" + }, + { + "name": "Elegoo TPU 95A @ECC2", + "sub_path": "filament/ECC2/Elegoo TPU 95A @ECC2.json" + }, + { + "name": "Elegoo TPU 95A @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo TPU 95A @EN3 Series.json" + }, + { + "name": "Elegoo TPU 95A @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo TPU 95A @EN4 Series.json" + }, + { + "name": "Elegoo ASA-CF @EC2", + "sub_path": "filament/EC2/Elegoo ASA-CF @EC2.json" + }, + { + "name": "Elegoo ASA-CF @ECC2", + "sub_path": "filament/ECC2/Elegoo ASA-CF @ECC2.json" + }, + { + "name": "Elegoo PC-FR @0.2 nozzle", + "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PC-FR @0.2 nozzle.json" + }, + { + "name": "Elegoo PC-FR @EC", + "sub_path": "filament/EC/Elegoo PC-FR @EC.json" + }, + { + "name": "Elegoo PC-FR @EC2", + "sub_path": "filament/EC2/Elegoo PC-FR @EC2.json" + }, + { + "name": "Elegoo PC-FR @ECC", + "sub_path": "filament/ECC/Elegoo PC-FR @ECC.json" + }, + { + "name": "Elegoo PC-FR @ECC2", + "sub_path": "filament/ECC2/Elegoo PC-FR @ECC2.json" + }, + { + "name": "Elegoo PET-CF @EC2", + "sub_path": "filament/EC2/Elegoo PET-CF @EC2.json" + }, + { + "name": "Elegoo PET-CF @ECC2", + "sub_path": "filament/ECC2/Elegoo PET-CF @ECC2.json" + }, + { + "name": "Elegoo PETG HF @EC2", + "sub_path": "filament/EC2/Elegoo PETG HF @EC2.json" + }, + { + "name": "Elegoo PETG HF @ECC2", + "sub_path": "filament/ECC2/Elegoo PETG HF @ECC2.json" + }, + { + "name": "Elegoo PETG PRO @0.2 nozzle", + "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PETG PRO @0.2 nozzle.json" + }, + { + "name": "Elegoo PETG PRO @EC", + "sub_path": "filament/EC/Elegoo PETG PRO @EC.json" + }, + { + "name": "Elegoo PETG PRO @EC2", + "sub_path": "filament/EC2/Elegoo PETG PRO @EC2.json" + }, + { + "name": "Elegoo PETG PRO @ECC", + "sub_path": "filament/ECC/Elegoo PETG PRO @ECC.json" + }, + { + "name": "Elegoo PETG PRO @ECC2", + "sub_path": "filament/ECC2/Elegoo PETG PRO @ECC2.json" + }, + { + "name": "Elegoo PETG PRO @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo PETG PRO @EN2 Series.json" + }, + { + "name": "Elegoo PETG PRO @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo PETG PRO @EN3 Series.json" + }, + { + "name": "Elegoo PETG PRO @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo PETG PRO @EN4 Series.json" + }, + { + "name": "Elegoo PETG PRO @Elegoo Giga", + "sub_path": "filament/EOSGIGA/Elegoo PETG PRO @Elegoo Giga.json" + }, + { + "name": "Elegoo PETG Translucent @0.2 nozzle", + "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PETG Translucent @0.2 nozzle.json" + }, + { + "name": "Elegoo PETG Translucent @EC", + "sub_path": "filament/EC/Elegoo PETG Translucent @EC.json" + }, + { + "name": "Elegoo PETG Translucent @EC2", + "sub_path": "filament/EC2/Elegoo PETG Translucent @EC2.json" + }, + { + "name": "Elegoo PETG Translucent @ECC", + "sub_path": "filament/ECC/Elegoo PETG Translucent @ECC.json" + }, + { + "name": "Elegoo PETG Translucent @ECC2", + "sub_path": "filament/ECC2/Elegoo PETG Translucent @ECC2.json" + }, + { + "name": "Elegoo PETG Translucent @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo PETG Translucent @EN2 Series.json" + }, + { + "name": "Elegoo PETG Translucent @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo PETG Translucent @EN3 Series.json" + }, + { + "name": "Elegoo PETG Translucent @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo PETG Translucent @EN4 Series.json" + }, + { + "name": "Elegoo PETG Translucent @Elegoo Giga", + "sub_path": "filament/EOSGIGA/Elegoo PETG Translucent @Elegoo Giga.json" + }, + { + "name": "Elegoo PETG-CF @EC", + "sub_path": "filament/EC/Elegoo PETG-CF @EC.json" + }, + { + "name": "Elegoo PETG-CF @EC2", + "sub_path": "filament/EC2/Elegoo PETG-CF @EC2.json" + }, + { + "name": "Elegoo PETG-CF @ECC", + "sub_path": "filament/ECC/Elegoo PETG-CF @ECC.json" + }, + { + "name": "Elegoo PETG-CF @ECC2", + "sub_path": "filament/ECC2/Elegoo PETG-CF @ECC2.json" + }, + { + "name": "Elegoo PETG-CF @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo PETG-CF @EN2 Series.json" + }, + { + "name": "Elegoo PETG-CF @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo PETG-CF @EN3 Series.json" + }, + { + "name": "Elegoo PETG-CF @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo PETG-CF @EN4 Series.json" + }, + { + "name": "Elegoo PETG-CF @Elegoo Giga", + "sub_path": "filament/EOSGIGA/Elegoo PETG-CF @Elegoo Giga.json" + }, + { + "name": "Elegoo PETG-GF @EC", + "sub_path": "filament/EC/Elegoo PETG-GF @EC.json" + }, + { + "name": "Elegoo PETG-GF @EC2", + "sub_path": "filament/EC2/Elegoo PETG-GF @EC2.json" + }, + { + "name": "Elegoo PETG-GF @ECC", + "sub_path": "filament/ECC/Elegoo PETG-GF @ECC.json" + }, + { + "name": "Elegoo PETG-GF @ECC2", + "sub_path": "filament/ECC2/Elegoo PETG-GF @ECC2.json" + }, + { + "name": "Elegoo PETG-GF @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo PETG-GF @EN2 Series.json" + }, + { + "name": "Elegoo PETG-GF @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo PETG-GF @EN3 Series.json" + }, + { + "name": "Elegoo PETG-GF @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo PETG-GF @EN4 Series.json" + }, + { + "name": "Elegoo PETG-GF @Elegoo Giga", + "sub_path": "filament/EOSGIGA/Elegoo PETG-GF @Elegoo Giga.json" + }, + { + "name": "Elegoo Rapid PETG @0.2 nozzle", + "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo Rapid PETG @0.2 nozzle.json" + }, + { + "name": "Elegoo Rapid PETG @EC", + "sub_path": "filament/EC/Elegoo Rapid PETG @EC.json" + }, + { + "name": "Elegoo Rapid PETG @EC2", + "sub_path": "filament/EC2/Elegoo Rapid PETG @EC2.json" + }, + { + "name": "Elegoo Rapid PETG @ECC", + "sub_path": "filament/ECC/Elegoo Rapid PETG @ECC.json" + }, + { + "name": "Elegoo Rapid PETG @ECC2", + "sub_path": "filament/ECC2/Elegoo Rapid PETG @ECC2.json" + }, + { + "name": "Elegoo Rapid PETG @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo Rapid PETG @EN2 Series.json" + }, + { + "name": "Elegoo Rapid PETG @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo Rapid PETG @EN3 Series.json" + }, + { + "name": "Elegoo Rapid PETG @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo Rapid PETG @EN4 Series.json" + }, + { + "name": "Elegoo Rapid PETG @Elegoo Giga", + "sub_path": "filament/EOSGIGA/Elegoo Rapid PETG @Elegoo Giga.json" + }, + { + "name": "Elegoo PLA Basic @0.2 nozzle", + "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PLA Basic @0.2 nozzle.json" + }, + { + "name": "Elegoo PLA Basic @EC", + "sub_path": "filament/EC/Elegoo PLA Basic @EC.json" + }, + { + "name": "Elegoo PLA Basic @EC2", + "sub_path": "filament/EC2/Elegoo PLA Basic @EC2.json" + }, + { + "name": "Elegoo PLA Basic @ECC", + "sub_path": "filament/ECC/Elegoo PLA Basic @ECC.json" + }, + { + "name": "Elegoo PLA Basic @ECC2", + "sub_path": "filament/ECC2/Elegoo PLA Basic @ECC2.json" + }, + { + "name": "Elegoo PLA Basic @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo PLA Basic @EN2 Series.json" + }, + { + "name": "Elegoo PLA Basic @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo PLA Basic @EN3 Series.json" + }, + { + "name": "Elegoo PLA Basic @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo PLA Basic @EN4 Series.json" + }, + { + "name": "Elegoo PLA Basic @Elegoo Giga", + "sub_path": "filament/EOSGIGA/Elegoo PLA Basic @Elegoo Giga.json" + }, + { + "name": "Elegoo PLA Galaxy @EC", + "sub_path": "filament/EC/Elegoo PLA Galaxy @EC.json" + }, + { + "name": "Elegoo PLA Galaxy @EC2", + "sub_path": "filament/EC2/Elegoo PLA Galaxy @EC2.json" + }, + { + "name": "Elegoo PLA Galaxy @ECC", + "sub_path": "filament/ECC/Elegoo PLA Galaxy @ECC.json" + }, + { + "name": "Elegoo PLA Galaxy @ECC2", + "sub_path": "filament/ECC2/Elegoo PLA Galaxy @ECC2.json" + }, + { + "name": "Elegoo PLA Galaxy @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo PLA Galaxy @EN2 Series.json" + }, + { + "name": "Elegoo PLA Galaxy @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo PLA Galaxy @EN3 Series.json" + }, + { + "name": "Elegoo PLA Galaxy @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo PLA Galaxy @EN4 Series.json" + }, + { + "name": "Elegoo PLA Galaxy @Elegoo Giga", + "sub_path": "filament/EOSGIGA/Elegoo PLA Galaxy @Elegoo Giga.json" + }, + { + "name": "Elegoo PLA Glow @EC2", + "sub_path": "filament/EC2/Elegoo PLA Glow @EC2.json" + }, + { + "name": "Elegoo PLA Glow @ECC2", + "sub_path": "filament/ECC2/Elegoo PLA Glow @ECC2.json" + }, + { + "name": "Elegoo PLA Marble @EC", + "sub_path": "filament/EC/Elegoo PLA Marble @EC.json" + }, + { + "name": "Elegoo PLA Marble @EC2", + "sub_path": "filament/EC2/Elegoo PLA Marble @EC2.json" + }, + { + "name": "Elegoo PLA Marble @ECC", + "sub_path": "filament/ECC/Elegoo PLA Marble @ECC.json" + }, + { + "name": "Elegoo PLA Marble @ECC2", + "sub_path": "filament/ECC2/Elegoo PLA Marble @ECC2.json" + }, + { + "name": "Elegoo PLA Marble @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo PLA Marble @EN2 Series.json" + }, + { + "name": "Elegoo PLA Marble @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo PLA Marble @EN3 Series.json" + }, + { + "name": "Elegoo PLA Marble @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo PLA Marble @EN4 Series.json" + }, + { + "name": "Elegoo PLA Marble @Elegoo Giga", + "sub_path": "filament/EOSGIGA/Elegoo PLA Marble @Elegoo Giga.json" + }, + { + "name": "Elegoo PLA Matte @0.2 nozzle", + "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PLA Matte @0.2 nozzle.json" + }, + { + "name": "Elegoo PLA Matte @EC", + "sub_path": "filament/EC/Elegoo PLA Matte @EC.json" + }, + { + "name": "Elegoo PLA Matte @EC2", + "sub_path": "filament/EC2/Elegoo PLA Matte @EC2.json" + }, + { + "name": "Elegoo PLA Matte @ECC", + "sub_path": "filament/ECC/Elegoo PLA Matte @ECC.json" + }, + { + "name": "Elegoo PLA Matte @ECC2", + "sub_path": "filament/ECC2/Elegoo PLA Matte @ECC2.json" + }, + { + "name": "Elegoo PLA Matte @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo PLA Matte @EN2 Series.json" + }, + { + "name": "Elegoo PLA Matte @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo PLA Matte @EN3 Series.json" + }, + { + "name": "Elegoo PLA Matte @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo PLA Matte @EN4 Series.json" + }, + { + "name": "Elegoo PLA Matte @Elegoo Giga", + "sub_path": "filament/EOSGIGA/Elegoo PLA Matte @Elegoo Giga.json" + }, + { + "name": "Elegoo PLA PRO @0.2 nozzle", + "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PLA PRO @0.2 nozzle.json" + }, + { + "name": "Elegoo PLA PRO @EC", + "sub_path": "filament/EC/Elegoo PLA PRO @EC.json" + }, + { + "name": "Elegoo PLA PRO @EC2", + "sub_path": "filament/EC2/Elegoo PLA PRO @EC2.json" + }, + { + "name": "Elegoo PLA PRO @ECC", + "sub_path": "filament/ECC/Elegoo PLA PRO @ECC.json" + }, + { + "name": "Elegoo PLA PRO @ECC2", + "sub_path": "filament/ECC2/Elegoo PLA PRO @ECC2.json" + }, + { + "name": "Elegoo PLA PRO @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo PLA PRO @EN2 Series.json" + }, + { + "name": "Elegoo PLA PRO @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo PLA PRO @EN3 Series.json" + }, + { + "name": "Elegoo PLA PRO @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo PLA PRO @EN4 Series.json" + }, + { + "name": "Elegoo PLA Silk @0.2 nozzle", + "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PLA Silk @0.2 nozzle.json" + }, + { + "name": "Elegoo PLA Silk @EC", + "sub_path": "filament/EC/Elegoo PLA Silk @EC.json" + }, + { + "name": "Elegoo PLA Silk @EC2", + "sub_path": "filament/EC2/Elegoo PLA Silk @EC2.json" + }, + { + "name": "Elegoo PLA Silk @ECC", + "sub_path": "filament/ECC/Elegoo PLA Silk @ECC.json" + }, + { + "name": "Elegoo PLA Silk @ECC2", + "sub_path": "filament/ECC2/Elegoo PLA Silk @ECC2.json" + }, + { + "name": "Elegoo PLA Silk @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo PLA Silk @EN2 Series.json" + }, + { + "name": "Elegoo PLA Silk @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo PLA Silk @EN3 Series.json" + }, + { + "name": "Elegoo PLA Silk @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo PLA Silk @EN4 Series.json" + }, + { + "name": "Elegoo PLA Sparkle @EC", + "sub_path": "filament/EC/Elegoo PLA Sparkle @EC.json" + }, + { + "name": "Elegoo PLA Sparkle @EC2", + "sub_path": "filament/EC2/Elegoo PLA Sparkle @EC2.json" + }, + { + "name": "Elegoo PLA Sparkle @ECC", + "sub_path": "filament/ECC/Elegoo PLA Sparkle @ECC.json" + }, + { + "name": "Elegoo PLA Sparkle @ECC2", + "sub_path": "filament/ECC2/Elegoo PLA Sparkle @ECC2.json" + }, + { + "name": "Elegoo PLA Sparkle @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo PLA Sparkle @EN2 Series.json" + }, + { + "name": "Elegoo PLA Sparkle @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo PLA Sparkle @EN3 Series.json" + }, + { + "name": "Elegoo PLA Sparkle @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo PLA Sparkle @EN4 Series.json" + }, + { + "name": "Elegoo PLA Sparkle @Elegoo Giga", + "sub_path": "filament/EOSGIGA/Elegoo PLA Sparkle @Elegoo Giga.json" + }, + { + "name": "Elegoo PLA Translucent2 @EC2", + "sub_path": "filament/EC2/Elegoo PLA Translucent2 @EC2.json" + }, + { + "name": "Elegoo PLA Translucent2 @ECC2", + "sub_path": "filament/ECC2/Elegoo PLA Translucent2 @ECC2.json" + }, + { + "name": "Elegoo PLA Wood @EC", + "sub_path": "filament/EC/Elegoo PLA Wood @EC.json" + }, + { + "name": "Elegoo PLA Wood @EC2", + "sub_path": "filament/EC2/Elegoo PLA Wood @EC2.json" + }, + { + "name": "Elegoo PLA Wood @ECC", + "sub_path": "filament/ECC/Elegoo PLA Wood @ECC.json" + }, + { + "name": "Elegoo PLA Wood @ECC2", + "sub_path": "filament/ECC2/Elegoo PLA Wood @ECC2.json" + }, + { + "name": "Elegoo PLA Wood @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo PLA Wood @EN2 Series.json" + }, + { + "name": "Elegoo PLA Wood @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo PLA Wood @EN3 Series.json" + }, + { + "name": "Elegoo PLA Wood @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo PLA Wood @EN4 Series.json" + }, + { + "name": "Elegoo PLA Wood @Elegoo Giga", + "sub_path": "filament/EOSGIGA/Elegoo PLA Wood @Elegoo Giga.json" + }, + { + "name": "Elegoo PLA+ @0.2 nozzle", + "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PLA+ @0.2 nozzle.json" + }, + { + "name": "Elegoo PLA+ @EC", + "sub_path": "filament/EC/Elegoo PLA+ @EC.json" + }, + { + "name": "Elegoo PLA+ @EC2", + "sub_path": "filament/EC2/Elegoo PLA+ @EC2.json" + }, + { + "name": "Elegoo PLA+ @ECC", + "sub_path": "filament/ECC/Elegoo PLA+ @ECC.json" + }, + { + "name": "Elegoo PLA+ @ECC2", + "sub_path": "filament/ECC2/Elegoo PLA+ @ECC2.json" + }, + { + "name": "Elegoo PLA+ @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo PLA+ @EN2 Series.json" + }, + { + "name": "Elegoo PLA+ @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo PLA+ @EN3 Series.json" + }, + { + "name": "Elegoo PLA+ @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo PLA+ @EN4 Series.json" + }, + { + "name": "Elegoo PLA-CF @EC2", + "sub_path": "filament/EC2/Elegoo PLA-CF @EC2.json" + }, + { + "name": "Elegoo PLA-CF @ECC", + "sub_path": "filament/ECC/Elegoo PLA-CF @ECC.json" + }, + { + "name": "Elegoo PLA-CF @ECC2", + "sub_path": "filament/ECC2/Elegoo PLA-CF @ECC2.json" + }, + { + "name": "Elegoo PLA-CF @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo PLA-CF @EN2 Series.json" + }, + { + "name": "Elegoo PLA-CF @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo PLA-CF @EN3 Series.json" + }, + { + "name": "Elegoo PLA-CF @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo PLA-CF @EN4 Series.json" + }, + { + "name": "Elegoo Rapid PLA+ @0.2 nozzle", + "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo Rapid PLA+ @0.2 nozzle.json" + }, + { + "name": "Elegoo Rapid PLA+ @EC", + "sub_path": "filament/EC/Elegoo Rapid PLA+ @EC.json" + }, + { + "name": "Elegoo Rapid PLA+ @EC2", + "sub_path": "filament/EC2/Elegoo Rapid PLA+ @EC2.json" + }, + { + "name": "Elegoo Rapid PLA+ @ECC", + "sub_path": "filament/ECC/Elegoo Rapid PLA+ @ECC.json" + }, + { + "name": "Elegoo Rapid PLA+ @ECC2", + "sub_path": "filament/ECC2/Elegoo Rapid PLA+ @ECC2.json" + }, + { + "name": "Elegoo Rapid PLA+ @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo Rapid PLA+ @EN2 Series.json" + }, + { + "name": "Elegoo Rapid PLA+ @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo Rapid PLA+ @EN3 Series.json" + }, + { + "name": "Elegoo Rapid PLA+ @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo Rapid PLA+ @EN4 Series.json" + }, + { + "name": "Elegoo Rapid PLA+ @Elegoo Giga", + "sub_path": "filament/EOSGIGA/Elegoo Rapid PLA+ @Elegoo Giga.json" + }, + { + "name": "Elegoo Rapid TPU 95A @EC", + "sub_path": "filament/EC/Elegoo Rapid TPU 95A @EC.json" + }, + { + "name": "Elegoo Rapid TPU 95A @EC2", + "sub_path": "filament/EC2/Elegoo Rapid TPU 95A @EC2.json" + }, + { + "name": "Elegoo Rapid TPU 95A @ECC", + "sub_path": "filament/ECC/Elegoo Rapid TPU 95A @ECC.json" + }, + { + "name": "Elegoo Rapid TPU 95A @ECC2", + "sub_path": "filament/ECC2/Elegoo Rapid TPU 95A @ECC2.json" + }, + { + "name": "Elegoo Rapid TPU 95A @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo Rapid TPU 95A @EN2 Series.json" + }, + { + "name": "Elegoo Rapid TPU 95A @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo Rapid TPU 95A @EN3 Series.json" + }, + { + "name": "Elegoo Rapid TPU 95A @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo Rapid TPU 95A @EN4 Series.json" + }, + { + "name": "Elegoo Rapid TPU 95A @Elegoo Giga", + "sub_path": "filament/EOSGIGA/Elegoo Rapid TPU 95A @Elegoo Giga.json" + } + ], + "machine_list": [ + { + "name": "fdm_machine_common", + "sub_path": "machine/fdm_machine_common.json" + }, + { + "name": "fdm_elegoo_3dp_001_common", + "sub_path": "machine/fdm_elegoo_3dp_001_common.json" + }, + { + "name": "fdm_elegoo_common", + "sub_path": "machine/fdm_elegoo_common.json" + }, + { + "name": "Elegoo Centauri 0.4 nozzle", + "sub_path": "machine/EC/Elegoo Centauri 0.4 nozzle.json" + }, + { + "name": "Elegoo Centauri 2 0.4 nozzle", + "sub_path": "machine/EC2/Elegoo Centauri 2 0.4 nozzle.json" + }, + { + "name": "Elegoo Centauri Carbon 0.4 nozzle", + "sub_path": "machine/ECC/Elegoo Centauri Carbon 0.4 nozzle.json" + }, + { + "name": "Elegoo Centauri Carbon 2 0.4 nozzle", + "sub_path": "machine/ECC2/Elegoo Centauri Carbon 2 0.4 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 0.4 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 0.4 nozzle.json" + }, + { + "name": "Elegoo OrangeStorm Giga 0.4 nozzle", + "sub_path": "machine/EOSGIGA/Elegoo OrangeStorm Giga 0.4 nozzle.json" + }, + { + "name": "Elegoo Neptune 2 0.4 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 2 0.4 nozzle.json" + }, + { + "name": "Elegoo Neptune 2S 0.4 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 2S 0.4 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 Pro 0.4 nozzle", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Pro 0.4 nozzle.json" + }, + { + "name": "Elegoo Neptune X 0.4 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune X 0.4 nozzle.json" + }, + { + "name": "Elegoo Centauri 0.2 nozzle", + "sub_path": "machine/EC/Elegoo Centauri 0.2 nozzle.json" + }, + { + "name": "Elegoo Centauri 0.6 nozzle", + "sub_path": "machine/EC/Elegoo Centauri 0.6 nozzle.json" + }, + { + "name": "Elegoo Centauri 0.8 nozzle", + "sub_path": "machine/EC/Elegoo Centauri 0.8 nozzle.json" + }, + { + "name": "Elegoo Centauri 2 0.2 nozzle", + "sub_path": "machine/EC2/Elegoo Centauri 2 0.2 nozzle.json" + }, + { + "name": "Elegoo Centauri 2 0.6 nozzle", + "sub_path": "machine/EC2/Elegoo Centauri 2 0.6 nozzle.json" + }, + { + "name": "Elegoo Centauri 2 0.8 nozzle", + "sub_path": "machine/EC2/Elegoo Centauri 2 0.8 nozzle.json" + }, + { + "name": "Elegoo Centauri Carbon 0.2 nozzle", + "sub_path": "machine/ECC/Elegoo Centauri Carbon 0.2 nozzle.json" + }, + { + "name": "Elegoo Centauri Carbon 0.6 nozzle", + "sub_path": "machine/ECC/Elegoo Centauri Carbon 0.6 nozzle.json" + }, + { + "name": "Elegoo Centauri Carbon 0.8 nozzle", + "sub_path": "machine/ECC/Elegoo Centauri Carbon 0.8 nozzle.json" + }, + { + "name": "Elegoo Centauri Carbon 2 0.2 nozzle", + "sub_path": "machine/ECC2/Elegoo Centauri Carbon 2 0.2 nozzle.json" + }, + { + "name": "Elegoo Centauri Carbon 2 0.6 nozzle", + "sub_path": "machine/ECC2/Elegoo Centauri Carbon 2 0.6 nozzle.json" + }, + { + "name": "Elegoo Centauri Carbon 2 0.8 nozzle", + "sub_path": "machine/ECC2/Elegoo Centauri Carbon 2 0.8 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 0.2 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 0.2 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 0.6 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 0.6 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 0.8 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 0.8 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 1.0 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 1.0 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 Max 0.4 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Max 0.4 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 Plus 0.4 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Plus 0.4 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 Pro 0.4 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Pro 0.4 nozzle.json" + }, + { + "name": "Elegoo OrangeStorm Giga 0.6 nozzle", + "sub_path": "machine/EOSGIGA/Elegoo OrangeStorm Giga 0.6 nozzle.json" + }, + { + "name": "Elegoo OrangeStorm Giga 0.8 nozzle", + "sub_path": "machine/EOSGIGA/Elegoo OrangeStorm Giga 0.8 nozzle.json" + }, + { + "name": "Elegoo OrangeStorm Giga 1.0 nozzle", + "sub_path": "machine/EOSGIGA/Elegoo OrangeStorm Giga 1.0 nozzle.json" + }, + { + "name": "Elegoo Neptune 0.4 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 0.4 nozzle.json" + }, + { + "name": "Elegoo Neptune 2 0.6 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 2 0.6 nozzle.json" + }, + { + "name": "Elegoo Neptune 2 0.8 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 2 0.8 nozzle.json" + }, + { + "name": "Elegoo Neptune 2D 0.4 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 2D 0.4 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 0.4 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 3 0.4 nozzle.json" + }, + { + "name": "Elegoo Neptune 2S 0.6 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 2S 0.6 nozzle.json" + }, + { + "name": "Elegoo Neptune 2S 0.8 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 2S 0.8 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 Max 0.4 nozzle", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Max 0.4 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 Plus 0.4 nozzle", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Plus 0.4 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 Pro 0.2 nozzle", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Pro 0.2 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 Pro 0.6 nozzle", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Pro 0.6 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 Pro 0.8 nozzle", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Pro 0.8 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 Pro 1.0 nozzle", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Pro 1.0 nozzle.json" + }, + { + "name": "Elegoo Neptune X 0.6 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune X 0.6 nozzle.json" + }, + { + "name": "Elegoo Neptune X 0.8 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune X 0.8 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 Max 0.2 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Max 0.2 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 Max 0.6 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Max 0.6 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 Max 0.8 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Max 0.8 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 Max 1.0 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Max 1.0 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 Plus 0.2 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Plus 0.2 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 Plus 0.6 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Plus 0.6 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 Plus 0.8 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Plus 0.8 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 Plus 1.0 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Plus 1.0 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 Pro 0.2 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Pro 0.2 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 Pro 0.6 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Pro 0.6 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 Pro 0.8 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Pro 0.8 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 Pro 1.0 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Pro 1.0 nozzle.json" + }, + { + "name": "Elegoo Neptune 0.6 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 0.6 nozzle.json" + }, + { + "name": "Elegoo Neptune 0.8 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 0.8 nozzle.json" + }, + { + "name": "Elegoo Neptune 2D 0.6 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 2D 0.6 nozzle.json" + }, + { + "name": "Elegoo Neptune 2D 0.8 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 2D 0.8 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 0.6 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 3 0.6 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 0.8 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 3 0.8 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 Max 0.2 nozzle", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Max 0.2 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 Max 0.6 nozzle", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Max 0.6 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 Max 0.8 nozzle", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Max 0.8 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 Max 1.0 nozzle", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Max 1.0 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 Plus 0.2 nozzle", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Plus 0.2 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 Plus 0.6 nozzle", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Plus 0.6 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 Plus 0.8 nozzle", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Plus 0.8 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 Plus 1.0 nozzle", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Plus 1.0 nozzle.json" + } + ] +} diff --git a/resources/profiles/Elegoo/filament/fdm_filament_paht.json b/resources/profiles/Elegoo/filament/fdm_filament_paht.json deleted file mode 100644 index 058469ff71..0000000000 --- a/resources/profiles/Elegoo/filament/fdm_filament_paht.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "type": "filament", - "name": "fdm_filament_paht", - "inherits": "fdm_filament_common", - "from": "system", - "instantiation": "false", - "filament_max_volumetric_speed": [ - "12" - ], - "filament_type": [ - "PAHT" - ], - "filament_density": [ - "1.24" - ], - "filament_cost": [ - "0" - ], - "cool_plate_temp": [ - "35" - ], - "eng_plate_temp": [ - "0" - ], - "textured_plate_temp": [ - "60" - ], - "cool_plate_temp_initial_layer": [ - "35" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "textured_plate_temp_initial_layer": [ - "60" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "overhang_fan_threshold": [ - "50%" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "nozzle_temperature": [ - "220" - ], - "temperature_vitrification": [ - "45" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "slow_down_min_speed": [ - "20" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "fan_cooling_layer_time": [ - "80" - ], - "fan_min_speed": [ - "50" - ], - "hot_plate_temp": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_start_gcode": [ - "; Filament start gcode\n" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "filament_vendor": [ - "Generic" - ] -} diff --git a/resources/profiles/Elegoo/process/EOSGIGA/0.30mm Standard @Elegoo Giga 0.6 nozzle.json b/resources/profiles/Elegoo/process/EOSGIGA/0.30mm Standard @Elegoo Giga 0.6 nozzle.json index e6a04bb40a..9577a8e2db 100644 --- a/resources/profiles/Elegoo/process/EOSGIGA/0.30mm Standard @Elegoo Giga 0.6 nozzle.json +++ b/resources/profiles/Elegoo/process/EOSGIGA/0.30mm Standard @Elegoo Giga 0.6 nozzle.json @@ -1,15 +1,14 @@ { "type": "process", "name": "0.30mm Standard @Elegoo Giga 0.6 nozzle", + "renamed_from": "0.30mm Standard @EOS Giga 0.6 nozzle", "inherits": "fdm_process_elegoo_06030", "from": "system", "setting_id": "mMP6cZhv9TYjYlEh", "instantiation": "true", - "renamed_from": "0.30mm Standard @EOS Giga 0.6 nozzle", "default_acceleration": "3000", "filename_format": "EOGiga1_{nozzle_diameter[0]}_{input_filename_base}_{filament_name}_{layer_height}_{print_time}.gcode", "initial_layer_acceleration": "1000", - "is_custom_defined": "0", "make_overhang_printable_angle": "90", "outer_wall_acceleration": "2000", "resolution": "0.05", diff --git a/resources/profiles/Elegoo/process/fdm_process_elegoo_02010.json b/resources/profiles/Elegoo/process/fdm_process_elegoo_02010.json index 30fa79753b..615c0eeccd 100644 --- a/resources/profiles/Elegoo/process/fdm_process_elegoo_02010.json +++ b/resources/profiles/Elegoo/process/fdm_process_elegoo_02010.json @@ -24,7 +24,6 @@ "sparse_infill_speed": "100", "inner_wall_speed": "100", "internal_solid_infill_speed": "100", - "is_custom_defined": "0", "outer_wall_speed": "60", "top_surface_speed": "80" } diff --git a/resources/profiles/FLSun.json b/resources/profiles/FLSun.json index 1e0c76d458..384b31f464 100644 --- a/resources/profiles/FLSun.json +++ b/resources/profiles/FLSun.json @@ -244,26 +244,10 @@ "name": "Generic PLA @FLSun S1", "sub_path": "filament/Generic PLA @FLSun S1.json" }, - { - "name": "Generic PLA High Speed @FLSun S1", - "sub_path": "filament/Generic PLA High Speed @FLSun S1.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": "Generic PLA High Speed @FLSun T1", - "sub_path": "filament/Generic PLA High Speed @FLSun T1.json" - }, - { - "name": "Generic PLA Silk @FLSun T1", - "sub_path": "filament/Generic PLA Silk @FLSun T1.json" - }, { "name": "Generic TPU @FLSun S1", "sub_path": "filament/Generic TPU @FLSun S1.json" @@ -271,6 +255,22 @@ { "name": "Generic TPU @FLSun T1", "sub_path": "filament/Generic TPU @FLSun T1.json" + }, + { + "name": "Generic PLA High Speed @FLSun S1", + "sub_path": "filament/Generic PLA High Speed @FLSun S1.json" + }, + { + "name": "Generic PLA High Speed @FLSun T1", + "sub_path": "filament/Generic PLA High Speed @FLSun T1.json" + }, + { + "name": "Generic PLA Silk @FLSun S1", + "sub_path": "filament/Generic PLA Silk @FLSun S1.json" + }, + { + "name": "Generic PLA Silk @FLSun T1", + "sub_path": "filament/Generic PLA Silk @FLSun T1.json" } ], "machine_list": [ diff --git a/resources/profiles/Flashforge.json b/resources/profiles/Flashforge.json index f348a4f329..1f252e507b 100644 --- a/resources/profiles/Flashforge.json +++ b/resources/profiles/Flashforge.json @@ -439,22 +439,6 @@ "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" @@ -527,6 +511,22 @@ "name": "0.42mm Draft @FF AD5X 0.6 nozzle", "sub_path": "process/0.42mm Draft @FF AD5X 0.6 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.24mm Fine @FF AD5X 0.8 nozzle", "sub_path": "process/0.24mm Fine @FF AD5X 0.8 nozzle.json" @@ -573,26 +573,30 @@ "name": "Generic ASA @Flashforge", "sub_path": "filament/Generic ASA @Flashforge.json" }, - { - "name": "Generic PETG @Flashforge", - "sub_path": "filament/Generic PETG @Flashforge.json" - }, - { - "name": "Generic PETG-CF10 @Flashforge", - "sub_path": "filament/Generic PETG-CF10 @Flashforge.json" - }, { "name": "Flashforge PETG", "sub_path": "filament/Flashforge/Flashforge PETG @FF AD3.json" }, + { + "name": "Generic PETG @Flashforge", + "sub_path": "filament/Generic PETG @Flashforge.json" + }, { "name": "Generic PETG @Flashforge Artemis", "sub_path": "filament/Flashforge Generic PETG @Flashforge Artemis.json" }, + { + "name": "Generic PETG-CF10 @Flashforge", + "sub_path": "filament/Generic PETG-CF10 @Flashforge.json" + }, { "name": "SUNLU PETG @base", "sub_path": "filament/SUNLU/SUNLU PETG @base.json" }, + { + "name": "Flashforge PLA", + "sub_path": "filament/Flashforge/Flashforge PLA @FF AD3.json" + }, { "name": "Generic HS PLA @Flashforge", "sub_path": "filament/Generic HS PLA @Flashforge.json" @@ -609,10 +613,6 @@ "name": "Generic PLA-Silk @Flashforge", "sub_path": "filament/Generic PLA-Silk @Flashforge.json" }, - { - "name": "Flashforge PLA", - "sub_path": "filament/Flashforge/Flashforge PLA @FF AD3.json" - }, { "name": "SUNLU PLA Marble @base", "sub_path": "filament/SUNLU/SUNLU PLA Marble @base.json" @@ -709,6 +709,10 @@ "name": "Generic ABS @FF AD5M 0.25 Nozzle", "sub_path": "filament/Generic ABS @FF AD5M 0.25 Nozzle.json" }, + { + "name": "Generic ABS @Flashforge AD4", + "sub_path": "filament/Generic ABS @Flashforge AD4.json" + }, { "name": "Generic ABS @Flashforge G3U", "sub_path": "filament/Generic ABS @Flashforge G3U.json" @@ -729,10 +733,6 @@ "name": "Generic HIPS @Flashforge G3U 0.6 Nozzle", "sub_path": "filament/Generic HIPS @Flashforge G3U 0.6 Nozzle.json" }, - { - "name": "Generic ABS @Flashforge AD4", - "sub_path": "filament/Generic ABS @Flashforge AD4.json" - }, { "name": "Flashforge ASA @FF AD5M 0.25 Nozzle", "sub_path": "filament/Flashforge ASA @FF AD5M 0.25 Nozzle.json" @@ -745,41 +745,13 @@ "name": "Generic ASA @FF AD5M 0.25 Nozzle", "sub_path": "filament/Generic ASA @FF AD5M 0.25 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": "Generic PETG @FF AD5M 0.25 Nozzle", - "sub_path": "filament/Generic PETG @FF AD5M 0.25 Nozzle.json" - }, - { - "name": "Generic PETG @Flashforge G3U", - "sub_path": "filament/Generic PETG @Flashforge G3U.json" - }, - { - "name": "Generic PETG @Flashforge G3U 0.6 Nozzle", - "sub_path": "filament/Generic PETG @Flashforge G3U 0.6 Nozzle.json" - }, - { - "name": "Generic PETG @Flashforge G3U 0.8 Nozzle", - "sub_path": "filament/Generic PETG @Flashforge G3U 0.8 Nozzle.json" - }, - { - "name": "Generic PETG-CF @Flashforge G3U", - "sub_path": "filament/Generic PETG-CF @Flashforge G3U.json" - }, - { - "name": "Generic PETG-CF @Flashforge G3U 0.6 Nozzle", - "sub_path": "filament/Generic PETG-CF @Flashforge G3U 0.6 Nozzle.json" - }, - { - "name": "Generic PETG-CF @Flashforge G3U 0.8 Nozzle", - "sub_path": "filament/Generic PETG-CF @Flashforge G3U 0.8 Nozzle.json" + "name": "Generic ASA @Flashforge G3U 0.6 Nozzle", + "sub_path": "filament/Generic ASA @Flashforge G3U 0.6 Nozzle.json" }, { "name": "Flashforge HS PETG", @@ -905,10 +877,38 @@ "name": "FusRock S-PAHT @G3U 0.6 Nozzle", "sub_path": "filament/FusRock/FusRock S-PAHT @G3U 0.6 Nozzle.json" }, + { + "name": "Generic PETG @FF AD5M 0.25 Nozzle", + "sub_path": "filament/Generic PETG @FF AD5M 0.25 Nozzle.json" + }, { "name": "Generic PETG @Flashforge AD4", "sub_path": "filament/Generic PETG @Flashforge AD4.json" }, + { + "name": "Generic PETG @Flashforge G3U", + "sub_path": "filament/Generic PETG @Flashforge G3U.json" + }, + { + "name": "Generic PETG @Flashforge G3U 0.6 Nozzle", + "sub_path": "filament/Generic PETG @Flashforge G3U 0.6 Nozzle.json" + }, + { + "name": "Generic PETG @Flashforge G3U 0.8 Nozzle", + "sub_path": "filament/Generic PETG @Flashforge G3U 0.8 Nozzle.json" + }, + { + "name": "Generic PETG-CF @Flashforge G3U", + "sub_path": "filament/Generic PETG-CF @Flashforge G3U.json" + }, + { + "name": "Generic PETG-CF @Flashforge G3U 0.6 Nozzle", + "sub_path": "filament/Generic PETG-CF @Flashforge G3U 0.6 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 PETG-CF", "sub_path": "filament/Flashforge PETG-CF.json" @@ -945,10 +945,6 @@ "name": "SUNLU PETG @FF AD5M 0.8 Nozzle", "sub_path": "filament/SUNLU/SUNLU PETG @FF AD5M 0.8 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", "sub_path": "filament/Flashforge HIPS @FF G4.json" @@ -1049,42 +1045,14 @@ "name": "Flashforge PLA-CF @FF G4P", "sub_path": "filament/Flashforge PLA-CF @FF G4P.json" }, + { + "name": "Generic HS PLA @FF AD5M 0.25 Nozzle", + "sub_path": "filament/Generic HS PLA @FF AD5M 0.25 Nozzle.json" + }, { "name": "Generic PLA High Speed @Flashforge AD4", "sub_path": "filament/Generic PLA High Speed @Flashforge AD4.json" }, - { - "name": "Generic PLA @FF AD5M 0.25 Nozzle", - "sub_path": "filament/Generic PLA @FF AD5M 0.25 Nozzle.json" - }, - { - "name": "Generic PLA @Flashforge G3U", - "sub_path": "filament/Generic PLA @Flashforge G3U.json" - }, - { - "name": "Generic PLA @Flashforge G3U 0.6 Nozzle", - "sub_path": "filament/Generic PLA @Flashforge G3U 0.6 Nozzle.json" - }, - { - "name": "Generic PLA @Flashforge G3U 0.8 Nozzle", - "sub_path": "filament/Generic PLA @Flashforge G3U 0.8 Nozzle.json" - }, - { - "name": "Generic PLA-CF @Flashforge G3U", - "sub_path": "filament/Generic PLA-CF @Flashforge G3U.json" - }, - { - "name": "Generic PLA-CF @Flashforge G3U 0.6 Nozzle", - "sub_path": "filament/Generic PLA-CF @Flashforge G3U 0.6 Nozzle.json" - }, - { - "name": "Generic PLA-CF @Flashforge G3U 0.8 Nozzle", - "sub_path": "filament/Generic PLA-CF @Flashforge G3U 0.8 Nozzle.json" - }, - { - "name": "Generic PVA @Flashforge", - "sub_path": "filament/Generic PVA @Flashforge.json" - }, { "name": "Flashforge HS PLA", "sub_path": "filament/Flashforge HS PLA.json" @@ -1233,10 +1201,42 @@ "name": "Flashforge PLA Sparkle @FF AD5X 0.8 nozzle", "sub_path": "filament/Flashforge PLA Sparkle @FF AD5X 0.8 nozzle.json" }, + { + "name": "Generic PLA @FF AD5M 0.25 Nozzle", + "sub_path": "filament/Generic PLA @FF AD5M 0.25 Nozzle.json" + }, { "name": "Generic PLA @Flashforge AD4", "sub_path": "filament/Generic PLA @Flashforge AD4.json" }, + { + "name": "Generic PLA @Flashforge G3U", + "sub_path": "filament/Generic PLA @Flashforge G3U.json" + }, + { + "name": "Generic PLA @Flashforge G3U 0.6 Nozzle", + "sub_path": "filament/Generic PLA @Flashforge G3U 0.6 Nozzle.json" + }, + { + "name": "Generic PLA @Flashforge G3U 0.8 Nozzle", + "sub_path": "filament/Generic PLA @Flashforge G3U 0.8 Nozzle.json" + }, + { + "name": "Generic PLA-CF @Flashforge G3U", + "sub_path": "filament/Generic PLA-CF @Flashforge G3U.json" + }, + { + "name": "Generic PLA-CF @Flashforge G3U 0.6 Nozzle", + "sub_path": "filament/Generic PLA-CF @Flashforge G3U 0.6 Nozzle.json" + }, + { + "name": "Generic PLA-CF @Flashforge G3U 0.8 Nozzle", + "sub_path": "filament/Generic PLA-CF @Flashforge G3U 0.8 Nozzle.json" + }, + { + "name": "Generic PVA @Flashforge", + "sub_path": "filament/Generic PVA @Flashforge.json" + }, { "name": "Polymaker CoPA", "sub_path": "filament/Polymaker/Polymaker CoPA.json" @@ -1297,10 +1297,6 @@ "name": "Generic PLA-CF10 @Flashforge AD4", "sub_path": "filament/Generic PLA-CF10 @Flashforge AD4.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", "sub_path": "filament/Flashforge PLA Silk.json" @@ -1325,6 +1321,10 @@ "name": "Generic PLA Silk @Flashforge AD4", "sub_path": "filament/Generic PLA Silk @Flashforge AD4.json" }, + { + "name": "Generic PLA-SILK @FF AD5M 0.25 Nozzle", + "sub_path": "filament/Generic PLA-SILK @FF AD5M 0.25 Nozzle.json" + }, { "name": "SUNLU PLA Marble @FF AD3", "sub_path": "filament/SUNLU/SUNLU PLA Marble @FF AD3.json" @@ -1709,102 +1709,6 @@ "name": "Flashforge ASA Basic @FF AD5X 0.25 nozzle", "sub_path": "filament/Flashforge ASA Basic @FF AD5X 0.25 nozzle.json" }, - { - "name": "Flashforge HS PETG @FF G4 0.6 HF nozzle", - "sub_path": "filament/Flashforge HS PETG @FF G4 0.6 HF nozzle.json" - }, - { - "name": "Flashforge HS PETG @FF G4 0.6 nozzle", - "sub_path": "filament/Flashforge HS PETG @FF G4 0.6 nozzle.json" - }, - { - "name": "Flashforge HS PETG @FF G4 0.8 HF nozzle", - "sub_path": "filament/Flashforge HS PETG @FF G4 0.8 HF nozzle.json" - }, - { - "name": "Flashforge HS PETG @FF G4P 0.6 HF nozzle", - "sub_path": "filament/Flashforge HS PETG @FF G4P 0.6 HF nozzle.json" - }, - { - "name": "Flashforge HS PETG @FF G4P 0.6 nozzle", - "sub_path": "filament/Flashforge HS PETG @FF G4P 0.6 nozzle.json" - }, - { - "name": "Flashforge HS PETG @FF G4P 0.8 HF nozzle", - "sub_path": "filament/Flashforge HS PETG @FF G4P 0.8 HF nozzle.json" - }, - { - "name": "Flashforge PETG Pro @FF G4 0.6 HF nozzle", - "sub_path": "filament/Flashforge PETG Pro @FF G4 0.6 HF nozzle.json" - }, - { - "name": "Flashforge PETG Pro @FF G4 0.6 nozzle", - "sub_path": "filament/Flashforge PETG Pro @FF G4 0.6 nozzle.json" - }, - { - "name": "Flashforge PETG Pro @FF G4 0.8 HF nozzle", - "sub_path": "filament/Flashforge PETG Pro @FF G4 0.8 HF nozzle.json" - }, - { - "name": "Flashforge PETG Pro @FF G4P 0.6 HF nozzle", - "sub_path": "filament/Flashforge PETG Pro @FF G4P 0.6 HF nozzle.json" - }, - { - "name": "Flashforge PETG Pro @FF G4P 0.6 nozzle", - "sub_path": "filament/Flashforge PETG Pro @FF G4P 0.6 nozzle.json" - }, - { - "name": "Flashforge PETG Pro @FF G4P 0.8 HF nozzle", - "sub_path": "filament/Flashforge PETG Pro @FF G4P 0.8 HF nozzle.json" - }, - { - "name": "Flashforge PETG Transparent @FF G4 0.6 HF nozzle", - "sub_path": "filament/Flashforge PETG Transparent @FF G4 0.6 HF nozzle.json" - }, - { - "name": "Flashforge PETG Transparent @FF G4 0.6 nozzle", - "sub_path": "filament/Flashforge PETG Transparent @FF G4 0.6 nozzle.json" - }, - { - "name": "Flashforge PETG Transparent @FF G4 0.8 HF nozzle", - "sub_path": "filament/Flashforge PETG Transparent @FF G4 0.8 HF nozzle.json" - }, - { - "name": "Flashforge PETG Transparent @FF G4P 0.6 HF nozzle", - "sub_path": "filament/Flashforge PETG Transparent @FF G4P 0.6 HF nozzle.json" - }, - { - "name": "Flashforge PETG Transparent @FF G4P 0.6 nozzle", - "sub_path": "filament/Flashforge PETG Transparent @FF G4P 0.6 nozzle.json" - }, - { - "name": "Flashforge PETG Transparent @FF G4P 0.8 HF nozzle", - "sub_path": "filament/Flashforge PETG Transparent @FF G4P 0.8 HF nozzle.json" - }, - { - "name": "Flashforge TPU 65D @FF G4 0.6 HF nozzle", - "sub_path": "filament/Flashforge TPU 65D @FF G4 0.6 HF nozzle.json" - }, - { - "name": "Flashforge TPU 65D @FF G4P 0.6 HF nozzle", - "sub_path": "filament/Flashforge TPU 65D @FF G4P 0.6 HF nozzle.json" - }, - { - "name": "Flashforge TPU 95A @FF G4 0.6 HF nozzle", - "sub_path": "filament/Flashforge TPU 95A @FF G4 0.6 HF nozzle.json" - }, - { - "name": "Flashforge TPU 95A @FF G4P 0.6 HF nozzle", - "sub_path": "filament/Flashforge TPU 95A @FF G4P 0.6 HF nozzle.json" - }, - { - "name": "Flashforge PETG-CF @FF G4 0.6 nozzle", - "sub_path": "filament/Flashforge PETG-CF @FF G4 0.6 nozzle.json" - }, - { - "name": "Flashforge PETG-CF @FF G4P 0.6 nozzle", - "sub_path": "filament/Flashforge PETG-CF @FF G4P 0.6 nozzle.json" - }, { "name": "Flashforge HS PETG @FF AD5M 0.25 nozzle", "sub_path": "filament/Flashforge HS PETG @FF AD5M 0.25 nozzle.json" @@ -2045,6 +1949,254 @@ "name": "Polymaker CoPA @FF G4P 0.8 HF nozzle", "sub_path": "filament/Polymaker CoPA @FF G4P 0.8 HF nozzle.json" }, + { + "name": "Flashforge HS PETG @FF G4 0.6 HF nozzle", + "sub_path": "filament/Flashforge HS PETG @FF G4 0.6 HF nozzle.json" + }, + { + "name": "Flashforge HS PETG @FF G4 0.6 nozzle", + "sub_path": "filament/Flashforge HS PETG @FF G4 0.6 nozzle.json" + }, + { + "name": "Flashforge HS PETG @FF G4 0.8 HF nozzle", + "sub_path": "filament/Flashforge HS PETG @FF G4 0.8 HF nozzle.json" + }, + { + "name": "Flashforge HS PETG @FF G4P 0.6 HF nozzle", + "sub_path": "filament/Flashforge HS PETG @FF G4P 0.6 HF nozzle.json" + }, + { + "name": "Flashforge HS PETG @FF G4P 0.6 nozzle", + "sub_path": "filament/Flashforge HS PETG @FF G4P 0.6 nozzle.json" + }, + { + "name": "Flashforge HS PETG @FF G4P 0.8 HF nozzle", + "sub_path": "filament/Flashforge HS PETG @FF G4P 0.8 HF nozzle.json" + }, + { + "name": "Flashforge PETG Pro @FF G4 0.6 HF nozzle", + "sub_path": "filament/Flashforge PETG Pro @FF G4 0.6 HF nozzle.json" + }, + { + "name": "Flashforge PETG Pro @FF G4 0.6 nozzle", + "sub_path": "filament/Flashforge PETG Pro @FF G4 0.6 nozzle.json" + }, + { + "name": "Flashforge PETG Pro @FF G4 0.8 HF nozzle", + "sub_path": "filament/Flashforge PETG Pro @FF G4 0.8 HF nozzle.json" + }, + { + "name": "Flashforge PETG Pro @FF G4P 0.6 HF nozzle", + "sub_path": "filament/Flashforge PETG Pro @FF G4P 0.6 HF nozzle.json" + }, + { + "name": "Flashforge PETG Pro @FF G4P 0.6 nozzle", + "sub_path": "filament/Flashforge PETG Pro @FF G4P 0.6 nozzle.json" + }, + { + "name": "Flashforge PETG Pro @FF G4P 0.8 HF nozzle", + "sub_path": "filament/Flashforge PETG Pro @FF G4P 0.8 HF nozzle.json" + }, + { + "name": "Flashforge PETG Transparent @FF G4 0.6 HF nozzle", + "sub_path": "filament/Flashforge PETG Transparent @FF G4 0.6 HF nozzle.json" + }, + { + "name": "Flashforge PETG Transparent @FF G4 0.6 nozzle", + "sub_path": "filament/Flashforge PETG Transparent @FF G4 0.6 nozzle.json" + }, + { + "name": "Flashforge PETG Transparent @FF G4 0.8 HF nozzle", + "sub_path": "filament/Flashforge PETG Transparent @FF G4 0.8 HF nozzle.json" + }, + { + "name": "Flashforge PETG Transparent @FF G4P 0.6 HF nozzle", + "sub_path": "filament/Flashforge PETG Transparent @FF G4P 0.6 HF nozzle.json" + }, + { + "name": "Flashforge PETG Transparent @FF G4P 0.6 nozzle", + "sub_path": "filament/Flashforge PETG Transparent @FF G4P 0.6 nozzle.json" + }, + { + "name": "Flashforge PETG Transparent @FF G4P 0.8 HF nozzle", + "sub_path": "filament/Flashforge PETG Transparent @FF G4P 0.8 HF nozzle.json" + }, + { + "name": "Flashforge TPU 65D @FF G4 0.6 HF nozzle", + "sub_path": "filament/Flashforge TPU 65D @FF G4 0.6 HF nozzle.json" + }, + { + "name": "Flashforge TPU 65D @FF G4P 0.6 HF nozzle", + "sub_path": "filament/Flashforge TPU 65D @FF G4P 0.6 HF nozzle.json" + }, + { + "name": "Flashforge TPU 95A @FF G4 0.6 HF nozzle", + "sub_path": "filament/Flashforge TPU 95A @FF G4 0.6 HF nozzle.json" + }, + { + "name": "Flashforge TPU 95A @FF G4P 0.6 HF nozzle", + "sub_path": "filament/Flashforge TPU 95A @FF G4P 0.6 HF nozzle.json" + }, + { + "name": "Flashforge PETG-CF @FF G4 0.6 nozzle", + "sub_path": "filament/Flashforge PETG-CF @FF G4 0.6 nozzle.json" + }, + { + "name": "Flashforge PETG-CF @FF G4P 0.6 nozzle", + "sub_path": "filament/Flashforge PETG-CF @FF G4P 0.6 nozzle.json" + }, + { + "name": "Flashforge HS PLA @FF AD5X 0.25 nozzle", + "sub_path": "filament/Flashforge HS PLA @FF AD5X 0.25 nozzle.json" + }, + { + "name": "Flashforge HS PLA @FF G4 0.25 nozzle", + "sub_path": "filament/Flashforge HS PLA @FF G4 0.25 nozzle.json" + }, + { + "name": "Flashforge HS PLA @FF G4P 0.25 nozzle", + "sub_path": "filament/Flashforge HS PLA @FF G4P 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Basic @FF AD5M 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Basic @FF AD5M 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Basic @FF AD5X 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Basic @FF AD5X 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Basic @FF G4 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Basic @FF G4 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Basic @FF G4P 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Basic @FF G4P 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Color Change @FF AD5M 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Color Change @FF AD5M 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Color Change @FF AD5X 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Color Change @FF AD5X 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Color Change @FF G4 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Color Change @FF G4 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Color Change @FF G4P 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Color Change @FF G4P 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Galaxy @FF AD5M 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Galaxy @FF AD5M 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Galaxy @FF AD5X 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Galaxy @FF AD5X 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Galaxy @FF G4 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Galaxy @FF G4 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Galaxy @FF G4P 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Galaxy @FF G4P 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Luminous @FF AD5M 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Luminous @FF AD5M 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Luminous @FF AD5X 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Luminous @FF AD5X 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Luminous @FF G4 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Luminous @FF G4 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Luminous @FF G4P 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Luminous @FF G4P 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Matte @FF AD5M 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Matte @FF AD5M 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Matte @FF AD5X 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Matte @FF AD5X 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Matte @FF G4 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Matte @FF G4 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Matte @FF G4P 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Matte @FF G4P 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Metal @FF AD5M 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Metal @FF AD5M 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Metal @FF AD5X 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Metal @FF AD5X 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Metal @FF G4 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Metal @FF G4 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Metal @FF G4P 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Metal @FF G4P 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Pro @FF AD5M 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Pro @FF AD5M 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Pro @FF AD5X 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Pro @FF AD5X 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Pro @FF G4 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Pro @FF G4 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Pro @FF G4P 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Pro @FF G4P 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Silk @FF AD5X 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Silk @FF AD5X 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Silk @FF G4 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Silk @FF G4 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Silk @FF G4P 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Silk @FF G4P 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Sparkle @FF AD5M 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Sparkle @FF AD5M 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Sparkle @FF AD5X 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Sparkle @FF AD5X 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Sparkle @FF G4 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Sparkle @FF G4 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Sparkle @FF G4P 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Sparkle @FF G4P 0.25 nozzle.json" + }, { "name": "Flashforge HS PLA @FF G4 0.6 HF nozzle", "sub_path": "filament/Flashforge HS PLA @FF G4 0.6 HF nozzle.json" @@ -2341,158 +2493,6 @@ "name": "Flashforge PLA-CF @FF G4P 0.6 nozzle", "sub_path": "filament/Flashforge PLA-CF @FF G4P 0.6 nozzle.json" }, - { - "name": "Flashforge HS PLA @FF AD5X 0.25 nozzle", - "sub_path": "filament/Flashforge HS PLA @FF AD5X 0.25 nozzle.json" - }, - { - "name": "Flashforge HS PLA @FF G4 0.25 nozzle", - "sub_path": "filament/Flashforge HS PLA @FF G4 0.25 nozzle.json" - }, - { - "name": "Flashforge HS PLA @FF G4P 0.25 nozzle", - "sub_path": "filament/Flashforge HS PLA @FF G4P 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Basic @FF AD5M 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Basic @FF AD5M 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Basic @FF AD5X 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Basic @FF AD5X 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Basic @FF G4 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Basic @FF G4 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Basic @FF G4P 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Basic @FF G4P 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Color Change @FF AD5M 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Color Change @FF AD5M 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Color Change @FF AD5X 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Color Change @FF AD5X 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Color Change @FF G4 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Color Change @FF G4 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Color Change @FF G4P 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Color Change @FF G4P 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Galaxy @FF AD5M 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Galaxy @FF AD5M 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Galaxy @FF AD5X 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Galaxy @FF AD5X 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Galaxy @FF G4 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Galaxy @FF G4 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Galaxy @FF G4P 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Galaxy @FF G4P 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Luminous @FF AD5M 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Luminous @FF AD5M 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Luminous @FF AD5X 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Luminous @FF AD5X 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Luminous @FF G4 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Luminous @FF G4 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Luminous @FF G4P 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Luminous @FF G4P 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Matte @FF AD5M 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Matte @FF AD5M 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Matte @FF AD5X 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Matte @FF AD5X 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Matte @FF G4 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Matte @FF G4 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Matte @FF G4P 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Matte @FF G4P 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Metal @FF AD5M 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Metal @FF AD5M 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Metal @FF AD5X 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Metal @FF AD5X 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Metal @FF G4 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Metal @FF G4 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Metal @FF G4P 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Metal @FF G4P 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Pro @FF AD5M 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Pro @FF AD5M 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Pro @FF AD5X 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Pro @FF AD5X 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Pro @FF G4 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Pro @FF G4 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Pro @FF G4P 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Pro @FF G4P 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Silk @FF AD5X 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Silk @FF AD5X 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Silk @FF G4 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Silk @FF G4 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Silk @FF G4P 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Silk @FF G4P 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Sparkle @FF AD5M 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Sparkle @FF AD5M 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Sparkle @FF AD5X 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Sparkle @FF AD5X 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Sparkle @FF G4 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Sparkle @FF G4 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Sparkle @FF G4P 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Sparkle @FF G4P 0.25 nozzle.json" - }, { "name": "Flashforge PLA Silk @FF AD5M 0.25 nozzle", "sub_path": "filament/Flashforge PLA Silk @FF AD5M 0.25 nozzle.json" @@ -2601,30 +2601,6 @@ "name": "Flashforge PETG-CF @FF C5P", "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 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 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 C5P", - "sub_path": "filament/Flashforge PLA Pro @FF C5P.json" - }, { "name": "Flashforge PLA Basic @FF C5", "sub_path": "filament/Flashforge PLA Basic @FF C5.json" @@ -2657,6 +2633,30 @@ "name": "Flashforge PLA Luminous @FF C5P", "sub_path": "filament/Flashforge PLA Luminous @FF C5P.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 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 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 Silk @FF C5", "sub_path": "filament/Flashforge PLA Silk @FF C5.json" diff --git a/resources/profiles/InfiMech.json b/resources/profiles/InfiMech.json index 06d0629ffc..cdfb2ad80b 100644 --- a/resources/profiles/InfiMech.json +++ b/resources/profiles/InfiMech.json @@ -1,6 +1,6 @@ { "name": "InfiMech", - "version": "02.04.00.03", + "version": "02.04.00.04", "force_update": "1", "description": "InfiMech configurations", "machine_model_list": [ @@ -476,11 +476,11 @@ "machine_list": [ { "name": "fdm_machine_common", - "sub_path": "machine/HSN/fdm_machine_common.json" + "sub_path": "machine/fdm_machine_common.json" }, { "name": "fdm_klipper_common", - "sub_path": "machine/HSN/fdm_klipper_common.json" + "sub_path": "machine/fdm_klipper_common.json" }, { "name": "InfiMech EX 0.4 nozzle", diff --git a/resources/profiles/InfiMech/machine/HSN/fdm_klipper_common.json b/resources/profiles/InfiMech/machine/HSN/fdm_klipper_common.json deleted file mode 100644 index a95fea09c0..0000000000 --- a/resources/profiles/InfiMech/machine/HSN/fdm_klipper_common.json +++ /dev/null @@ -1,201 +0,0 @@ -{ - "type": "machine", - "name": "fdm_klipper_common", - "inherits": "fdm_machine_common", - "from": "system", - "instantiation": "false", - "gcode_flavor": "klipper", - "auxiliary_fan": "1", - "bed_exclude_area": [ - "0x0" - ], - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0", - "change_filament_gcode": "", - "cooling_tube_length": "5", - "cooling_tube_retraction": "91.5", - "default_filament_profile": [ - "Generic PLA @InfiMech" - ], - "default_print_profile": "0.20mm Standard @InfiMech TX", - "deretraction_speed": [ - "30" - ], - "enable_filament_ramming": "1", - "extra_loading_move": "-2", - "extruder_clearance_height_to_lid": "69", - "extruder_clearance_height_to_rod": "69", - "extruder_clearance_radius": "49", - "extruder_colour": [ - "#FCE94F" - ], - "extruder_offset": [ - "0x0" - ], - "fan_kickstart": "0", - "fan_speedup_overhangs": "1", - "fan_speedup_time": "0", - "high_current_on_filament_swap": "0", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "machine_end_gcode": "PRINT_END", - "machine_load_filament_time": "0", - "machine_max_acceleration_e": [ - "5000", - "5000" - ], - "machine_max_acceleration_extruding": [ - "20000", - "20000" - ], - "machine_max_acceleration_retracting": [ - "5000", - "5000" - ], - "machine_max_acceleration_travel": [ - "20000", - "20000" - ], - "machine_max_acceleration_x": [ - "20000", - "20000" - ], - "machine_max_acceleration_y": [ - "20000", - "20000" - ], - "machine_max_acceleration_z": [ - "500", - "200" - ], - "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", - "0.4" - ], - "machine_max_speed_e": [ - "30", - "25" - ], - "machine_max_speed_x": [ - "600", - "200" - ], - "machine_max_speed_y": [ - "600", - "200" - ], - "machine_max_speed_z": [ - "20", - "12" - ], - "machine_min_extruding_rate": [ - "0", - "0" - ], - "machine_min_travel_rate": [ - "0", - "0" - ], - "machine_pause_gcode": "PAUSE", - "machine_start_gcode": ";v2.9.2-20240814;\n;wiping nozzle start\nM106 P3 S0\nM140 S[bed_temperature_initial_layer_single]\nclean_nozzle_position\n;wiping nozzle end\n;*************preheat nozzle and hotbed for Z_TILT_ADJUST*************\nM140 S[bed_temperature_initial_layer_single]\nM104 S130\nG1 X110 Y110 F10000 \nG4 P200\nprobe\nSET_KINEMATIC_POSITION Z=0 ;Z homing\nG1 Z5\nM190 S[bed_temperature_initial_layer_single]\nZ_TILT_ADJUST \n;*************Z_TILT_ADJUST end*************\nM140 S[bed_temperature_initial_layer_single] ;heat hotbed temp set by user\nG1 X5 Y5 F8000 \nG28 \nG1 X{first_layer_print_min[0]-1.5} Y{min(first_layer_print_min[1] + 100,print_bed_max[0])} F6000 \nG1 Z0 F400\nM104 S[nozzle_temperature_initial_layer] ;heat nozzle temp set by user\nM106 S100 ;close head_nozzle fan\nG4 P3000\nM106 S255 ;close head_nozzle fan\nG4 P3000\nM106 S100 ;close head_nozzle fan\n;*************PRINT START*************\nM109 S[nozzle_temperature_initial_layer] ;heat nozzle temp set by user and wait \nM190 S[bed_temperature_initial_layer_single];heat bed temp set by user and wait \nM106 S0 ;close head_nozzle fan\nBED_MESH_CLEAR \nBED_MESH_PROFILE LOAD=default # bedmesh load\nG92 E0 ;Reset Extruder\n;G1 Z4.0 F200 ;Move Z Axis up\nG90 ;absolute position\n ; ; ; ; ; ; ; ; ; draw line along model\n;G92 E0 ;reset extruder\nG1 E3 F300 ;extrude filament\nG1 X{first_layer_print_min[0]-1.5} Y{min(first_layer_print_min[1] + 100,print_bed_max[0])} F6000 \nG1 Z0.22 F600\nG1 X{first_layer_print_min[0]-1.5} Y{max(0, first_layer_print_min[1]-1.5)} F2000 E10\nG1 Z0.22 F600\nG1 X{min(first_layer_print_min[0] + 60,print_bed_max[0])} F1200 E12\n ; ; ; ; ; ; ; ; ;draw line along model end \nG4 P200\nG1 Z2\nG92 E0 ;Reset Extruder\nCLEAR_PAUSE\n;***********model start************\n", - "machine_unload_filament_time": "0", - "max_layer_height": [ - "0.28" - ], - "min_layer_height": [ - "0.08" - ], - "nozzle_diameter": [ - "0.4" - ], - "nozzle_hrc": "0", - "nozzle_type": "hardened_steel", - "nozzle_volume": "151.32", - "parking_pos_retraction": "92", - "print_host_webui": "", - "printable_area": [ - "0x0", - "220x0", - "220x220", - "0x220" - ], - "printable_height": "250", - "printer_model": "Generic Klipper Printer", - "printer_notes": "", - "printer_settings_id": "InfiMech TX 0.4 nozzle", - "printer_technology": "FFF", - "printer_variant": "0.4", - "printhost_apikey": "", - "printhost_authorization_type": "key", - "printhost_cafile": "", - "printhost_password": "", - "printhost_port": "", - "printhost_ssl_ignore_revoke": "0", - "printhost_user": "", - "purge_in_prime_tower": "1", - "retract_before_wipe": [ - "0%" - ], - "retract_length_toolchange": [ - "0" - ], - "retract_lift_above": [ - "0" - ], - "retract_lift_below": [ - "249" - ], - "retract_lift_enforce": [ - "All Surfaces" - ], - "retract_restart_extra": [ - "0" - ], - "retract_restart_extra_toolchange": [ - "0" - ], - "retract_when_changing_layer": [ - "1" - ], - "retraction_length": [ - "0.5" - ], - "retraction_minimum_travel": [ - "1" - ], - "retraction_speed": [ - "30" - ], - "scan_first_layer": "0", - "silent_mode": "0", - "single_extruder_multi_material": "1", - "template_custom_gcode": "", - "thumbnails": [ - "300x300" - ], - "upward_compatible_machine": [], - "use_firmware_retraction": "0", - "use_relative_e_distances": "1", - "wipe": [ - "1" - ], - "wipe_distance": [ - "2" - ], - "z_hop": [ - "0.4" - ], - "z_hop_types": [ - "Normal Lift" - ] -} diff --git a/resources/profiles/InfiMech/machine/HSN/fdm_machine_common.json b/resources/profiles/InfiMech/machine/HSN/fdm_machine_common.json deleted file mode 100644 index 35501555bb..0000000000 --- a/resources/profiles/InfiMech/machine/HSN/fdm_machine_common.json +++ /dev/null @@ -1,197 +0,0 @@ -{ - "type": "machine", - "name": "fdm_machine_common", - "from": "system", - "instantiation": "false", - "printer_technology": "FFF", - "gcode_flavor": "klipper", - "auxiliary_fan": "1", - "bed_exclude_area": [ - "0x0" - ], - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0", - "change_filament_gcode": "", - "cooling_tube_length": "5", - "cooling_tube_retraction": "91.5", - "default_filament_profile": [ - "Generic PLA @InfiMech" - ], - "default_print_profile": "0.20mm Standard @InfiMech TX", - "deretraction_speed": [ - "30" - ], - "enable_filament_ramming": "1", - "extra_loading_move": "-2", - "extruder_clearance_height_to_lid": "69", - "extruder_clearance_height_to_rod": "69", - "extruder_clearance_radius": "49", - "extruder_colour": [ - "#FCE94F" - ], - "extruder_offset": [ - "0x0" - ], - "fan_kickstart": "0", - "fan_speedup_overhangs": "1", - "fan_speedup_time": "0", - "high_current_on_filament_swap": "0", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "machine_end_gcode": "PRINT_END", - "machine_load_filament_time": "0", - "machine_max_acceleration_e": [ - "5000", - "5000" - ], - "machine_max_acceleration_extruding": [ - "20000", - "20000" - ], - "machine_max_acceleration_retracting": [ - "5000", - "5000" - ], - "machine_max_acceleration_travel": [ - "9000", - "9000" - ], - "machine_max_acceleration_x": [ - "20000", - "20000" - ], - "machine_max_acceleration_y": [ - "20000", - "20000" - ], - "machine_max_acceleration_z": [ - "500", - "200" - ], - "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", - "0.4" - ], - "machine_max_speed_e": [ - "30", - "25" - ], - "machine_max_speed_x": [ - "600", - "200" - ], - "machine_max_speed_y": [ - "600", - "200" - ], - "machine_max_speed_z": [ - "20", - "12" - ], - "machine_min_extruding_rate": [ - "0", - "0" - ], - "machine_min_travel_rate": [ - "0", - "0" - ], - "machine_pause_gcode": "PAUSE", - "machine_start_gcode": ";v2.9.2-20240814;\n;wiping nozzle start\nM106 P3 S0\nM140 S[bed_temperature_initial_layer_single]\nclean_nozzle_position\n;wiping nozzle end\n;*************preheat nozzle and hotbed for Z_TILT_ADJUST*************\nM140 S[bed_temperature_initial_layer_single]\nM104 S130\nG1 X110 Y110 F10000 \nG4 P200\nprobe\nSET_KINEMATIC_POSITION Z=0 ;Z homing\nG1 Z5\nM190 S[bed_temperature_initial_layer_single]\nZ_TILT_ADJUST \n;*************Z_TILT_ADJUST end*************\nM140 S[bed_temperature_initial_layer_single] ;heat hotbed temp set by user\nG1 X5 Y5 F8000 \nG28 \nG1 X{first_layer_print_min[0]-1.5} Y{min(first_layer_print_min[1] + 100,print_bed_max[0])} F6000 \nG1 Z0 F400\nM104 S[nozzle_temperature_initial_layer] ;heat nozzle temp set by user\nM106 S100 ;close head_nozzle fan\nG4 P3000\nM106 S255 ;close head_nozzle fan\nG4 P3000\nM106 S100 ;close head_nozzle fan\n;*************PRINT START*************\nM109 S[nozzle_temperature_initial_layer] ;heat nozzle temp set by user and wait \nM190 S[bed_temperature_initial_layer_single];heat bed temp set by user and wait \nM106 S0 ;close head_nozzle fan\nBED_MESH_CLEAR \nBED_MESH_PROFILE LOAD=default # bedmesh load\nG92 E0 ;Reset Extruder\n;G1 Z4.0 F200 ;Move Z Axis up\nG90 ;absolute position\n ; ; ; ; ; ; ; ; ; draw line along model\n;G92 E0 ;reset extruder\nG1 E3 F300 ;extrude filament\nG1 X{first_layer_print_min[0]-1.5} Y{min(first_layer_print_min[1] + 100,print_bed_max[0])} F6000 \nG1 Z0.22 F600\nG1 X{first_layer_print_min[0]-1.5} Y{max(0, first_layer_print_min[1]-1.5)} F2000 E10\nG1 Z0.22 F600\nG1 X{min(first_layer_print_min[0] + 60,print_bed_max[0])} F1200 E12\n ; ; ; ; ; ; ; ; ;draw line along model end \nG4 P200\nG1 Z2\nG92 E0 ;Reset Extruder\nCLEAR_PAUSE\n;***********model start************\n", - "machine_unload_filament_time": "0", - "max_layer_height": [ - "0.28" - ], - "min_layer_height": [ - "0.08" - ], - "nozzle_hrc": "0", - "nozzle_type": "hardened_steel", - "nozzle_volume": "151.32", - "parking_pos_retraction": "92", - "print_host_webui": "", - "printable_area": [ - "0x0", - "220x0", - "220x220", - "0x220" - ], - "printable_height": "250", - "printer_model": "Generic Klipper Printer", - "printer_notes": "", - "printer_settings_id": "InfiMech TX 0.4 nozzle", - "printer_variant": "0.4", - "printhost_apikey": "", - "printhost_authorization_type": "key", - "printhost_cafile": "", - "printhost_password": "", - "printhost_port": "", - "printhost_ssl_ignore_revoke": "0", - "printhost_user": "", - "purge_in_prime_tower": "1", - "retract_before_wipe": [ - "0%" - ], - "retract_length_toolchange": [ - "0" - ], - "retract_lift_above": [ - "0" - ], - "retract_lift_below": [ - "249" - ], - "retract_lift_enforce": [ - "All Surfaces" - ], - "retract_restart_extra": [ - "0" - ], - "retract_restart_extra_toolchange": [ - "0" - ], - "retract_when_changing_layer": [ - "1" - ], - "retraction_length": [ - "0.5" - ], - "retraction_minimum_travel": [ - "1" - ], - "retraction_speed": [ - "30" - ], - "scan_first_layer": "0", - "silent_mode": "0", - "single_extruder_multi_material": "1", - "template_custom_gcode": "", - "thumbnails": [ - "300x300" - ], - "upward_compatible_machine": [], - "use_firmware_retraction": "0", - "use_relative_e_distances": "1", - "wipe": [ - "1" - ], - "wipe_distance": [ - "2" - ], - "z_hop": [ - "0.4" - ], - "z_hop_types": [ - "Normal Lift" - ] -} diff --git a/resources/profiles/InfiMech/machine/fdm_klipper_common.json b/resources/profiles/InfiMech/machine/fdm_klipper_common.json index bbcd27a966..a95fea09c0 100644 --- a/resources/profiles/InfiMech/machine/fdm_klipper_common.json +++ b/resources/profiles/InfiMech/machine/fdm_klipper_common.json @@ -119,7 +119,7 @@ "0.4" ], "nozzle_hrc": "0", - "nozzle_type": "brass", + "nozzle_type": "hardened_steel", "nozzle_volume": "151.32", "parking_pos_retraction": "92", "print_host_webui": "", diff --git a/resources/profiles/InfiMech/machine/fdm_machine_common.json b/resources/profiles/InfiMech/machine/fdm_machine_common.json index c329e930cb..35501555bb 100644 --- a/resources/profiles/InfiMech/machine/fdm_machine_common.json +++ b/resources/profiles/InfiMech/machine/fdm_machine_common.json @@ -116,7 +116,7 @@ "0.08" ], "nozzle_hrc": "0", - "nozzle_type": "brass", + "nozzle_type": "hardened_steel", "nozzle_volume": "151.32", "parking_pos_retraction": "92", "print_host_webui": "", diff --git a/resources/profiles/OrcaFilamentLibrary.json b/resources/profiles/OrcaFilamentLibrary.json index c7b203d5f1..2d58684985 100644 --- a/resources/profiles/OrcaFilamentLibrary.json +++ b/resources/profiles/OrcaFilamentLibrary.json @@ -68,258 +68,6 @@ "name": "fdm_filament_pla", "sub_path": "filament/base/fdm_filament_pla.json" }, - { - "name": "FilAr PLA @base", - "sub_path": "filament/FilAr/FilAr PLA @base.json" - }, - { - "name": "FilAr PLA Bronce", - "sub_path": "filament/FilAr/FilAr PLA Bronce.json" - }, - { - "name": "FilAr PLA Gris Plata", - "sub_path": "filament/FilAr/FilAr PLA Gris Plata.json" - }, - { - "name": "FilAr PLA Cobre", - "sub_path": "filament/FilAr/FilAr PLA Cobre.json" - }, - { - "name": "FilAr PLA Titanio", - "sub_path": "filament/FilAr/FilAr PLA Titanio.json" - }, - { - "name": "FilAr PLA Tabaco", - "sub_path": "filament/FilAr/FilAr PLA Tabaco.json" - }, - { - "name": "FilAr PLA Cafe con Leche", - "sub_path": "filament/FilAr/FilAr PLA Cafe con Leche.json" - }, - { - "name": "FilAr PLA Manteca", - "sub_path": "filament/FilAr/FilAr PLA Manteca.json" - }, - { - "name": "FilAr PLA Marron Oxido", - "sub_path": "filament/FilAr/FilAr PLA Marron Oxido.json" - }, - { - "name": "FilAr PLA Carpincho", - "sub_path": "filament/FilAr/FilAr PLA Carpincho.json" - }, - { - "name": "FilAr PLA Rosa Amaranto", - "sub_path": "filament/FilAr/FilAr PLA Rosa Amaranto.json" - }, - { - "name": "FilAr PLA Rosa Flamenco", - "sub_path": "filament/FilAr/FilAr PLA Rosa Flamenco.json" - }, - { - "name": "FilAr PLA Piel", - "sub_path": "filament/FilAr/FilAr PLA Piel.json" - }, - { - "name": "FilAr PLA Verde FilAr", - "sub_path": "filament/FilAr/FilAr PLA Verde FilAr.json" - }, - { - "name": "FilAr PLA Verde Manzana", - "sub_path": "filament/FilAr/FilAr PLA Verde Manzana.json" - }, - { - "name": "FilAr PLA Verde Pixel", - "sub_path": "filament/FilAr/FilAr PLA Verde Pixel.json" - }, - { - "name": "FilAr PLA Verde Oliva", - "sub_path": "filament/FilAr/FilAr PLA Verde Oliva.json" - }, - { - "name": "FilAr PLA Blanco Antartida", - "sub_path": "filament/FilAr/FilAr PLA Blanco Antartida.json" - }, - { - "name": "FilAr PLA Blanco Calido", - "sub_path": "filament/FilAr/FilAr PLA Blanco Calido.json" - }, - { - "name": "FilAr PLA Negro Azabache", - "sub_path": "filament/FilAr/FilAr PLA Negro Azabache.json" - }, - { - "name": "FilAr PLA Naranja Tigre", - "sub_path": "filament/FilAr/FilAr PLA Naranja Tigre.json" - }, - { - "name": "FilAr PLA Rojo de Carreras", - "sub_path": "filament/FilAr/FilAr PLA Rojo de Carreras.json" - }, - { - "name": "FilAr PLA Amarillo Lirio", - "sub_path": "filament/FilAr/FilAr PLA Amarillo Lirio.json" - }, - { - "name": "FilAr PLA Violeta Jacaranda", - "sub_path": "filament/FilAr/FilAr PLA Violeta Jacaranda.json" - }, - { - "name": "FilAr PLA Gris Pizarra", - "sub_path": "filament/FilAr/FilAr PLA Gris Pizarra.json" - }, - { - "name": "FilAr PLA Gris Ceniza", - "sub_path": "filament/FilAr/FilAr PLA Gris Ceniza.json" - }, - { - "name": "FilAr PLA Azul Francia", - "sub_path": "filament/FilAr/FilAr PLA Azul Francia.json" - }, - { - "name": "FilAr PLA Celeste Cielo", - "sub_path": "filament/FilAr/FilAr PLA Celeste Cielo.json" - }, - { - "name": "FilAr PLA Oro", - "sub_path": "filament/FilAr/FilAr PLA Oro.json" - }, - { - "name": "FilAr PLA Dorado", - "sub_path": "filament/FilAr/FilAr PLA Dorado.json" - }, - { - "name": "FilAr PLA-mate @base", - "sub_path": "filament/FilAr/FilAr PLA-mate @base.json" - }, - { - "name": "FilAr PLA-mate Amarillo", - "sub_path": "filament/FilAr/FilAr PLA-mate Amarillo.json" - }, - { - "name": "FilAr PLA-mate Azul", - "sub_path": "filament/FilAr/FilAr PLA-mate Azul.json" - }, - { - "name": "FilAr PLA-mate Beige", - "sub_path": "filament/FilAr/FilAr PLA-mate Beige.json" - }, - { - "name": "FilAr PLA-mate Blanco", - "sub_path": "filament/FilAr/FilAr PLA-mate Blanco.json" - }, - { - "name": "FilAr PLA-mate Bordo", - "sub_path": "filament/FilAr/FilAr PLA-mate Bordo.json" - }, - { - "name": "FilAr PLA-mate Celeste Cielo", - "sub_path": "filament/FilAr/FilAr PLA-mate Celeste Cielo.json" - }, - { - "name": "FilAr PLA-mate Chocolate", - "sub_path": "filament/FilAr/FilAr PLA-mate Chocolate.json" - }, - { - "name": "FilAr PLA-mate Gris", - "sub_path": "filament/FilAr/FilAr PLA-mate Gris.json" - }, - { - "name": "FilAr PLA-mate Marron", - "sub_path": "filament/FilAr/FilAr PLA-mate Marron.json" - }, - { - "name": "FilAr PLA-mate Naranja", - "sub_path": "filament/FilAr/FilAr PLA-mate Naranja.json" - }, - { - "name": "FilAr PLA-mate Negro", - "sub_path": "filament/FilAr/FilAr PLA-mate Negro.json" - }, - { - "name": "FilAr PLA-mate Piel", - "sub_path": "filament/FilAr/FilAr PLA-mate Piel.json" - }, - { - "name": "FilAr PLA-mate Rojo", - "sub_path": "filament/FilAr/FilAr PLA-mate Rojo.json" - }, - { - "name": "FilAr PLA-mate Rosa", - "sub_path": "filament/FilAr/FilAr PLA-mate Rosa.json" - }, - { - "name": "FilAr PLA-mate Uva", - "sub_path": "filament/FilAr/FilAr PLA-mate Uva.json" - }, - { - "name": "FilAr PLA-mate Verde", - "sub_path": "filament/FilAr/FilAr PLA-mate Verde.json" - }, - { - "name": "FilAr PLA-mate Violeta", - "sub_path": "filament/FilAr/FilAr PLA-mate Violeta.json" - }, - { - "name": "FilAr PETG @base", - "sub_path": "filament/FilAr/FilAr PETG @base.json" - }, - { - "name": "FilAr PETG Amarillo Lima", - "sub_path": "filament/FilAr/FilAr PETG Amarillo Lima.json" - }, - { - "name": "FilAr PETG Amarillo Radiante", - "sub_path": "filament/FilAr/FilAr PETG Amarillo Radiante.json" - }, - { - "name": "FilAr PETG Azul Boreal", - "sub_path": "filament/FilAr/FilAr PETG Azul Boreal.json" - }, - { - "name": "FilAr PETG Azul Francia", - "sub_path": "filament/FilAr/FilAr PETG Azul Francia.json" - }, - { - "name": "FilAr PETG Azul Imperial", - "sub_path": "filament/FilAr/FilAr PETG Azul Imperial.json" - }, - { - "name": "FilAr PETG Blanco Antartida", - "sub_path": "filament/FilAr/FilAr PETG Blanco Antartida.json" - }, - { - "name": "FilAr PETG Cian", - "sub_path": "filament/FilAr/FilAr PETG Cian.json" - }, - { - "name": "FilAr PETG Coral", - "sub_path": "filament/FilAr/FilAr PETG Coral.json" - }, - { - "name": "FilAr PETG Cristal", - "sub_path": "filament/FilAr/FilAr PETG Cristal.json" - }, - { - "name": "FilAr PETG Gris Ceniza", - "sub_path": "filament/FilAr/FilAr PETG Gris Ceniza.json" - }, - { - "name": "FilAr PETG Gris Plata", - "sub_path": "filament/FilAr/FilAr PETG Gris Plata.json" - }, - { - "name": "FilAr PETG Magenta", - "sub_path": "filament/FilAr/FilAr PETG Magenta.json" - }, - { - "name": "FilAr PETG Negro Azabache", - "sub_path": "filament/FilAr/FilAr PETG Negro Azabache.json" - }, - { - "name": "FilAr PETG Rojo Carmesi", - "sub_path": "filament/FilAr/FilAr PETG Rojo Carmesi.json" - }, { "name": "fdm_filament_pp", "sub_path": "filament/base/fdm_filament_pp.json" @@ -588,10 +336,6 @@ "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" - }, { "name": "AliZ PETG @base", "sub_path": "filament/AliZ/AliZ PETG @base.json" @@ -672,6 +416,10 @@ "name": "Fiberon PETG-rCF @base", "sub_path": "filament/Polymaker/Fiberon PETG-rCF @base.json" }, + { + "name": "FilAr PETG @base", + "sub_path": "filament/FilAr/FilAr PETG @base.json" + }, { "name": "Generic PETG @System", "sub_path": "filament/Generic PETG @System.json" @@ -680,18 +428,10 @@ "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" - }, { "name": "GreenGate3D PETG @base", "sub_path": "filament/GreenGate3D/GreenGate3D PETG @base.json" @@ -868,6 +608,14 @@ "name": "FILL3D PLA Turbo @base", "sub_path": "filament/FILL3D/FILL3D PLA Turbo @base.json" }, + { + "name": "FilAr PLA @base", + "sub_path": "filament/FilAr/FilAr PLA @base.json" + }, + { + "name": "FilAr PLA-mate @base", + "sub_path": "filament/FilAr/FilAr PLA-mate @base.json" + }, { "name": "Generic PLA @System", "sub_path": "filament/Generic PLA @System.json" @@ -880,10 +628,6 @@ "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" - }, { "name": "Generic PLA-CF @System", "sub_path": "filament/Generic PLA-CF @System.json" @@ -1092,18 +836,10 @@ "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" - }, { "name": "Bambu PPA-CF @base", "sub_path": "filament/Bambu/Bambu PPA-CF @base.json" @@ -1292,10 +1028,6 @@ "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" - }, { "name": "Overture ASA @System", "sub_path": "filament/Overture/Overture ASA @System.json" @@ -1388,14 +1120,14 @@ "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" - }, { "name": "COEX PCTG PRIME @System", "sub_path": "filament/COEX/COEX PCTG PRIME @System.json" }, + { + "name": "Generic PE-CF @System", + "sub_path": "filament/Generic PE-CF @System.json" + }, { "name": "AliZ PETG @System", "sub_path": "filament/AliZ/AliZ PETG @System.json" @@ -1448,10 +1180,6 @@ "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" - }, { "name": "Elegoo PETG @System", "sub_path": "filament/Elegoo/Elegoo PETG @System.json" @@ -1460,50 +1188,26 @@ "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" - }, { "name": "FDplast PETG @System", "sub_path": "filament/FDplast/FDplast PETG @System.json" @@ -1528,6 +1232,70 @@ "name": "Fiberon PETG-rCF @System", "sub_path": "filament/Polymaker/Fiberon PETG-rCF @System.json" }, + { + "name": "FilAr PETG Amarillo Lima", + "sub_path": "filament/FilAr/FilAr PETG Amarillo Lima.json" + }, + { + "name": "FilAr PETG Amarillo Radiante", + "sub_path": "filament/FilAr/FilAr PETG Amarillo Radiante.json" + }, + { + "name": "FilAr PETG Azul Boreal", + "sub_path": "filament/FilAr/FilAr PETG Azul Boreal.json" + }, + { + "name": "FilAr PETG Azul Francia", + "sub_path": "filament/FilAr/FilAr PETG Azul Francia.json" + }, + { + "name": "FilAr PETG Azul Imperial", + "sub_path": "filament/FilAr/FilAr PETG Azul Imperial.json" + }, + { + "name": "FilAr PETG Blanco Antartida", + "sub_path": "filament/FilAr/FilAr PETG Blanco Antartida.json" + }, + { + "name": "FilAr PETG Cian", + "sub_path": "filament/FilAr/FilAr PETG Cian.json" + }, + { + "name": "FilAr PETG Coral", + "sub_path": "filament/FilAr/FilAr PETG Coral.json" + }, + { + "name": "FilAr PETG Cristal", + "sub_path": "filament/FilAr/FilAr PETG Cristal.json" + }, + { + "name": "FilAr PETG Gris Ceniza", + "sub_path": "filament/FilAr/FilAr PETG Gris Ceniza.json" + }, + { + "name": "FilAr PETG Gris Plata", + "sub_path": "filament/FilAr/FilAr PETG Gris Plata.json" + }, + { + "name": "FilAr PETG Magenta", + "sub_path": "filament/FilAr/FilAr PETG Magenta.json" + }, + { + "name": "FilAr PETG Negro Azabache", + "sub_path": "filament/FilAr/FilAr PETG Negro Azabache.json" + }, + { + "name": "FilAr PETG Rojo Carmesi", + "sub_path": "filament/FilAr/FilAr PETG Rojo Carmesi.json" + }, + { + "name": "Generic PETG HF @System", + "sub_path": "filament/Generic PETG HF @System.json" + }, + { + "name": "Generic PETG-CF @System", + "sub_path": "filament/Generic PETG-CF @System.json" + }, { "name": "GreenGate3D PETG @System", "sub_path": "filament/GreenGate3D/GreenGate3D PETG @System.json" @@ -1656,106 +1424,54 @@ "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" - }, { "name": "FDplast PLA @System", "sub_path": "filament/FDplast/FDplast PLA @System.json" @@ -1768,6 +1484,194 @@ "name": "FILL3D PLA Turbo @System", "sub_path": "filament/FILL3D/FILL3D PLA Turbo @System.json" }, + { + "name": "FilAr PLA Amarillo Lirio", + "sub_path": "filament/FilAr/FilAr PLA Amarillo Lirio.json" + }, + { + "name": "FilAr PLA Azul Francia", + "sub_path": "filament/FilAr/FilAr PLA Azul Francia.json" + }, + { + "name": "FilAr PLA Blanco Antartida", + "sub_path": "filament/FilAr/FilAr PLA Blanco Antartida.json" + }, + { + "name": "FilAr PLA Blanco Calido", + "sub_path": "filament/FilAr/FilAr PLA Blanco Calido.json" + }, + { + "name": "FilAr PLA Bronce", + "sub_path": "filament/FilAr/FilAr PLA Bronce.json" + }, + { + "name": "FilAr PLA Cafe con Leche", + "sub_path": "filament/FilAr/FilAr PLA Cafe con Leche.json" + }, + { + "name": "FilAr PLA Carpincho", + "sub_path": "filament/FilAr/FilAr PLA Carpincho.json" + }, + { + "name": "FilAr PLA Celeste Cielo", + "sub_path": "filament/FilAr/FilAr PLA Celeste Cielo.json" + }, + { + "name": "FilAr PLA Cobre", + "sub_path": "filament/FilAr/FilAr PLA Cobre.json" + }, + { + "name": "FilAr PLA Dorado", + "sub_path": "filament/FilAr/FilAr PLA Dorado.json" + }, + { + "name": "FilAr PLA Gris Ceniza", + "sub_path": "filament/FilAr/FilAr PLA Gris Ceniza.json" + }, + { + "name": "FilAr PLA Gris Pizarra", + "sub_path": "filament/FilAr/FilAr PLA Gris Pizarra.json" + }, + { + "name": "FilAr PLA Gris Plata", + "sub_path": "filament/FilAr/FilAr PLA Gris Plata.json" + }, + { + "name": "FilAr PLA Manteca", + "sub_path": "filament/FilAr/FilAr PLA Manteca.json" + }, + { + "name": "FilAr PLA Marron Oxido", + "sub_path": "filament/FilAr/FilAr PLA Marron Oxido.json" + }, + { + "name": "FilAr PLA Naranja Tigre", + "sub_path": "filament/FilAr/FilAr PLA Naranja Tigre.json" + }, + { + "name": "FilAr PLA Negro Azabache", + "sub_path": "filament/FilAr/FilAr PLA Negro Azabache.json" + }, + { + "name": "FilAr PLA Oro", + "sub_path": "filament/FilAr/FilAr PLA Oro.json" + }, + { + "name": "FilAr PLA Piel", + "sub_path": "filament/FilAr/FilAr PLA Piel.json" + }, + { + "name": "FilAr PLA Rojo de Carreras", + "sub_path": "filament/FilAr/FilAr PLA Rojo de Carreras.json" + }, + { + "name": "FilAr PLA Rosa Amaranto", + "sub_path": "filament/FilAr/FilAr PLA Rosa Amaranto.json" + }, + { + "name": "FilAr PLA Rosa Flamenco", + "sub_path": "filament/FilAr/FilAr PLA Rosa Flamenco.json" + }, + { + "name": "FilAr PLA Tabaco", + "sub_path": "filament/FilAr/FilAr PLA Tabaco.json" + }, + { + "name": "FilAr PLA Titanio", + "sub_path": "filament/FilAr/FilAr PLA Titanio.json" + }, + { + "name": "FilAr PLA Verde FilAr", + "sub_path": "filament/FilAr/FilAr PLA Verde FilAr.json" + }, + { + "name": "FilAr PLA Verde Manzana", + "sub_path": "filament/FilAr/FilAr PLA Verde Manzana.json" + }, + { + "name": "FilAr PLA Verde Oliva", + "sub_path": "filament/FilAr/FilAr PLA Verde Oliva.json" + }, + { + "name": "FilAr PLA Verde Pixel", + "sub_path": "filament/FilAr/FilAr PLA Verde Pixel.json" + }, + { + "name": "FilAr PLA Violeta Jacaranda", + "sub_path": "filament/FilAr/FilAr PLA Violeta Jacaranda.json" + }, + { + "name": "FilAr PLA-mate Amarillo", + "sub_path": "filament/FilAr/FilAr PLA-mate Amarillo.json" + }, + { + "name": "FilAr PLA-mate Azul", + "sub_path": "filament/FilAr/FilAr PLA-mate Azul.json" + }, + { + "name": "FilAr PLA-mate Beige", + "sub_path": "filament/FilAr/FilAr PLA-mate Beige.json" + }, + { + "name": "FilAr PLA-mate Blanco", + "sub_path": "filament/FilAr/FilAr PLA-mate Blanco.json" + }, + { + "name": "FilAr PLA-mate Bordo", + "sub_path": "filament/FilAr/FilAr PLA-mate Bordo.json" + }, + { + "name": "FilAr PLA-mate Celeste Cielo", + "sub_path": "filament/FilAr/FilAr PLA-mate Celeste Cielo.json" + }, + { + "name": "FilAr PLA-mate Chocolate", + "sub_path": "filament/FilAr/FilAr PLA-mate Chocolate.json" + }, + { + "name": "FilAr PLA-mate Gris", + "sub_path": "filament/FilAr/FilAr PLA-mate Gris.json" + }, + { + "name": "FilAr PLA-mate Marron", + "sub_path": "filament/FilAr/FilAr PLA-mate Marron.json" + }, + { + "name": "FilAr PLA-mate Naranja", + "sub_path": "filament/FilAr/FilAr PLA-mate Naranja.json" + }, + { + "name": "FilAr PLA-mate Negro", + "sub_path": "filament/FilAr/FilAr PLA-mate Negro.json" + }, + { + "name": "FilAr PLA-mate Piel", + "sub_path": "filament/FilAr/FilAr PLA-mate Piel.json" + }, + { + "name": "FilAr PLA-mate Rojo", + "sub_path": "filament/FilAr/FilAr PLA-mate Rojo.json" + }, + { + "name": "FilAr PLA-mate Rosa", + "sub_path": "filament/FilAr/FilAr PLA-mate Rosa.json" + }, + { + "name": "FilAr PLA-mate Uva", + "sub_path": "filament/FilAr/FilAr PLA-mate Uva.json" + }, + { + "name": "FilAr PLA-mate Verde", + "sub_path": "filament/FilAr/FilAr PLA-mate Verde.json" + }, + { + "name": "FilAr PLA-mate Violeta", + "sub_path": "filament/FilAr/FilAr PLA-mate Violeta.json" + }, + { + "name": "Generic PLA Matte @System", + "sub_path": "filament/Generic PLA Matte @System.json" + }, { "name": "NIT PLA @System", "sub_path": "filament/NIT/NIT PLA @System.json" @@ -1876,10 +1780,6 @@ "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" - }, { "name": "PolyLite PLA @System", "sub_path": "filament/Polymaker/PolyLite PLA @System.json" @@ -1976,6 +1876,14 @@ "name": "FILL3D PPCF @System", "sub_path": "filament/FILL3D/FILL3D PPCF @System.json" }, + { + "name": "Generic PP-CF @System", + "sub_path": "filament/Generic PP-CF @System.json" + }, + { + "name": "Generic PP-GF @System", + "sub_path": "filament/Generic PP-GF @System.json" + }, { "name": "Bambu PPA-CF @System", "sub_path": "filament/Bambu/Bambu PPA-CF @System.json" @@ -2024,10 +1932,6 @@ "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" - }, { "name": "Elegoo TPU 95A @System", "sub_path": "filament/Elegoo/Elegoo TPU 95A @System.json" @@ -2040,6 +1944,14 @@ "name": "Overture TPU @System", "sub_path": "filament/Overture/Overture TPU @System.json" }, + { + "name": "Elegoo ASA-CF @System", + "sub_path": "filament/Elegoo/Elegoo ASA-CF @System.json" + }, + { + "name": "Elegoo PC-FR @System", + "sub_path": "filament/Elegoo/Elegoo PC-FR @System.json" + }, { "name": "AliZ PETG-CF @System", "sub_path": "filament/AliZ/AliZ PETG-CF @System.json" @@ -2048,9 +1960,97 @@ "name": "AliZ PETG-Metal @System", "sub_path": "filament/AliZ/AliZ PETG-Metal @System.json" }, + { + "name": "Elegoo PET-CF @System", + "sub_path": "filament/Elegoo/Elegoo PET-CF @System.json" + }, + { + "name": "Elegoo PETG HF @System", + "sub_path": "filament/Elegoo/Elegoo PETG HF @System.json" + }, + { + "name": "Elegoo PETG PRO @System", + "sub_path": "filament/Elegoo/Elegoo PETG PRO @System.json" + }, + { + "name": "Elegoo PETG Translucent @System", + "sub_path": "filament/Elegoo/Elegoo PETG Translucent @System.json" + }, + { + "name": "Elegoo PETG-CF @System", + "sub_path": "filament/Elegoo/Elegoo PETG-CF @System.json" + }, + { + "name": "Elegoo PETG-GF @System", + "sub_path": "filament/Elegoo/Elegoo PETG-GF @System.json" + }, + { + "name": "Elegoo Rapid PETG @System", + "sub_path": "filament/Elegoo/Elegoo Rapid PETG @System.json" + }, + { + "name": "Elegoo PLA Basic @System", + "sub_path": "filament/Elegoo/Elegoo PLA Basic @System.json" + }, + { + "name": "Elegoo PLA Galaxy @System", + "sub_path": "filament/Elegoo/Elegoo PLA Galaxy @System.json" + }, + { + "name": "Elegoo PLA Glow @System", + "sub_path": "filament/Elegoo/Elegoo PLA Glow @System.json" + }, + { + "name": "Elegoo PLA Marble @System", + "sub_path": "filament/Elegoo/Elegoo PLA Marble @System.json" + }, + { + "name": "Elegoo PLA Matte @System", + "sub_path": "filament/Elegoo/Elegoo PLA Matte @System.json" + }, + { + "name": "Elegoo PLA PRO @System", + "sub_path": "filament/Elegoo/Elegoo PLA PRO @System.json" + }, + { + "name": "Elegoo PLA Silk @System", + "sub_path": "filament/Elegoo/Elegoo PLA Silk @System.json" + }, + { + "name": "Elegoo PLA Sparkle @System", + "sub_path": "filament/Elegoo/Elegoo PLA Sparkle @System.json" + }, + { + "name": "Elegoo PLA Translucent2 @System", + "sub_path": "filament/Elegoo/Elegoo PLA Translucent2 @System.json" + }, + { + "name": "Elegoo PLA Wood @System", + "sub_path": "filament/Elegoo/Elegoo PLA Wood @System.json" + }, + { + "name": "Elegoo PLA+ @System", + "sub_path": "filament/Elegoo/Elegoo PLA+ @System.json" + }, + { + "name": "Elegoo PLA-CF @System", + "sub_path": "filament/Elegoo/Elegoo PLA-CF @System.json" + }, + { + "name": "Elegoo Rapid PLA+ @System", + "sub_path": "filament/Elegoo/Elegoo Rapid PLA+ @System.json" + }, + { + "name": "PolyLite Dual PLA @System", + "sub_path": "filament/Polymaker/PolyLite Dual PLA @System.json" + }, { "name": "COEX PLA+Silk @System", "sub_path": "filament/COEX/COEX PLA+Silk @System.json" + }, + { + "name": "Elegoo Rapid TPU 95A @System", + "sub_path": "filament/Elegoo/Elegoo Rapid TPU 95A @System.json" } ], "process_list": [], diff --git a/resources/profiles/Phrozen.json b/resources/profiles/Phrozen.json index 0c711816c1..fc5b795c37 100644 --- a/resources/profiles/Phrozen.json +++ b/resources/profiles/Phrozen.json @@ -1,6 +1,6 @@ { "name": "Phrozen", - "version": "02.04.00.03", + "version": "02.04.00.04", "force_update": "0", "description": "Phrozen configurations", "machine_model_list": [ diff --git a/resources/profiles/Phrozen/machine/_fdm_machine_common.json b/resources/profiles/Phrozen/machine/_fdm_machine_common.json deleted file mode 100644 index 823f9a173b..0000000000 --- a/resources/profiles/Phrozen/machine/_fdm_machine_common.json +++ /dev/null @@ -1,139 +0,0 @@ -{ - "type": "machine", - "name": "fdm_machine_common", - "from": "system", - "instantiation": "false", - "gcode_flavor": "marlin", - "machine_start_gcode": "", - "machine_end_gcode": "", - "extruder_colour": [ - "#018001" - ], - "extruder_offset": [ - "0x0" - ], - "machine_max_acceleration_e": [ - "5000", - "5000" - ], - "machine_max_acceleration_extruding": [ - "2000", - "2000" - ], - "machine_max_acceleration_retracting": [ - "5000", - "5000" - ], - "machine_max_acceleration_travel": [ - "3000", - "3000" - ], - "machine_max_acceleration_x": [ - "2000", - "2000" - ], - "machine_max_acceleration_y": [ - "2000", - "2000" - ], - "machine_max_acceleration_z": [ - "300", - "200" - ], - "machine_max_speed_e": [ - "25", - "25" - ], - "machine_max_speed_x": [ - "300", - "200" - ], - "machine_max_speed_y": [ - "300", - "200" - ], - "machine_max_speed_z": [ - "12", - "12" - ], - "machine_max_jerk_e": [ - "2.5", - "2.5" - ], - "machine_max_jerk_x": [ - "9", - "9" - ], - "machine_max_jerk_y": [ - "9", - "9" - ], - "machine_max_jerk_z": [ - "0.2", - "0.4" - ], - "machine_min_extruding_rate": [ - "0", - "0" - ], - "machine_min_travel_rate": [ - "0", - "0" - ], - "max_layer_height": [ - "0.3" - ], - "min_layer_height": [ - "0.08" - ], - "printable_height": "300", - "extruder_clearance_radius": "65", - "extruder_clearance_height_to_rod": "36", - "extruder_clearance_height_to_lid": "140", - "nozzle_diameter": [ - "0.4" - ], - "printer_settings_id": "", - "printer_technology": "FFF", - "printer_variant": "0.4", - "retraction_minimum_travel": [ - "1" - ], - "retract_before_wipe": [ - "70%" - ], - "retract_when_changing_layer": [ - "1" - ], - "retraction_length": [ - "0.8" - ], - "retract_length_toolchange": [ - "2" - ], - "z_hop": [ - "0.4" - ], - "retract_restart_extra": [ - "0" - ], - "retract_restart_extra_toolchange": [ - "0" - ], - "retraction_speed": [ - "30" - ], - "deretraction_speed": [ - "30" - ], - "silent_mode": "0", - "single_extruder_multi_material": "1", - "change_filament_gcode": "", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "machine_pause_gcode": "M400 U1\n", - "wipe": [ - "1" - ], - "z_hop_types": "Normal Lift" -} diff --git a/resources/profiles/Prusa.json b/resources/profiles/Prusa.json index ecbbe179e7..57d1e2c282 100644 --- a/resources/profiles/Prusa.json +++ b/resources/profiles/Prusa.json @@ -1448,34 +1448,10 @@ "name": "fdm_filament_tpu", "sub_path": "filament/fdm_filament_tpu.json" }, - { - "name": "Generic ABS @Prusa base", - "sub_path": "filament/Generic ABS @Prusa base.json" - }, - { - "name": "Generic ABS @Prusa", - "sub_path": "filament/Generic ABS @Prusa.json" - }, { "name": "Generic ABS @Prusa CORE One", "sub_path": "filament/Generic ABS @Prusa CORE One.json" }, - { - "name": "Generic ABS @Prusa MINIIS", - "sub_path": "filament/Generic ABS @Prusa MINIIS.json" - }, - { - "name": "Generic ABS @Prusa MINIIS 0.25", - "sub_path": "filament/Generic ABS @Prusa MINIIS 0.25.json" - }, - { - "name": "Generic ABS @Prusa MINIIS 0.6", - "sub_path": "filament/Generic ABS @Prusa MINIIS 0.6.json" - }, - { - "name": "Generic ABS @Prusa MINIIS 0.8", - "sub_path": "filament/Generic ABS @Prusa MINIIS 0.8.json" - }, { "name": "Generic ABS @Prusa MK3.5", "sub_path": "filament/Generic ABS @Prusa MK3.5.json" @@ -1492,37 +1468,13 @@ "name": "Generic ABS @Prusa MK3.5 0.8", "sub_path": "filament/Generic ABS @Prusa MK3.5 0.8.json" }, - { - "name": "Generic ABS @Prusa MK4", - "sub_path": "filament/Generic ABS @Prusa MK4.json" - }, { "name": "Generic ABS @Prusa MK4S", "sub_path": "filament/Generic ABS @Prusa MK4S.json" }, { - "name": "Generic ABS @Prusa XL", - "sub_path": "filament/Generic ABS @Prusa XL.json" - }, - { - "name": "Generic ABS @Prusa XL 5T", - "sub_path": "filament/Generic ABS @Prusa XL 5T.json" - }, - { - "name": "Generic ABS HF @Prusa base", - "sub_path": "filament/Generic ABS HF @Prusa base.json" - }, - { - "name": "Generic ABS HF @Prusa MINIIS", - "sub_path": "filament/Generic ABS HF @Prusa MINIIS.json" - }, - { - "name": "Generic ABS HF @Prusa MINIIS 0.6", - "sub_path": "filament/Generic ABS HF @Prusa MINIIS 0.6.json" - }, - { - "name": "Generic ABS HF @Prusa MINIIS 0.8", - "sub_path": "filament/Generic ABS HF @Prusa MINIIS 0.8.json" + "name": "Generic ABS @Prusa base", + "sub_path": "filament/Generic ABS @Prusa base.json" }, { "name": "Generic ABS HF @Prusa MK3.5", @@ -1536,6 +1488,10 @@ "name": "Generic ABS HF @Prusa MK3.5 0.8", "sub_path": "filament/Generic ABS HF @Prusa MK3.5 0.8.json" }, + { + "name": "Generic ABS HF @Prusa base", + "sub_path": "filament/Generic ABS HF @Prusa base.json" + }, { "name": "Generic ASA @Prusa", "sub_path": "filament/Generic ASA @Prusa.json" @@ -1584,22 +1540,6 @@ "name": "Generic ASA @Prusa MK4S", "sub_path": "filament/Generic ASA @Prusa MK4S.json" }, - { - "name": "Generic ASA HF @Prusa base", - "sub_path": "filament/Generic ASA HF @Prusa base.json" - }, - { - "name": "Generic ASA HF @Prusa MINIIS", - "sub_path": "filament/Generic ASA HF @Prusa MINIIS.json" - }, - { - "name": "Generic ASA HF @Prusa MINIIS 0.6", - "sub_path": "filament/Generic ASA HF @Prusa MINIIS 0.6.json" - }, - { - "name": "Generic ASA HF @Prusa MINIIS 0.8", - "sub_path": "filament/Generic ASA HF @Prusa MINIIS 0.8.json" - }, { "name": "Generic ASA HF @Prusa MK3.5", "sub_path": "filament/Generic ASA HF @Prusa MK3.5.json" @@ -1612,6 +1552,10 @@ "name": "Generic ASA HF @Prusa MK3.5 0.8", "sub_path": "filament/Generic ASA HF @Prusa MK3.5 0.8.json" }, + { + "name": "Generic ASA HF @Prusa base", + "sub_path": "filament/Generic ASA HF @Prusa base.json" + }, { "name": "Prusament ASA @CORE One", "sub_path": "filament/Prusament ASA @CORE One.json" @@ -1636,30 +1580,6 @@ "name": "Generic TPU @Prusa CORE One", "sub_path": "filament/Generic TPU @Prusa CORE One.json" }, - { - "name": "Generic PA @Prusa base", - "sub_path": "filament/Generic PA @Prusa base.json" - }, - { - "name": "Generic PA @Prusa", - "sub_path": "filament/Generic PA @Prusa.json" - }, - { - "name": "Generic PA @Prusa MINIIS", - "sub_path": "filament/Generic PA @Prusa MINIIS.json" - }, - { - "name": "Generic PA @Prusa MINIIS 0.25", - "sub_path": "filament/Generic PA @Prusa MINIIS 0.25.json" - }, - { - "name": "Generic PA @Prusa MINIIS 0.6", - "sub_path": "filament/Generic PA @Prusa MINIIS 0.6.json" - }, - { - "name": "Generic PA @Prusa MINIIS 0.8", - "sub_path": "filament/Generic PA @Prusa MINIIS 0.8.json" - }, { "name": "Generic PA @Prusa MK3.5", "sub_path": "filament/Generic PA @Prusa MK3.5.json" @@ -1677,28 +1597,8 @@ "sub_path": "filament/Generic PA @Prusa MK3.5 0.8.json" }, { - "name": "Generic PA-CF @Prusa base", - "sub_path": "filament/Generic PA-CF @Prusa base.json" - }, - { - "name": "Generic PA-CF @Prusa", - "sub_path": "filament/Generic PA-CF @Prusa.json" - }, - { - "name": "Generic PA-CF @Prusa MINIIS", - "sub_path": "filament/Generic PA-CF @Prusa MINIIS.json" - }, - { - "name": "Generic PA-CF @Prusa MINIIS 0.25", - "sub_path": "filament/Generic PA-CF @Prusa MINIIS 0.25.json" - }, - { - "name": "Generic PA-CF @Prusa MINIIS 0.6", - "sub_path": "filament/Generic PA-CF @Prusa MINIIS 0.6.json" - }, - { - "name": "Generic PA-CF @Prusa MINIIS 0.8", - "sub_path": "filament/Generic PA-CF @Prusa MINIIS 0.8.json" + "name": "Generic PA @Prusa base", + "sub_path": "filament/Generic PA @Prusa base.json" }, { "name": "Generic PA-CF @Prusa MK3.5", @@ -1716,6 +1616,10 @@ "name": "Generic PA-CF @Prusa MK3.5 0.8", "sub_path": "filament/Generic PA-CF @Prusa MK3.5 0.8.json" }, + { + "name": "Generic PA-CF @Prusa base", + "sub_path": "filament/Generic PA-CF @Prusa base.json" + }, { "name": "Prusament PA-CF @CORE One", "sub_path": "filament/Prusament PA-CF @CORE One.json" @@ -1764,22 +1668,6 @@ "name": "Generic PC @Prusa MK3.5 0.8", "sub_path": "filament/Generic PC @Prusa MK3.5 0.8.json" }, - { - "name": "Generic PC HF @Prusa base", - "sub_path": "filament/Generic PC HF @Prusa base.json" - }, - { - "name": "Generic PC HF @Prusa MINIIS", - "sub_path": "filament/Generic PC HF @Prusa MINIIS.json" - }, - { - "name": "Generic PC HF @Prusa MINIIS 0.6", - "sub_path": "filament/Generic PC HF @Prusa MINIIS 0.6.json" - }, - { - "name": "Generic PC HF @Prusa MINIIS 0.8", - "sub_path": "filament/Generic PC HF @Prusa MINIIS 0.8.json" - }, { "name": "Generic PC HF @Prusa MK3.5", "sub_path": "filament/Generic PC HF @Prusa MK3.5.json" @@ -1792,6 +1680,10 @@ "name": "Generic PC HF @Prusa MK3.5 0.8", "sub_path": "filament/Generic PC HF @Prusa MK3.5 0.8.json" }, + { + "name": "Generic PC HF @Prusa base", + "sub_path": "filament/Generic PC HF @Prusa base.json" + }, { "name": "Prusament PC Blend @CORE One", "sub_path": "filament/Prusament PC Blend @CORE One.json" @@ -1816,34 +1708,10 @@ "name": "Prusament PC-CF @XL 5T", "sub_path": "filament/Prusament PC-CF @XL 5T.json" }, - { - "name": "Generic PETG @Prusa base", - "sub_path": "filament/Generic PETG @Prusa base.json" - }, - { - "name": "Generic PETG @Prusa", - "sub_path": "filament/Generic PETG @Prusa.json" - }, { "name": "Generic PETG @Prusa CORE One", "sub_path": "filament/Generic PETG @Prusa CORE One.json" }, - { - "name": "Generic PETG @Prusa MINIIS", - "sub_path": "filament/Generic PETG @Prusa MINIIS.json" - }, - { - "name": "Generic PETG @Prusa MINIIS 0.25", - "sub_path": "filament/Generic PETG @Prusa MINIIS 0.25.json" - }, - { - "name": "Generic PETG @Prusa MINIIS 0.6", - "sub_path": "filament/Generic PETG @Prusa MINIIS 0.6.json" - }, - { - "name": "Generic PETG @Prusa MINIIS 0.8", - "sub_path": "filament/Generic PETG @Prusa MINIIS 0.8.json" - }, { "name": "Generic PETG @Prusa MK3.5", "sub_path": "filament/Generic PETG @Prusa MK3.5.json" @@ -1860,37 +1728,13 @@ "name": "Generic PETG @Prusa MK3.5 0.8", "sub_path": "filament/Generic PETG @Prusa MK3.5 0.8.json" }, - { - "name": "Generic PETG @Prusa MK4", - "sub_path": "filament/Generic PETG @Prusa MK4.json" - }, { "name": "Generic PETG @Prusa MK4S", "sub_path": "filament/Generic PETG @Prusa MK4S.json" }, { - "name": "Generic PETG @Prusa XL", - "sub_path": "filament/Generic PETG @Prusa XL.json" - }, - { - "name": "Generic PETG @Prusa XL 5T", - "sub_path": "filament/Generic PETG @Prusa XL 5T.json" - }, - { - "name": "Generic PETG HF @Prusa base", - "sub_path": "filament/Generic PETG HF @Prusa base.json" - }, - { - "name": "Generic PETG HF @Prusa MINIIS", - "sub_path": "filament/Generic PETG HF @Prusa MINIIS.json" - }, - { - "name": "Generic PETG HF @Prusa MINIIS 0.6", - "sub_path": "filament/Generic PETG HF @Prusa MINIIS 0.6.json" - }, - { - "name": "Generic PETG HF @Prusa MINIIS 0.8", - "sub_path": "filament/Generic PETG HF @Prusa MINIIS 0.8.json" + "name": "Generic PETG @Prusa base", + "sub_path": "filament/Generic PETG @Prusa base.json" }, { "name": "Generic PETG HF @Prusa MK3.5", @@ -1904,6 +1748,10 @@ "name": "Generic PETG HF @Prusa MK3.5 0.8", "sub_path": "filament/Generic PETG HF @Prusa MK3.5 0.8.json" }, + { + "name": "Generic PETG HF @Prusa base", + "sub_path": "filament/Generic PETG HF @Prusa base.json" + }, { "name": "Prusament PETG @CORE One", "sub_path": "filament/Prusament PETG @CORE One.json" @@ -1912,42 +1760,10 @@ "name": "Prusament PETG @base", "sub_path": "filament/Prusament PETG @base.json" }, - { - "name": "Prusament PETG @XL", - "sub_path": "filament/Prusament PETG @XL.json" - }, - { - "name": "Prusament PETG @XL 5T", - "sub_path": "filament/Prusament PETG @XL 5T.json" - }, - { - "name": "Generic PLA @Prusa base", - "sub_path": "filament/Generic PLA @Prusa base.json" - }, - { - "name": "Generic PLA @Prusa", - "sub_path": "filament/Generic PLA @Prusa.json" - }, { "name": "Generic PLA @Prusa CORE One", "sub_path": "filament/Generic PLA @Prusa CORE One.json" }, - { - "name": "Generic PLA @Prusa MINIIS", - "sub_path": "filament/Generic PLA @Prusa MINIIS.json" - }, - { - "name": "Generic PLA @Prusa MINIIS 0.25", - "sub_path": "filament/Generic PLA @Prusa MINIIS 0.25.json" - }, - { - "name": "Generic PLA @Prusa MINIIS 0.6", - "sub_path": "filament/Generic PLA @Prusa MINIIS 0.6.json" - }, - { - "name": "Generic PLA @Prusa MINIIS 0.8", - "sub_path": "filament/Generic PLA @Prusa MINIIS 0.8.json" - }, { "name": "Generic PLA @Prusa MK3.5", "sub_path": "filament/Generic PLA @Prusa MK3.5.json" @@ -1964,37 +1780,13 @@ "name": "Generic PLA @Prusa MK3.5 0.8", "sub_path": "filament/Generic PLA @Prusa MK3.5 0.8.json" }, - { - "name": "Generic PLA @Prusa MK4", - "sub_path": "filament/Generic PLA @Prusa MK4.json" - }, { "name": "Generic PLA @Prusa MK4S", "sub_path": "filament/Generic PLA @Prusa MK4S.json" }, { - "name": "Generic PLA @Prusa XL", - "sub_path": "filament/Generic PLA @Prusa XL.json" - }, - { - "name": "Generic PLA @Prusa XL 5T", - "sub_path": "filament/Generic PLA @Prusa XL 5T.json" - }, - { - "name": "Generic PLA HF @Prusa base", - "sub_path": "filament/Generic PLA HF @Prusa base.json" - }, - { - "name": "Generic PLA HF @Prusa MINIIS", - "sub_path": "filament/Generic PLA HF @Prusa MINIIS.json" - }, - { - "name": "Generic PLA HF @Prusa MINIIS 0.6", - "sub_path": "filament/Generic PLA HF @Prusa MINIIS 0.6.json" - }, - { - "name": "Generic PLA HF @Prusa MINIIS 0.8", - "sub_path": "filament/Generic PLA HF @Prusa MINIIS 0.8.json" + "name": "Generic PLA @Prusa base", + "sub_path": "filament/Generic PLA @Prusa base.json" }, { "name": "Generic PLA HF @Prusa MK3.5", @@ -2008,34 +1800,14 @@ "name": "Generic PLA HF @Prusa MK3.5 0.8", "sub_path": "filament/Generic PLA HF @Prusa MK3.5 0.8.json" }, + { + "name": "Generic PLA HF @Prusa base", + "sub_path": "filament/Generic PLA HF @Prusa base.json" + }, { "name": "Generic PLA Silk @Prusa CORE One", "sub_path": "filament/Generic PLA Silk @Prusa CORE One.json" }, - { - "name": "Generic PLA-CF @Prusa base", - "sub_path": "filament/Generic PLA-CF @Prusa base.json" - }, - { - "name": "Generic PLA-CF @Prusa", - "sub_path": "filament/Generic PLA-CF @Prusa.json" - }, - { - "name": "Generic PLA-CF @Prusa MINIIS", - "sub_path": "filament/Generic PLA-CF @Prusa MINIIS.json" - }, - { - "name": "Generic PLA-CF @Prusa MINIIS 0.25", - "sub_path": "filament/Generic PLA-CF @Prusa MINIIS 0.25.json" - }, - { - "name": "Generic PLA-CF @Prusa MINIIS 0.6", - "sub_path": "filament/Generic PLA-CF @Prusa MINIIS 0.6.json" - }, - { - "name": "Generic PLA-CF @Prusa MINIIS 0.8", - "sub_path": "filament/Generic PLA-CF @Prusa MINIIS 0.8.json" - }, { "name": "Generic PLA-CF @Prusa MK3.5", "sub_path": "filament/Generic PLA-CF @Prusa MK3.5.json" @@ -2052,6 +1824,10 @@ "name": "Generic PLA-CF @Prusa MK3.5 0.8", "sub_path": "filament/Generic PLA-CF @Prusa MK3.5 0.8.json" }, + { + "name": "Generic PLA-CF @Prusa base", + "sub_path": "filament/Generic PLA-CF @Prusa base.json" + }, { "name": "Prusament PLA @CORE One", "sub_path": "filament/Prusament PLA @CORE One.json" @@ -2060,14 +1836,6 @@ "name": "Prusament PLA @base", "sub_path": "filament/Prusament PLA @base.json" }, - { - "name": "Prusament PLA @XL", - "sub_path": "filament/Prusament PLA @XL.json" - }, - { - "name": "Prusament PLA @XL 5T", - "sub_path": "filament/Prusament PLA @XL 5T.json" - }, { "name": "Prusament rPLA @CORE One", "sub_path": "filament/Prusament rPLA @CORE One.json" @@ -2076,38 +1844,6 @@ "name": "Prusament rPLA @base", "sub_path": "filament/Prusament rPLA @base.json" }, - { - "name": "Prusament rPLA @XL", - "sub_path": "filament/Prusament rPLA @XL.json" - }, - { - "name": "Prusament rPLA @XL 5T", - "sub_path": "filament/Prusament rPLA @XL 5T.json" - }, - { - "name": "Generic PVA @Prusa base", - "sub_path": "filament/Generic PVA @Prusa base.json" - }, - { - "name": "Generic PVA @Prusa", - "sub_path": "filament/Generic PVA @Prusa.json" - }, - { - "name": "Generic PVA @Prusa MINIIS", - "sub_path": "filament/Generic PVA @Prusa MINIIS.json" - }, - { - "name": "Generic PVA @Prusa MINIIS 0.25", - "sub_path": "filament/Generic PVA @Prusa MINIIS 0.25.json" - }, - { - "name": "Generic PVA @Prusa MINIIS 0.6", - "sub_path": "filament/Generic PVA @Prusa MINIIS 0.6.json" - }, - { - "name": "Generic PVA @Prusa MINIIS 0.8", - "sub_path": "filament/Generic PVA @Prusa MINIIS 0.8.json" - }, { "name": "Generic PVA @Prusa MK3.5", "sub_path": "filament/Generic PVA @Prusa MK3.5.json" @@ -2125,20 +1861,8 @@ "sub_path": "filament/Generic PVA @Prusa MK3.5 0.8.json" }, { - "name": "Generic PVA HF @Prusa base", - "sub_path": "filament/Generic PVA HF @Prusa base.json" - }, - { - "name": "Generic PVA HF @Prusa MINIIS", - "sub_path": "filament/Generic PVA HF @Prusa MINIIS.json" - }, - { - "name": "Generic PVA HF @Prusa MINIIS 0.6", - "sub_path": "filament/Generic PVA HF @Prusa MINIIS 0.6.json" - }, - { - "name": "Generic PVA HF @Prusa MINIIS 0.8", - "sub_path": "filament/Generic PVA HF @Prusa MINIIS 0.8.json" + "name": "Generic PVA @Prusa base", + "sub_path": "filament/Generic PVA @Prusa base.json" }, { "name": "Generic PVA HF @Prusa MK3.5", @@ -2152,6 +1876,10 @@ "name": "Generic PVA HF @Prusa MK3.5 0.8", "sub_path": "filament/Generic PVA HF @Prusa MK3.5 0.8.json" }, + { + "name": "Generic PVA HF @Prusa base", + "sub_path": "filament/Generic PVA HF @Prusa base.json" + }, { "name": "Prusament PVB @CORE One", "sub_path": "filament/Prusament PVB @CORE One.json" @@ -2164,42 +1892,26 @@ "name": "Prusament PVB @XL 5T", "sub_path": "filament/Prusament PVB @XL 5T.json" }, - { - "name": "Generic TPU @Prusa base", - "sub_path": "filament/Generic TPU @Prusa base.json" - }, - { - "name": "Generic TPU @Prusa", - "sub_path": "filament/Generic TPU @Prusa.json" - }, - { - "name": "Generic TPU @Prusa MINIIS", - "sub_path": "filament/Generic TPU @Prusa MINIIS.json" - }, { "name": "Generic TPU @Prusa MK3.5", "sub_path": "filament/Generic TPU @Prusa MK3.5.json" }, - { - "name": "Generic TPU @Prusa MK4", - "sub_path": "filament/Generic TPU @Prusa MK4.json" - }, { "name": "Generic TPU @Prusa MK4S", "sub_path": "filament/Generic TPU @Prusa MK4S.json" }, { - "name": "Generic TPU HF @Prusa base", - "sub_path": "filament/Generic TPU HF @Prusa base.json" - }, - { - "name": "Generic TPU HF @Prusa MINIIS", - "sub_path": "filament/Generic TPU HF @Prusa MINIIS.json" + "name": "Generic TPU @Prusa base", + "sub_path": "filament/Generic TPU @Prusa base.json" }, { "name": "Generic TPU HF @Prusa MK3.5", "sub_path": "filament/Generic TPU HF @Prusa MK3.5.json" }, + { + "name": "Generic TPU HF @Prusa base", + "sub_path": "filament/Generic TPU HF @Prusa base.json" + }, { "name": "Generic ABS @Prusa CORE One 0.6", "sub_path": "filament/Generic ABS @Prusa CORE One 0.6.json" @@ -2236,6 +1948,50 @@ "name": "Generic ABS @Prusa MK4S HF0.4", "sub_path": "filament/Generic ABS @Prusa MK4S HF0.4.json" }, + { + "name": "Generic ABS @Prusa", + "sub_path": "filament/Generic ABS @Prusa.json" + }, + { + "name": "Generic ABS @Prusa MINIIS", + "sub_path": "filament/Generic ABS @Prusa MINIIS.json" + }, + { + "name": "Generic ABS @Prusa MINIIS 0.25", + "sub_path": "filament/Generic ABS @Prusa MINIIS 0.25.json" + }, + { + "name": "Generic ABS @Prusa MINIIS 0.6", + "sub_path": "filament/Generic ABS @Prusa MINIIS 0.6.json" + }, + { + "name": "Generic ABS @Prusa MINIIS 0.8", + "sub_path": "filament/Generic ABS @Prusa MINIIS 0.8.json" + }, + { + "name": "Generic ABS @Prusa MK4", + "sub_path": "filament/Generic ABS @Prusa MK4.json" + }, + { + "name": "Generic ABS @Prusa XL", + "sub_path": "filament/Generic ABS @Prusa XL.json" + }, + { + "name": "Generic ABS @Prusa XL 5T", + "sub_path": "filament/Generic ABS @Prusa XL 5T.json" + }, + { + "name": "Generic ABS HF @Prusa MINIIS", + "sub_path": "filament/Generic ABS HF @Prusa MINIIS.json" + }, + { + "name": "Generic ABS HF @Prusa MINIIS 0.6", + "sub_path": "filament/Generic ABS HF @Prusa MINIIS 0.6.json" + }, + { + "name": "Generic ABS HF @Prusa MINIIS 0.8", + "sub_path": "filament/Generic ABS HF @Prusa MINIIS 0.8.json" + }, { "name": "Generic ASA @Prusa CORE One 0.6", "sub_path": "filament/Generic ASA @Prusa CORE One 0.6.json" @@ -2272,6 +2028,18 @@ "name": "Generic ASA @Prusa MK4S HF0.4", "sub_path": "filament/Generic ASA @Prusa MK4S HF0.4.json" }, + { + "name": "Generic ASA HF @Prusa MINIIS", + "sub_path": "filament/Generic ASA HF @Prusa MINIIS.json" + }, + { + "name": "Generic ASA HF @Prusa MINIIS 0.6", + "sub_path": "filament/Generic ASA HF @Prusa MINIIS 0.6.json" + }, + { + "name": "Generic ASA HF @Prusa MINIIS 0.8", + "sub_path": "filament/Generic ASA HF @Prusa MINIIS 0.8.json" + }, { "name": "Prusament ASA @CORE One 0.6", "sub_path": "filament/Prusament ASA @CORE One 0.6.json" @@ -2304,6 +2072,46 @@ "name": "Generic TPU @Prusa CORE One 0.8", "sub_path": "filament/Generic TPU @Prusa CORE One 0.8.json" }, + { + "name": "Generic PA @Prusa", + "sub_path": "filament/Generic PA @Prusa.json" + }, + { + "name": "Generic PA @Prusa MINIIS", + "sub_path": "filament/Generic PA @Prusa MINIIS.json" + }, + { + "name": "Generic PA @Prusa MINIIS 0.25", + "sub_path": "filament/Generic PA @Prusa MINIIS 0.25.json" + }, + { + "name": "Generic PA @Prusa MINIIS 0.6", + "sub_path": "filament/Generic PA @Prusa MINIIS 0.6.json" + }, + { + "name": "Generic PA @Prusa MINIIS 0.8", + "sub_path": "filament/Generic PA @Prusa MINIIS 0.8.json" + }, + { + "name": "Generic PA-CF @Prusa", + "sub_path": "filament/Generic PA-CF @Prusa.json" + }, + { + "name": "Generic PA-CF @Prusa MINIIS", + "sub_path": "filament/Generic PA-CF @Prusa MINIIS.json" + }, + { + "name": "Generic PA-CF @Prusa MINIIS 0.25", + "sub_path": "filament/Generic PA-CF @Prusa MINIIS 0.25.json" + }, + { + "name": "Generic PA-CF @Prusa MINIIS 0.6", + "sub_path": "filament/Generic PA-CF @Prusa MINIIS 0.6.json" + }, + { + "name": "Generic PA-CF @Prusa MINIIS 0.8", + "sub_path": "filament/Generic PA-CF @Prusa MINIIS 0.8.json" + }, { "name": "Prusament PA-CF @CORE One 0.6", "sub_path": "filament/Prusament PA-CF @CORE One 0.6.json" @@ -2312,6 +2120,18 @@ "name": "Prusament PA-CF @CORE One 0.8", "sub_path": "filament/Prusament PA-CF @CORE One 0.8.json" }, + { + "name": "Generic PC HF @Prusa MINIIS", + "sub_path": "filament/Generic PC HF @Prusa MINIIS.json" + }, + { + "name": "Generic PC HF @Prusa MINIIS 0.6", + "sub_path": "filament/Generic PC HF @Prusa MINIIS 0.6.json" + }, + { + "name": "Generic PC HF @Prusa MINIIS 0.8", + "sub_path": "filament/Generic PC HF @Prusa MINIIS 0.8.json" + }, { "name": "Prusament PC Blend @CORE One 0.6", "sub_path": "filament/Prusament PC Blend @CORE One 0.6.json" @@ -2380,6 +2200,50 @@ "name": "Generic PETG @Prusa MK4S HF0.4", "sub_path": "filament/Generic PETG @Prusa MK4S HF0.4.json" }, + { + "name": "Generic PETG @Prusa", + "sub_path": "filament/Generic PETG @Prusa.json" + }, + { + "name": "Generic PETG @Prusa MINIIS", + "sub_path": "filament/Generic PETG @Prusa MINIIS.json" + }, + { + "name": "Generic PETG @Prusa MINIIS 0.25", + "sub_path": "filament/Generic PETG @Prusa MINIIS 0.25.json" + }, + { + "name": "Generic PETG @Prusa MINIIS 0.6", + "sub_path": "filament/Generic PETG @Prusa MINIIS 0.6.json" + }, + { + "name": "Generic PETG @Prusa MINIIS 0.8", + "sub_path": "filament/Generic PETG @Prusa MINIIS 0.8.json" + }, + { + "name": "Generic PETG @Prusa MK4", + "sub_path": "filament/Generic PETG @Prusa MK4.json" + }, + { + "name": "Generic PETG @Prusa XL", + "sub_path": "filament/Generic PETG @Prusa XL.json" + }, + { + "name": "Generic PETG @Prusa XL 5T", + "sub_path": "filament/Generic PETG @Prusa XL 5T.json" + }, + { + "name": "Generic PETG HF @Prusa MINIIS", + "sub_path": "filament/Generic PETG HF @Prusa MINIIS.json" + }, + { + "name": "Generic PETG HF @Prusa MINIIS 0.6", + "sub_path": "filament/Generic PETG HF @Prusa MINIIS 0.6.json" + }, + { + "name": "Generic PETG HF @Prusa MINIIS 0.8", + "sub_path": "filament/Generic PETG HF @Prusa MINIIS 0.8.json" + }, { "name": "Prusament PETG @CORE One 0.6", "sub_path": "filament/Prusament PETG @CORE One 0.6.json" @@ -2404,6 +2268,14 @@ "name": "Prusament PETG @CORE One HF 0.8", "sub_path": "filament/Prusament PETG @CORE One HF 0.8.json" }, + { + "name": "Prusament PETG @XL", + "sub_path": "filament/Prusament PETG @XL.json" + }, + { + "name": "Prusament PETG @XL 5T", + "sub_path": "filament/Prusament PETG @XL 5T.json" + }, { "name": "Generic PLA @Prusa CORE One 0.6", "sub_path": "filament/Generic PLA @Prusa CORE One 0.6.json" @@ -2444,6 +2316,50 @@ "name": "Generic PLA Silk @Prusa MK4S", "sub_path": "filament/Generic PLA Silk @Prusa MK4S.json" }, + { + "name": "Generic PLA @Prusa", + "sub_path": "filament/Generic PLA @Prusa.json" + }, + { + "name": "Generic PLA @Prusa MINIIS", + "sub_path": "filament/Generic PLA @Prusa MINIIS.json" + }, + { + "name": "Generic PLA @Prusa MINIIS 0.25", + "sub_path": "filament/Generic PLA @Prusa MINIIS 0.25.json" + }, + { + "name": "Generic PLA @Prusa MINIIS 0.6", + "sub_path": "filament/Generic PLA @Prusa MINIIS 0.6.json" + }, + { + "name": "Generic PLA @Prusa MINIIS 0.8", + "sub_path": "filament/Generic PLA @Prusa MINIIS 0.8.json" + }, + { + "name": "Generic PLA @Prusa MK4", + "sub_path": "filament/Generic PLA @Prusa MK4.json" + }, + { + "name": "Generic PLA @Prusa XL", + "sub_path": "filament/Generic PLA @Prusa XL.json" + }, + { + "name": "Generic PLA @Prusa XL 5T", + "sub_path": "filament/Generic PLA @Prusa XL 5T.json" + }, + { + "name": "Generic PLA HF @Prusa MINIIS", + "sub_path": "filament/Generic PLA HF @Prusa MINIIS.json" + }, + { + "name": "Generic PLA HF @Prusa MINIIS 0.6", + "sub_path": "filament/Generic PLA HF @Prusa MINIIS 0.6.json" + }, + { + "name": "Generic PLA HF @Prusa MINIIS 0.8", + "sub_path": "filament/Generic PLA HF @Prusa MINIIS 0.8.json" + }, { "name": "Generic PLA Silk @Prusa CORE One 0.6", "sub_path": "filament/Generic PLA Silk @Prusa CORE One 0.6.json" @@ -2452,6 +2368,26 @@ "name": "Generic PLA Silk @Prusa CORE One 0.8", "sub_path": "filament/Generic PLA Silk @Prusa CORE One 0.8.json" }, + { + "name": "Generic PLA-CF @Prusa", + "sub_path": "filament/Generic PLA-CF @Prusa.json" + }, + { + "name": "Generic PLA-CF @Prusa MINIIS", + "sub_path": "filament/Generic PLA-CF @Prusa MINIIS.json" + }, + { + "name": "Generic PLA-CF @Prusa MINIIS 0.25", + "sub_path": "filament/Generic PLA-CF @Prusa MINIIS 0.25.json" + }, + { + "name": "Generic PLA-CF @Prusa MINIIS 0.6", + "sub_path": "filament/Generic PLA-CF @Prusa MINIIS 0.6.json" + }, + { + "name": "Generic PLA-CF @Prusa MINIIS 0.8", + "sub_path": "filament/Generic PLA-CF @Prusa MINIIS 0.8.json" + }, { "name": "Prusament PLA @CORE One 0.6", "sub_path": "filament/Prusament PLA @CORE One 0.6.json" @@ -2476,6 +2412,14 @@ "name": "Prusament PLA @CORE One HF 0.8", "sub_path": "filament/Prusament PLA @CORE One HF 0.8.json" }, + { + "name": "Prusament PLA @XL", + "sub_path": "filament/Prusament PLA @XL.json" + }, + { + "name": "Prusament PLA @XL 5T", + "sub_path": "filament/Prusament PLA @XL 5T.json" + }, { "name": "Prusament rPLA @CORE One 0.6", "sub_path": "filament/Prusament rPLA @CORE One 0.6.json" @@ -2484,6 +2428,46 @@ "name": "Prusament rPLA @CORE One 0.8", "sub_path": "filament/Prusament rPLA @CORE One 0.8.json" }, + { + "name": "Prusament rPLA @XL", + "sub_path": "filament/Prusament rPLA @XL.json" + }, + { + "name": "Prusament rPLA @XL 5T", + "sub_path": "filament/Prusament rPLA @XL 5T.json" + }, + { + "name": "Generic PVA @Prusa", + "sub_path": "filament/Generic PVA @Prusa.json" + }, + { + "name": "Generic PVA @Prusa MINIIS", + "sub_path": "filament/Generic PVA @Prusa MINIIS.json" + }, + { + "name": "Generic PVA @Prusa MINIIS 0.25", + "sub_path": "filament/Generic PVA @Prusa MINIIS 0.25.json" + }, + { + "name": "Generic PVA @Prusa MINIIS 0.6", + "sub_path": "filament/Generic PVA @Prusa MINIIS 0.6.json" + }, + { + "name": "Generic PVA @Prusa MINIIS 0.8", + "sub_path": "filament/Generic PVA @Prusa MINIIS 0.8.json" + }, + { + "name": "Generic PVA HF @Prusa MINIIS", + "sub_path": "filament/Generic PVA HF @Prusa MINIIS.json" + }, + { + "name": "Generic PVA HF @Prusa MINIIS 0.6", + "sub_path": "filament/Generic PVA HF @Prusa MINIIS 0.6.json" + }, + { + "name": "Generic PVA HF @Prusa MINIIS 0.8", + "sub_path": "filament/Generic PVA HF @Prusa MINIIS 0.8.json" + }, { "name": "Prusament PVB @CORE One 0.6", "sub_path": "filament/Prusament PVB @CORE One 0.6.json" @@ -2500,6 +2484,22 @@ "name": "Generic TPU @Prusa MK4S 0.8", "sub_path": "filament/Generic TPU @Prusa MK4S 0.8.json" }, + { + "name": "Generic TPU @Prusa", + "sub_path": "filament/Generic TPU @Prusa.json" + }, + { + "name": "Generic TPU @Prusa MINIIS", + "sub_path": "filament/Generic TPU @Prusa MINIIS.json" + }, + { + "name": "Generic TPU @Prusa MK4", + "sub_path": "filament/Generic TPU @Prusa MK4.json" + }, + { + "name": "Generic TPU HF @Prusa MINIIS", + "sub_path": "filament/Generic TPU HF @Prusa MINIIS.json" + }, { "name": "Generic ABS @Prusa MK4S HF0.5", "sub_path": "filament/Generic ABS @Prusa MK4S HF0.5.json" diff --git a/resources/profiles/Qidi.json b/resources/profiles/Qidi.json index f49413601a..9a67c47cd0 100644 --- a/resources/profiles/Qidi.json +++ b/resources/profiles/Qidi.json @@ -44,13 +44,13 @@ "name": "Qidi X-Plus 4", "sub_path": "machine/Qidi X-Plus 4.json" }, - { - "name": "Qidi X-Smart 3", - "sub_path": "machine/Qidi X-Smart 3.json" - }, { "name": "Qidi X-Plus 5", "sub_path": "machine/Qidi X-Plus 5.json" + }, + { + "name": "Qidi X-Smart 3", + "sub_path": "machine/Qidi X-Smart 3.json" } ], "process_list": [ @@ -78,42 +78,90 @@ "name": "0.08mm Extra Fine @X-Max 4 0.2 nozzle", "sub_path": "process/0.08mm Extra Fine @X-Max 4 0.2 nozzle.json" }, + { + "name": "0.08mm High Quality @X-Plus 5", + "sub_path": "process/0.08mm High Quality @X-Plus 5.json" + }, + { + "name": "0.08mm High Quality @X-Plus 5 0.2 nozzle", + "sub_path": "process/0.08mm High Quality @X-Plus 5 0.2 nozzle.json" + }, { "name": "0.10mm Standard @X-Max 4 0.2 nozzle", "sub_path": "process/0.10mm Standard @X-Max 4 0.2 nozzle.json" }, + { + "name": "0.10mm Standard @X-Plus 5 0.2 nozzle", + "sub_path": "process/0.10mm Standard @X-Plus 5 0.2 nozzle.json" + }, { "name": "0.12mm Balanced Quality @X-Max 4 0.2 nozzle", "sub_path": "process/0.12mm Balanced Quality @X-Max 4 0.2 nozzle.json" }, + { + "name": "0.12mm Balanced Quality @X-Plus 5 0.2 nozzle", + "sub_path": "process/0.12mm Balanced Quality @X-Plus 5 0.2 nozzle.json" + }, { "name": "0.12mm Fine @X-Max 4", "sub_path": "process/0.12mm Fine @X-Max 4.json" }, + { + "name": "0.12mm High Quality @X-Plus 5", + "sub_path": "process/0.12mm High Quality @X-Plus 5.json" + }, { "name": "0.16mm Balanced Quality @X-Max 4", "sub_path": "process/0.16mm Balanced Quality @X-Max 4.json" }, + { + "name": "0.16mm High Quality @X-Plus 5", + "sub_path": "process/0.16mm High Quality @X-Plus 5.json" + }, { "name": "0.16mm Standard @X-Max 4", "sub_path": "process/0.16mm Standard @X-Max 4.json" }, + { + "name": "0.16mm Standard @X-Plus 5", + "sub_path": "process/0.16mm Standard @X-Plus 5.json" + }, { "name": "0.18mm Balanced Quality @X-Max 4 0.6 nozzle", "sub_path": "process/0.18mm Balanced Quality @X-Max 4 0.6 nozzle.json" }, + { + "name": "0.18mm Balanced Quality @X-Plus 5 0.6 nozzle", + "sub_path": "process/0.18mm Balanced Quality @X-Plus 5 0.6 nozzle.json" + }, { "name": "0.20mm Balanced Strength @X-Max 4", "sub_path": "process/0.20mm Balanced Strength @X-Max 4.json" }, + { + "name": "0.20mm High Quality @X-Plus 5", + "sub_path": "process/0.20mm High Quality @X-Plus 5.json" + }, { "name": "0.20mm Standard @X-Max 4", "sub_path": "process/0.20mm Standard @X-Max 4.json" }, + { + "name": "0.20mm Standard @X-Plus 5", + "sub_path": "process/0.20mm Standard @X-Plus 5.json" + }, { "name": "0.24mm Balanced Quality @X-Max 4 0.8 nozzle", "sub_path": "process/0.24mm Balanced Quality @X-Max 4 0.8 nozzle.json" }, + { + "name": "0.24mm Balanced Quality @X-Plus 5 0.6 nozzle", + "sub_path": "process/0.24mm Balanced Quality @X-Plus 5 0.6 nozzle.json" + }, + { + "name": "0.24mm Balanced Quality @X-Plus 5 0.8 nozzle", + "sub_path": "process/0.24mm Balanced Quality @X-Plus 5 0.8 nozzle.json" + }, { "name": "0.24mm Balanced Strength @X-Max 4 0.6 nozzle", "sub_path": "process/0.24mm Balanced Strength @X-Max 4 0.6 nozzle.json" @@ -122,10 +170,22 @@ "name": "0.24mm Standard @X-Max 4", "sub_path": "process/0.24mm Standard @X-Max 4.json" }, + { + "name": "0.24mm Standard @X-Plus 5", + "sub_path": "process/0.24mm Standard @X-Plus 5.json" + }, { "name": "0.30mm Standard @X-Max 4 0.6 nozzle", "sub_path": "process/0.30mm Standard @X-Max 4 0.6 nozzle.json" }, + { + "name": "0.30mm Standard @X-Plus 5 0.6 nozzle", + "sub_path": "process/0.30mm Standard @X-Plus 5 0.6 nozzle.json" + }, + { + "name": "0.32mm Balanced Quality @X-Plus 5 0.8 nozzle", + "sub_path": "process/0.32mm Balanced Quality @X-Plus 5 0.8 nozzle.json" + }, { "name": "0.32mm Balanced Strength @X-Max 4 0.8 nozzle", "sub_path": "process/0.32mm Balanced Strength @X-Max 4 0.8 nozzle.json" @@ -134,6 +194,10 @@ "name": "0.40mm Standard @X-Max 4 0.8 nozzle", "sub_path": "process/0.40mm Standard @X-Max 4 0.8 nozzle.json" }, + { + "name": "0.40mm Standard @X-Plus 5 0.8 nozzle", + "sub_path": "process/0.40mm Standard @X-Plus 5 0.8 nozzle.json" + }, { "name": "0.12mm Fine @Qidi XCFPro", "sub_path": "process/0.12mm Fine @Qidi XCFPro.json" @@ -889,70 +953,6 @@ { "name": "0.56mm Standard @Qidi XSmart3 0.8 nozzle", "sub_path": "process/0.56mm Standard @Qidi XSmart3 0.8 nozzle.json" - }, - { - "name": "0.08mm High Quality @X-Plus 5", - "sub_path": "process/0.08mm High Quality @X-Plus 5.json" - }, - { - "name": "0.12mm High Quality @X-Plus 5", - "sub_path": "process/0.12mm High Quality @X-Plus 5.json" - }, - { - "name": "0.16mm High Quality @X-Plus 5", - "sub_path": "process/0.16mm High Quality @X-Plus 5.json" - }, - { - "name": "0.16mm Standard @X-Plus 5", - "sub_path": "process/0.16mm Standard @X-Plus 5.json" - }, - { - "name": "0.20mm High Quality @X-Plus 5", - "sub_path": "process/0.20mm High Quality @X-Plus 5.json" - }, - { - "name": "0.20mm Standard @X-Plus 5", - "sub_path": "process/0.20mm Standard @X-Plus 5.json" - }, - { - "name": "0.24mm Standard @X-Plus 5", - "sub_path": "process/0.24mm Standard @X-Plus 5.json" - }, - { - "name": "0.08mm High Quality @X-Plus 5 0.2 nozzle", - "sub_path": "process/0.08mm High Quality @X-Plus 5 0.2 nozzle.json" - }, - { - "name": "0.10mm Standard @X-Plus 5 0.2 nozzle", - "sub_path": "process/0.10mm Standard @X-Plus 5 0.2 nozzle.json" - }, - { - "name": "0.12mm Balanced Quality @X-Plus 5 0.2 nozzle", - "sub_path": "process/0.12mm Balanced Quality @X-Plus 5 0.2 nozzle.json" - }, - { - "name": "0.18mm Balanced Quality @X-Plus 5 0.6 nozzle", - "sub_path": "process/0.18mm Balanced Quality @X-Plus 5 0.6 nozzle.json" - }, - { - "name": "0.24mm Balanced Quality @X-Plus 5 0.6 nozzle", - "sub_path": "process/0.24mm Balanced Quality @X-Plus 5 0.6 nozzle.json" - }, - { - "name": "0.30mm Standard @X-Plus 5 0.6 nozzle", - "sub_path": "process/0.30mm Standard @X-Plus 5 0.6 nozzle.json" - }, - { - "name": "0.24mm Balanced Quality @X-Plus 5 0.8 nozzle", - "sub_path": "process/0.24mm Balanced Quality @X-Plus 5 0.8 nozzle.json" - }, - { - "name": "0.32mm Balanced Quality @X-Plus 5 0.8 nozzle", - "sub_path": "process/0.32mm Balanced Quality @X-Plus 5 0.8 nozzle.json" - }, - { - "name": "0.40mm Standard @X-Plus 5 0.8 nozzle", - "sub_path": "process/0.40mm Standard @X-Plus 5 0.8 nozzle.json" } ], "filament_list": [ @@ -968,6 +968,10 @@ "name": "fdm_filament_x4_common", "sub_path": "filament/X4/fdm_filament_x4_common.json" }, + { + "name": "fdm_filament_x5_common", + "sub_path": "filament/X5/fdm_filament_x5_common.json" + }, { "name": "QIDI ASA-CF", "sub_path": "filament/QIDI ASA-CF.json" @@ -1652,6 +1656,230 @@ "name": "QIDI WOOD Rapido@X-Max 4-Series", "sub_path": "filament/X4/QIDI WOOD Rapido @X-Max 4.json" }, + { + "name": "Bambu ABS@X-Plus 5-Series", + "sub_path": "filament/X5/Bambu ABS @X-Plus 5.json" + }, + { + "name": "Bambu PETG@X-Plus 5-Series", + "sub_path": "filament/X5/Bambu PETG @X-Plus 5.json" + }, + { + "name": "Bambu PLA@X-Plus 5-Series", + "sub_path": "filament/X5/Bambu PLA @X-Plus 5.json" + }, + { + "name": "Generic ABS@X-Plus 5-Series", + "sub_path": "filament/X5/Generic ABS @X-Plus 5.json" + }, + { + "name": "Generic PC@X-Plus 5-Series", + "sub_path": "filament/X5/Generic PC @X-Plus 5.json" + }, + { + "name": "Generic PETG@X-Plus 5-Series", + "sub_path": "filament/X5/Generic PETG @X-Plus 5.json" + }, + { + "name": "Generic PLA Silk@X-Plus 5-Series", + "sub_path": "filament/X5/Generic PLA Silk @X-Plus 5.json" + }, + { + "name": "Generic PLA+@X-Plus 5-Series", + "sub_path": "filament/X5/Generic PLA+ @X-Plus 5.json" + }, + { + "name": "Generic PLA@X-Plus 5-Series", + "sub_path": "filament/X5/Generic PLA @X-Plus 5.json" + }, + { + "name": "Generic TPU 95A@X-Plus 5-Series", + "sub_path": "filament/X5/Generic TPU 95A @X-Plus 5.json" + }, + { + "name": "HATCHBOX ABS@X-Plus 5-Series", + "sub_path": "filament/X5/HATCHBOX ABS @X-Plus 5.json" + }, + { + "name": "HATCHBOX PETG@X-Plus 5-Series", + "sub_path": "filament/X5/HATCHBOX PETG @X-Plus 5.json" + }, + { + "name": "HATCHBOX PLA@X-Plus 5-Series", + "sub_path": "filament/X5/HATCHBOX PLA @X-Plus 5.json" + }, + { + "name": "Overture ABS@X-Plus 5-Series", + "sub_path": "filament/X5/Overture ABS @X-Plus 5.json" + }, + { + "name": "Overture PLA@X-Plus 5-Series", + "sub_path": "filament/X5/Overture PLA @X-Plus 5.json" + }, + { + "name": "PolyLite ABS@X-Plus 5-Series", + "sub_path": "filament/X5/PolyLite ABS @X-Plus 5.json" + }, + { + "name": "PolyLite PLA@X-Plus 5-Series", + "sub_path": "filament/X5/PolyLite PLA @X-Plus 5.json" + }, + { + "name": "Polymaker PLA-HT@X-Plus 5-Series", + "sub_path": "filament/X5/Polymaker PLA-HT @X-Plus 5.json" + }, + { + "name": "QIDI ABS Odorless@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI ABS Odorless @X-Plus 5.json" + }, + { + "name": "QIDI ABS Rapido Metal@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI ABS Rapido Metal @X-Plus 5.json" + }, + { + "name": "QIDI ABS Rapido@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI ABS Rapido @X-Plus 5.json" + }, + { + "name": "QIDI ABS-GF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI ABS-GF @X-Plus 5.json" + }, + { + "name": "QIDI ASA-Aero@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI ASA-Aero @X-Plus 5.json" + }, + { + "name": "QIDI ASA-CF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI ASA-CF @X-Plus 5.json" + }, + { + "name": "QIDI ASA@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI ASA @X-Plus 5.json" + }, + { + "name": "QIDI PA12-CF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PA12-CF @X-Plus 5.json" + }, + { + "name": "QIDI PA6-CF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PA6-CF @X-Plus 5.json" + }, + { + "name": "QIDI PAHT-CF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PAHT-CF @X-Plus 5.json" + }, + { + "name": "QIDI PAHT-GF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PAHT-GF @X-Plus 5.json" + }, + { + "name": "QIDI PC/ABS-FR@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PC-ABS-FR @X-Plus 5.json" + }, + { + "name": "QIDI PEBA 95A@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PEBA 95A @X-Plus 5.json" + }, + { + "name": "QIDI PET-CF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PET-CF @X-Plus 5.json" + }, + { + "name": "QIDI PET-GF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PET-GF @X-Plus 5.json" + }, + { + "name": "QIDI PETG Basic@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PETG Basic @X-Plus 5.json" + }, + { + "name": "QIDI PETG Rapido@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PETG Rapido @X-Plus 5.json" + }, + { + "name": "QIDI PETG Tough@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PETG Tough @X-Plus 5.json" + }, + { + "name": "QIDI PETG Translucent@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PETG Translucent @X-Plus 5.json" + }, + { + "name": "QIDI PETG-CF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PETG-CF @X-Plus 5.json" + }, + { + "name": "QIDI PETG-GF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PETG-GF @X-Plus 5.json" + }, + { + "name": "QIDI PLA Basic@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PLA Basic @X-Plus 5.json" + }, + { + "name": "QIDI PLA Matte Basic@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PLA Matte Basic @X-Plus 5.json" + }, + { + "name": "QIDI PLA Rapido Matte@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PLA Rapido Matte @X-Plus 5.json" + }, + { + "name": "QIDI PLA Rapido Metal@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PLA Rapido Metal @X-Plus 5.json" + }, + { + "name": "QIDI PLA Rapido@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PLA Rapido @X-Plus 5.json" + }, + { + "name": "QIDI PLA Silk@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PLA Silk @X-Plus 5.json" + }, + { + "name": "QIDI PLA-CF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PLA-CF @X-Plus 5.json" + }, + { + "name": "QIDI PPS-CF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PPS-CF @X-Plus 5.json" + }, + { + "name": "QIDI PPS-GF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PPS-GF @X-Plus 5.json" + }, + { + "name": "QIDI Support For PAHT@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI Support For PAHT @X-Plus 5.json" + }, + { + "name": "QIDI Support For PET/PA@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI Support For PET-PA @X-Plus 5.json" + }, + { + "name": "QIDI TPU 95A-HF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI TPU 95A-HF @X-Plus 5.json" + }, + { + "name": "QIDI TPU-Aero@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI TPU-Aero @X-Plus 5.json" + }, + { + "name": "QIDI TPU-GF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI TPU-GF @X-Plus 5.json" + }, + { + "name": "QIDI UltraPA-CF25@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI UltraPA-CF25 @X-Plus 5.json" + }, + { + "name": "QIDI UltraPA@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI UltraPA @X-Plus 5.json" + }, + { + "name": "QIDI WOOD Rapido@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI WOOD Rapido @X-Plus 5.json" + }, { "name": "QIDI ASA-CF @Qidi Q1 Pro 0.4 nozzle", "sub_path": "filament/QIDI ASA-CF @Qidi Q1 Pro 0.4 nozzle.json" @@ -1716,6 +1944,10 @@ "name": "Bambu ABS", "sub_path": "filament/Bambu ABS.json" }, + { + "name": "Generic ABS @Qidi", + "sub_path": "filament/Generic ABS @Qidi.json" + }, { "name": "HATCHBOX ABS @Qidi", "sub_path": "filament/HATCHBOX ABS @Qidi.json" @@ -1752,14 +1984,14 @@ "name": "QIDI ABS-GF25", "sub_path": "filament/QIDI ABS-GF25.json" }, - { - "name": "Generic ABS @Qidi", - "sub_path": "filament/Generic ABS @Qidi.json" - }, { "name": "Qidi PC-ABS-FR", "sub_path": "filament/Qidi PC-ABS-FR.json" }, + { + "name": "Generic ASA @Qidi", + "sub_path": "filament/Generic ASA @Qidi.json" + }, { "name": "QIDI ASA", "sub_path": "filament/QIDI ASA.json" @@ -1769,8 +2001,12 @@ "sub_path": "filament/Qidi ASA-Aero.json" }, { - "name": "Generic ASA @Qidi", - "sub_path": "filament/Generic ASA @Qidi.json" + "name": "Generic PA @Qidi", + "sub_path": "filament/Generic PA @Qidi.json" + }, + { + "name": "Generic PA-CF @Qidi", + "sub_path": "filament/Generic PA-CF @Qidi.json" }, { "name": "QIDI PA-Ultra", @@ -1816,14 +2052,6 @@ "name": "QIDI UltraPA-CF25", "sub_path": "filament/QIDI UltraPA-CF25.json" }, - { - "name": "Generic PA @Qidi", - "sub_path": "filament/Generic PA @Qidi.json" - }, - { - "name": "Generic PA-CF @Qidi", - "sub_path": "filament/Generic PA-CF @Qidi.json" - }, { "name": "Generic PC @Qidi", "sub_path": "filament/Generic PC @Qidi.json" @@ -1832,6 +2060,14 @@ "name": "Bambu PETG", "sub_path": "filament/Bambu PETG.json" }, + { + "name": "Generic PETG @Qidi", + "sub_path": "filament/Generic PETG @Qidi.json" + }, + { + "name": "Generic PETG-CF @Qidi", + "sub_path": "filament/Generic PETG-CF @Qidi.json" + }, { "name": "HATCHBOX PETG @Qidi", "sub_path": "filament/HATCHBOX PETG @Qidi.json" @@ -1860,14 +2096,6 @@ "name": "QIDI PETG-GF", "sub_path": "filament/QIDI PETG-GF.json" }, - { - "name": "Generic PETG @Qidi", - "sub_path": "filament/Generic PETG @Qidi.json" - }, - { - "name": "Generic PETG-CF @Qidi", - "sub_path": "filament/Generic PETG-CF @Qidi.json" - }, { "name": "Tinmorry PETG-ECO", "sub_path": "filament/Tinmorry PETG-ECO.json" @@ -1876,6 +2104,22 @@ "name": "Bambu PLA", "sub_path": "filament/Bambu PLA.json" }, + { + "name": "Generic PLA @Qidi", + "sub_path": "filament/Generic PLA @Qidi.json" + }, + { + "name": "Generic PLA Silk @Qidi", + "sub_path": "filament/Generic PLA Silk @Qidi.json" + }, + { + "name": "Generic PLA+ @Qidi", + "sub_path": "filament/Generic PLA+ @Qidi.json" + }, + { + "name": "Generic PLA-CF @Qidi", + "sub_path": "filament/Generic PLA-CF @Qidi.json" + }, { "name": "HATCHBOX PLA @Qidi", "sub_path": "filament/HATCHBOX PLA @Qidi.json" @@ -1916,22 +2160,6 @@ "name": "QIDI WOOD Rapido", "sub_path": "filament/QIDI WOOD Rapido.json" }, - { - "name": "Generic PLA @Qidi", - "sub_path": "filament/Generic PLA @Qidi.json" - }, - { - "name": "Generic PLA Silk @Qidi", - "sub_path": "filament/Generic PLA Silk @Qidi.json" - }, - { - "name": "Generic PLA+ @Qidi", - "sub_path": "filament/Generic PLA+ @Qidi.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" @@ -1940,6 +2168,14 @@ "name": "Generic PVA @Qidi", "sub_path": "filament/Generic PVA @Qidi.json" }, + { + "name": "Generic TPU 95A @Qidi", + "sub_path": "filament/Generic TPU 95A @Qidi.json" + }, + { + "name": "Generic TPU @Qidi", + "sub_path": "filament/Generic TPU @Qidi.json" + }, { "name": "QIDI PEBA 95A", "sub_path": "filament/QIDI PEBA 95A.json" @@ -1952,14 +2188,6 @@ "name": "QIDI TPU-GF", "sub_path": "filament/QIDI TPU-GF.json" }, - { - "name": "Generic TPU @Qidi", - "sub_path": "filament/Generic TPU @Qidi.json" - }, - { - "name": "Generic TPU 95A @Qidi", - "sub_path": "filament/Generic TPU 95A @Qidi.json" - }, { "name": "Qidi TPU 95A-HF", "sub_path": "filament/Qidi TPU 95A-HF.json" @@ -4172,6 +4400,770 @@ "name": "QIDI WOOD Rapido @Qidi X-Max 4 0.8 nozzle", "sub_path": "filament/X4/QIDI WOOD Rapido @Qidi X-Max 4 0.8 nozzle.json" }, + { + "name": "Bambu ABS @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/Bambu ABS @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Bambu ABS @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Bambu ABS @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Bambu ABS @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Bambu ABS @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Bambu ABS @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Bambu ABS @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Bambu PETG @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/Bambu PETG @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Bambu PETG @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Bambu PETG @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Bambu PETG @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Bambu PETG @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Bambu PETG @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Bambu PETG @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Bambu PLA @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/Bambu PLA @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Bambu PLA @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Bambu PLA @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Bambu PLA @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Bambu PLA @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Bambu PLA @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Bambu PLA @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Generic ABS @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/Generic ABS @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Generic ABS @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Generic ABS @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Generic ABS @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Generic ABS @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Generic ABS @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Generic ABS @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Generic PC @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/Generic PC @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Generic PC @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Generic PC @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Generic PC @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Generic PC @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Generic PC @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Generic PC @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Generic PETG @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/Generic PETG @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Generic PETG @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Generic PETG @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Generic PETG @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Generic PETG @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Generic PETG @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Generic PETG @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Generic PLA Silk @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Generic PLA Silk @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Generic PLA Silk @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Generic PLA Silk @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/Generic PLA+ @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Generic PLA+ @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Generic PLA+ @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Generic PLA+ @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Generic PLA @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/Generic PLA @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Generic PLA @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Generic PLA @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Generic PLA @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Generic PLA @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Generic PLA @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Generic PLA @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Generic TPU 95A @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Generic TPU 95A @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Generic TPU 95A @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Generic TPU 95A @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Generic TPU 95A @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Generic TPU 95A @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "HATCHBOX ABS @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "HATCHBOX ABS @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "HATCHBOX ABS @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "HATCHBOX ABS @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "HATCHBOX PETG @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "HATCHBOX PETG @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "HATCHBOX PETG @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "HATCHBOX PETG @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "HATCHBOX PLA @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "HATCHBOX PLA @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "HATCHBOX PLA @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "HATCHBOX PLA @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Overture ABS @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/Overture ABS @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Overture ABS @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Overture ABS @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Overture ABS @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Overture ABS @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Overture ABS @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Overture ABS @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Overture PLA @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/Overture PLA @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Overture PLA @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Overture PLA @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Overture PLA @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Overture PLA @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Overture PLA @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Overture PLA @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "PolyLite ABS @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/PolyLite ABS @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "PolyLite ABS @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/PolyLite ABS @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "PolyLite ABS @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/PolyLite ABS @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "PolyLite ABS @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/PolyLite ABS @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "PolyLite PLA @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/PolyLite PLA @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "PolyLite PLA @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/PolyLite PLA @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "PolyLite PLA @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/PolyLite PLA @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "PolyLite PLA @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/PolyLite PLA @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Polymaker PLA-HT @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Polymaker PLA-HT @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Polymaker PLA-HT @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Polymaker PLA-HT @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI ABS Odorless @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI ABS Odorless @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI ABS Odorless @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI ABS Odorless @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI ABS Rapido Metal @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI ABS Rapido Metal @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI ABS Rapido Metal @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI ABS Rapido Metal @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI ABS Rapido @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI ABS Rapido @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI ABS Rapido @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI ABS Rapido @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI ABS-GF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI ABS-GF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI ABS-GF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI ABS-GF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI ABS-GF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI ABS-GF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI ASA-Aero @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI ASA-Aero @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI ASA-CF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI ASA-CF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI ASA-CF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI ASA-CF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI ASA-CF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI ASA-CF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI ASA @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI ASA @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI ASA @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI ASA @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI ASA @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI ASA @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI ASA @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI ASA @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PA12-CF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PA12-CF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PA12-CF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PA12-CF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PA12-CF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PA12-CF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PA6-CF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PA6-CF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PA6-CF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PA6-CF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PA6-CF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PA6-CF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PAHT-CF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PAHT-CF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PAHT-CF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PAHT-CF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PAHT-CF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PAHT-CF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PAHT-GF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PAHT-GF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PAHT-GF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PAHT-GF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PAHT-GF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PAHT-GF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PC/ABS-FR @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PC-ABS-FR @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PC/ABS-FR @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PC-ABS-FR @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PC/ABS-FR @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PC-ABS-FR @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PEBA 95A @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PEBA 95A @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PEBA 95A @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PEBA 95A @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PET-CF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PET-CF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PET-CF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PET-CF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PET-CF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PET-CF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PET-GF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PET-GF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PET-GF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PET-GF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PET-GF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PET-GF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PETG Basic @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI PETG Basic @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PETG Basic @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PETG Basic @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PETG Rapido @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI PETG Rapido @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PETG Rapido @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PETG Rapido @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PETG Tough @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI PETG Tough @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PETG Tough @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PETG Tough @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PETG Translucent @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI PETG Translucent @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PETG Translucent @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PETG Translucent @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PETG-CF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PETG-CF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PETG-CF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PETG-CF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PETG-CF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PETG-CF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PETG-GF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PETG-GF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PETG-GF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PETG-GF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PETG-GF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PETG-GF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PLA Basic @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI PLA Basic @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PLA Basic @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PLA Basic @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PLA Matte Basic @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI PLA Matte Basic @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PLA Matte Basic @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PLA Matte Basic @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Matte @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Matte @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Matte @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Matte @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Metal @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Metal @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Metal @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Metal @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PLA Rapido @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI PLA Rapido @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PLA Rapido @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PLA Rapido @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PLA Silk @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PLA Silk @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PLA Silk @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PLA Silk @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PLA-CF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PLA-CF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PLA-CF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PLA-CF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PLA-CF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PLA-CF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PPS-CF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PPS-CF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PPS-CF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PPS-CF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PPS-CF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PPS-CF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PPS-GF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PPS-GF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PPS-GF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PPS-GF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PPS-GF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PPS-GF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI Support For PAHT @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI Support For PAHT @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI Support For PAHT @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI Support For PAHT @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI Support For PAHT @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI Support For PAHT @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI Support For PET/PA @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI Support For PET-PA @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI Support For PET/PA @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI Support For PET-PA @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI Support For PET/PA @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI Support For PET-PA @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI TPU 95A-HF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI TPU 95A-HF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI TPU 95A-HF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI TPU 95A-HF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI TPU 95A-HF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI TPU 95A-HF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI TPU-Aero @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI TPU-Aero @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI TPU-Aero @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI TPU-Aero @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI TPU-GF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI TPU-GF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI TPU-GF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI TPU-GF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI TPU-GF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI TPU-GF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI UltraPA-CF25 @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI UltraPA-CF25 @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI UltraPA-CF25 @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI UltraPA-CF25 @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI UltraPA-CF25 @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI UltraPA-CF25 @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI UltraPA @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI UltraPA @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI UltraPA @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI UltraPA @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI UltraPA @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI UltraPA @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI WOOD Rapido @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI WOOD Rapido @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI WOOD Rapido @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI WOOD Rapido @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI WOOD Rapido @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI WOOD Rapido @Qidi X-Plus 5 0.8 nozzle.json" + }, { "name": "Bambu ABS @0.2 nozzle", "sub_path": "filament/Bambu ABS @0.2 nozzle.json" @@ -4216,6 +5208,50 @@ "name": "Bambu ABS @Qidi X-Plus 4 0.8 nozzle", "sub_path": "filament/Bambu ABS @Qidi X-Plus 4 0.8 nozzle.json" }, + { + "name": "Generic ABS @Qidi Q1 Pro 0.2 nozzle", + "sub_path": "filament/Generic ABS @Qidi Q1 Pro 0.2 nozzle.json" + }, + { + "name": "Generic ABS @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/Generic ABS @Qidi Q1 Pro 0.4 nozzle.json" + }, + { + "name": "Generic ABS @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/Generic ABS @Qidi Q1 Pro 0.6 nozzle.json" + }, + { + "name": "Generic ABS @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/Generic ABS @Qidi Q1 Pro 0.8 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": "Generic ABS @Qidi X-Plus 3 0.2 nozzle", + "sub_path": "filament/Generic ABS @Qidi X-Plus 3 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": "Generic ABS @Qidi X-Plus 4 0.4 nozzle", + "sub_path": "filament/Generic ABS @Qidi X-Plus 4 0.4 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": "Generic ABS @Qidi X-Plus 4 0.8 nozzle", + "sub_path": "filament/Generic ABS @Qidi X-Plus 4 0.8 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": "HATCHBOX ABS @Qidi 0.2 nozzle", "sub_path": "filament/HATCHBOX ABS @Qidi 0.2 nozzle.json" @@ -4552,50 +5588,6 @@ "name": "QIDI ABS-GF25 @Qidi X-Plus 4 0.8 nozzle", "sub_path": "filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.8 nozzle.json" }, - { - "name": "Generic ABS @Qidi Q1 Pro 0.2 nozzle", - "sub_path": "filament/Generic ABS @Qidi Q1 Pro 0.2 nozzle.json" - }, - { - "name": "Generic ABS @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/Generic ABS @Qidi Q1 Pro 0.4 nozzle.json" - }, - { - "name": "Generic ABS @Qidi Q1 Pro 0.6 nozzle", - "sub_path": "filament/Generic ABS @Qidi Q1 Pro 0.6 nozzle.json" - }, - { - "name": "Generic ABS @Qidi Q1 Pro 0.8 nozzle", - "sub_path": "filament/Generic ABS @Qidi Q1 Pro 0.8 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": "Generic ABS @Qidi X-Plus 3 0.2 nozzle", - "sub_path": "filament/Generic ABS @Qidi X-Plus 3 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": "Generic ABS @Qidi X-Plus 4 0.4 nozzle", - "sub_path": "filament/Generic ABS @Qidi X-Plus 4 0.4 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": "Generic ABS @Qidi X-Plus 4 0.8 nozzle", - "sub_path": "filament/Generic ABS @Qidi X-Plus 4 0.8 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", "sub_path": "filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.4 nozzle.json" @@ -4620,6 +5612,50 @@ "name": "Qidi PC-ABS-FR @Qidi X-Plus 4 0.8 nozzle", "sub_path": "filament/Qidi PC-ABS-FR @Qidi X-Plus 4 0.8 nozzle.json" }, + { + "name": "Generic ASA @Qidi Q1 Pro 0.2 nozzle", + "sub_path": "filament/Generic ASA @Qidi Q1 Pro 0.2 nozzle.json" + }, + { + "name": "Generic ASA @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/Generic ASA @Qidi Q1 Pro 0.4 nozzle.json" + }, + { + "name": "Generic ASA @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/Generic ASA @Qidi Q1 Pro 0.6 nozzle.json" + }, + { + "name": "Generic ASA @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/Generic ASA @Qidi Q1 Pro 0.8 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": "Generic ASA @Qidi X-Plus 3 0.2 nozzle", + "sub_path": "filament/Generic ASA @Qidi X-Plus 3 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": "Generic ASA @Qidi X-Plus 4 0.4 nozzle", + "sub_path": "filament/Generic ASA @Qidi X-Plus 4 0.4 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": "Generic ASA @Qidi X-Plus 4 0.8 nozzle", + "sub_path": "filament/Generic ASA @Qidi X-Plus 4 0.8 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 ASA @Qidi Q1 Pro 0.2 nozzle", "sub_path": "filament/QIDI ASA @Qidi Q1 Pro 0.2 nozzle.json" @@ -4672,50 +5708,6 @@ "name": "Qidi ASA-Aero @Qidi X-Plus 4 0.4 nozzle", "sub_path": "filament/Qidi ASA-Aero @Qidi X-Plus 4 0.4 nozzle.json" }, - { - "name": "Generic ASA @Qidi Q1 Pro 0.2 nozzle", - "sub_path": "filament/Generic ASA @Qidi Q1 Pro 0.2 nozzle.json" - }, - { - "name": "Generic ASA @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/Generic ASA @Qidi Q1 Pro 0.4 nozzle.json" - }, - { - "name": "Generic ASA @Qidi Q1 Pro 0.6 nozzle", - "sub_path": "filament/Generic ASA @Qidi Q1 Pro 0.6 nozzle.json" - }, - { - "name": "Generic ASA @Qidi Q1 Pro 0.8 nozzle", - "sub_path": "filament/Generic ASA @Qidi Q1 Pro 0.8 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": "Generic ASA @Qidi X-Plus 3 0.2 nozzle", - "sub_path": "filament/Generic ASA @Qidi X-Plus 3 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": "Generic ASA @Qidi X-Plus 4 0.4 nozzle", - "sub_path": "filament/Generic ASA @Qidi X-Plus 4 0.4 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": "Generic ASA @Qidi X-Plus 4 0.8 nozzle", - "sub_path": "filament/Generic ASA @Qidi X-Plus 4 0.8 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", "sub_path": "filament/QIDI PA-Ultra @Qidi Q1 Pro 0.4 nozzle.json" @@ -5064,6 +6056,50 @@ "name": "Bambu PETG @Qidi X-Plus 4 0.8 nozzle", "sub_path": "filament/Bambu PETG @Qidi X-Plus 4 0.8 nozzle.json" }, + { + "name": "Generic PETG @Qidi Q1 Pro 0.2 nozzle", + "sub_path": "filament/Generic PETG @Qidi Q1 Pro 0.2 nozzle.json" + }, + { + "name": "Generic PETG @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/Generic PETG @Qidi Q1 Pro 0.4 nozzle.json" + }, + { + "name": "Generic PETG @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/Generic PETG @Qidi Q1 Pro 0.6 nozzle.json" + }, + { + "name": "Generic PETG @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/Generic PETG @Qidi Q1 Pro 0.8 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": "Generic PETG @Qidi X-Plus 3 0.2 nozzle", + "sub_path": "filament/Generic PETG @Qidi X-Plus 3 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": "Generic PETG @Qidi X-Plus 4 0.4 nozzle", + "sub_path": "filament/Generic PETG @Qidi X-Plus 4 0.4 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": "Generic PETG @Qidi X-Plus 4 0.8 nozzle", + "sub_path": "filament/Generic PETG @Qidi X-Plus 4 0.8 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": "HATCHBOX PETG @0.2 nozzle", "sub_path": "filament/HATCHBOX PETG @Qidi 0.2 nozzle.json" @@ -5332,50 +6368,6 @@ "name": "QIDI PETG-GF @Qidi X-Plus 4 0.8 nozzle", "sub_path": "filament/QIDI PETG-GF @Qidi X-Plus 4 0.8 nozzle.json" }, - { - "name": "Generic PETG @Qidi Q1 Pro 0.2 nozzle", - "sub_path": "filament/Generic PETG @Qidi Q1 Pro 0.2 nozzle.json" - }, - { - "name": "Generic PETG @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/Generic PETG @Qidi Q1 Pro 0.4 nozzle.json" - }, - { - "name": "Generic PETG @Qidi Q1 Pro 0.6 nozzle", - "sub_path": "filament/Generic PETG @Qidi Q1 Pro 0.6 nozzle.json" - }, - { - "name": "Generic PETG @Qidi Q1 Pro 0.8 nozzle", - "sub_path": "filament/Generic PETG @Qidi Q1 Pro 0.8 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": "Generic PETG @Qidi X-Plus 3 0.2 nozzle", - "sub_path": "filament/Generic PETG @Qidi X-Plus 3 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": "Generic PETG @Qidi X-Plus 4 0.4 nozzle", - "sub_path": "filament/Generic PETG @Qidi X-Plus 4 0.4 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": "Generic PETG @Qidi X-Plus 4 0.8 nozzle", - "sub_path": "filament/Generic PETG @Qidi X-Plus 4 0.8 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", "sub_path": "filament/Bambu PLA @0.2 nozzle.json" @@ -5420,6 +6412,150 @@ "name": "Bambu PLA @Qidi X-Plus 4 0.8 nozzle", "sub_path": "filament/Bambu PLA @Qidi X-Plus 4 0.8 nozzle.json" }, + { + "name": "Generic PLA @Qidi Q1 Pro 0.2 nozzle", + "sub_path": "filament/Generic PLA @Qidi Q1 Pro 0.2 nozzle.json" + }, + { + "name": "Generic PLA @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/Generic PLA @Qidi Q1 Pro 0.4 nozzle.json" + }, + { + "name": "Generic PLA @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/Generic PLA @Qidi Q1 Pro 0.6 nozzle.json" + }, + { + "name": "Generic PLA @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/Generic PLA @Qidi Q1 Pro 0.8 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": "Generic PLA @Qidi X-Max 3 0.6 nozzle", + "sub_path": "filament/Generic PLA @Qidi X-Max 3 0.6 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": "Generic PLA @Qidi X-Plus 3 0.2 nozzle", + "sub_path": "filament/Generic PLA @Qidi X-Plus 3 0.2 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": "Generic PLA @Qidi X-Plus 3 0.8 nozzle", + "sub_path": "filament/Generic PLA @Qidi X-Plus 3 0.8 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": "Generic PLA @Qidi X-Plus 4 0.4 nozzle", + "sub_path": "filament/Generic PLA @Qidi X-Plus 4 0.4 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": "Generic PLA @Qidi X-Plus 4 0.8 nozzle", + "sub_path": "filament/Generic PLA @Qidi X-Plus 4 0.8 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": "Generic PLA @Qidi X-Smart 3 0.6 nozzle", + "sub_path": "filament/Generic PLA @Qidi X-Smart 3 0.6 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": "Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/Generic PLA Silk @Qidi Q1 Pro 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": "Generic PLA+ @Qidi Q1 Pro 0.2 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi Q1 Pro 0.2 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi Q1 Pro 0.4 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi Q1 Pro 0.6 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi Q1 Pro 0.8 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": "Generic PLA+ @Qidi X-Max 3 0.6 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi X-Max 3 0.6 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": "Generic PLA+ @Qidi X-Plus 3 0.2 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi X-Plus 3 0.2 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": "Generic PLA+ @Qidi X-Plus 3 0.8 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi X-Plus 3 0.8 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": "Generic PLA+ @Qidi X-Plus 4 0.4 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi X-Plus 4 0.4 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": "Generic PLA+ @Qidi X-Plus 4 0.8 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi X-Plus 4 0.8 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": "Generic PLA+ @Qidi X-Smart 3 0.6 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi X-Smart 3 0.6 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": "HATCHBOX PLA @0.2 nozzle", "sub_path": "filament/HATCHBOX PLA @Qidi 0.2 nozzle.json" @@ -5824,150 +6960,6 @@ "name": "QIDI WOOD Rapido @Qidi X-Plus 4 0.8 nozzle", "sub_path": "filament/QIDI WOOD Rapido @Qidi X-Plus 4 0.8 nozzle.json" }, - { - "name": "Generic PLA @Qidi Q1 Pro 0.2 nozzle", - "sub_path": "filament/Generic PLA @Qidi Q1 Pro 0.2 nozzle.json" - }, - { - "name": "Generic PLA @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/Generic PLA @Qidi Q1 Pro 0.4 nozzle.json" - }, - { - "name": "Generic PLA @Qidi Q1 Pro 0.6 nozzle", - "sub_path": "filament/Generic PLA @Qidi Q1 Pro 0.6 nozzle.json" - }, - { - "name": "Generic PLA @Qidi Q1 Pro 0.8 nozzle", - "sub_path": "filament/Generic PLA @Qidi Q1 Pro 0.8 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": "Generic PLA @Qidi X-Max 3 0.6 nozzle", - "sub_path": "filament/Generic PLA @Qidi X-Max 3 0.6 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": "Generic PLA @Qidi X-Plus 3 0.2 nozzle", - "sub_path": "filament/Generic PLA @Qidi X-Plus 3 0.2 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": "Generic PLA @Qidi X-Plus 3 0.8 nozzle", - "sub_path": "filament/Generic PLA @Qidi X-Plus 3 0.8 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": "Generic PLA @Qidi X-Plus 4 0.4 nozzle", - "sub_path": "filament/Generic PLA @Qidi X-Plus 4 0.4 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": "Generic PLA @Qidi X-Plus 4 0.8 nozzle", - "sub_path": "filament/Generic PLA @Qidi X-Plus 4 0.8 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": "Generic PLA @Qidi X-Smart 3 0.6 nozzle", - "sub_path": "filament/Generic PLA @Qidi X-Smart 3 0.6 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": "Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/Generic PLA Silk @Qidi Q1 Pro 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": "Generic PLA+ @Qidi Q1 Pro 0.2 nozzle", - "sub_path": "filament/Generic PLA+ @Qidi Q1 Pro 0.2 nozzle.json" - }, - { - "name": "Generic PLA+ @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/Generic PLA+ @Qidi Q1 Pro 0.4 nozzle.json" - }, - { - "name": "Generic PLA+ @Qidi Q1 Pro 0.6 nozzle", - "sub_path": "filament/Generic PLA+ @Qidi Q1 Pro 0.6 nozzle.json" - }, - { - "name": "Generic PLA+ @Qidi Q1 Pro 0.8 nozzle", - "sub_path": "filament/Generic PLA+ @Qidi Q1 Pro 0.8 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": "Generic PLA+ @Qidi X-Max 3 0.6 nozzle", - "sub_path": "filament/Generic PLA+ @Qidi X-Max 3 0.6 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": "Generic PLA+ @Qidi X-Plus 3 0.2 nozzle", - "sub_path": "filament/Generic PLA+ @Qidi X-Plus 3 0.2 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": "Generic PLA+ @Qidi X-Plus 3 0.8 nozzle", - "sub_path": "filament/Generic PLA+ @Qidi X-Plus 3 0.8 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": "Generic PLA+ @Qidi X-Plus 4 0.4 nozzle", - "sub_path": "filament/Generic PLA+ @Qidi X-Plus 4 0.4 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": "Generic PLA+ @Qidi X-Plus 4 0.8 nozzle", - "sub_path": "filament/Generic PLA+ @Qidi X-Plus 4 0.8 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": "Generic PLA+ @Qidi X-Smart 3 0.6 nozzle", - "sub_path": "filament/Generic PLA+ @Qidi X-Smart 3 0.6 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", "sub_path": "filament/QIDI PLA-CF @0.6 nozzle.json" @@ -6000,6 +6992,22 @@ "name": "QIDI PLA-CF @Qidi X-Plus 4 0.8 nozzle", "sub_path": "filament/QIDI PLA-CF @Qidi X-Plus 4 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": "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": "Generic TPU @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/Generic TPU @Qidi Q1 Pro 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 PEBA 95A @Qidi Q1 Pro 0.4 nozzle", "sub_path": "filament/QIDI PEBA 95A @Qidi Q1 Pro 0.4 nozzle.json" @@ -6056,22 +7064,6 @@ "name": "QIDI TPU-GF @Qidi X-Plus 4 0.8 nozzle", "sub_path": "filament/QIDI TPU-GF @Qidi X-Plus 4 0.8 nozzle.json" }, - { - "name": "Generic TPU @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/Generic TPU @Qidi Q1 Pro 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": "Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle", - "sub_path": "filament/Generic TPU 95A @Qidi Q1 Pro 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", "sub_path": "filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.4 nozzle.json" @@ -6103,998 +7095,6 @@ { "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", - "sub_path": "filament/X5/fdm_filament_x5_common.json" - }, - { - "name": "Generic ABS@X-Plus 5-Series", - "sub_path": "filament/X5/Generic ABS @X-Plus 5.json" - }, - { - "name": "QIDI ASA@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI ASA @X-Plus 5.json" - }, - { - "name": "Generic PETG@X-Plus 5-Series", - "sub_path": "filament/X5/Generic PETG @X-Plus 5.json" - }, - { - "name": "Generic PLA Silk@X-Plus 5-Series", - "sub_path": "filament/X5/Generic PLA Silk @X-Plus 5.json" - }, - { - "name": "Generic PLA@X-Plus 5-Series", - "sub_path": "filament/X5/Generic PLA @X-Plus 5.json" - }, - { - "name": "Generic PLA+@X-Plus 5-Series", - "sub_path": "filament/X5/Generic PLA+ @X-Plus 5.json" - }, - { - "name": "PolyLite PLA@X-Plus 5-Series", - "sub_path": "filament/X5/PolyLite PLA @X-Plus 5.json" - }, - { - "name": "Polymaker PLA-HT@X-Plus 5-Series", - "sub_path": "filament/X5/Polymaker PLA-HT @X-Plus 5.json" - }, - { - "name": "QIDI PLA-CF@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PLA-CF @X-Plus 5.json" - }, - { - "name": "QIDI PLA-CF @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PLA-CF @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PLA-CF @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PLA-CF @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PLA-CF @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PLA-CF @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI ABS Rapido@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI ABS Rapido @X-Plus 5.json" - }, - { - "name": "QIDI ABS Rapido @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "QIDI ABS Rapido @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI ABS Rapido @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI ABS Rapido @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI ABS Rapido Metal@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI ABS Rapido Metal @X-Plus 5.json" - }, - { - "name": "QIDI ABS Rapido Metal @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "QIDI ABS Rapido Metal @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI ABS Rapido Metal @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI ABS Rapido Metal @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI ABS Odorless@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI ABS Odorless @X-Plus 5.json" - }, - { - "name": "QIDI ABS Odorless @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "QIDI ABS Odorless @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI ABS Odorless @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI ABS Odorless @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PLA Rapido@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PLA Rapido @X-Plus 5.json" - }, - { - "name": "QIDI PLA Rapido @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "QIDI PLA Rapido @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PLA Rapido @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PLA Rapido @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PLA Rapido Matte@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PLA Rapido Matte @X-Plus 5.json" - }, - { - "name": "QIDI PLA Rapido Matte @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "QIDI PLA Rapido Matte @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PLA Rapido Matte @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PLA Rapido Matte @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PLA Silk@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PLA Silk @X-Plus 5.json" - }, - { - "name": "QIDI PLA Silk @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PLA Silk @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PLA Silk @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PLA Silk @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PLA Rapido Metal@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PLA Rapido Metal @X-Plus 5.json" - }, - { - "name": "QIDI PLA Rapido Metal @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "QIDI PLA Rapido Metal @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PLA Rapido Metal @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PLA Rapido Metal @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PETG Tough@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PETG Tough @X-Plus 5.json" - }, - { - "name": "QIDI PETG Tough @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "QIDI PETG Tough @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PETG Tough @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PETG Tough @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PET-CF@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PET-CF @X-Plus 5.json" - }, - { - "name": "QIDI PET-CF @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PET-CF @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PET-CF @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PET-CF @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PET-CF @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PET-CF @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PA12-CF@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PA12-CF @X-Plus 5.json" - }, - { - "name": "QIDI PA12-CF @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PA12-CF @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PA12-CF @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PA12-CF @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PA12-CF @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PA12-CF @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PA6-CF@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PA6-CF @X-Plus 5.json" - }, - { - "name": "QIDI PA6-CF @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PA6-CF @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PA6-CF @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PA6-CF @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PA6-CF @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PA6-CF @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PAHT-CF@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PAHT-CF @X-Plus 5.json" - }, - { - "name": "QIDI PAHT-CF @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PAHT-CF @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PAHT-CF @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PAHT-CF @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PAHT-CF @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PAHT-CF @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PPS-CF@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PPS-CF @X-Plus 5.json" - }, - { - "name": "QIDI PPS-CF @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PPS-CF @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PPS-CF @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PPS-CF @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PPS-CF @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PPS-CF @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI ABS-GF@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI ABS-GF @X-Plus 5.json" - }, - { - "name": "QIDI ABS-GF @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI ABS-GF @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI ABS-GF @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI ABS-GF @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI ABS-GF @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI ABS-GF @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI UltraPA@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI UltraPA @X-Plus 5.json" - }, - { - "name": "QIDI UltraPA @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI UltraPA @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI UltraPA @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI UltraPA @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI UltraPA @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI UltraPA @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "Generic TPU 95A@X-Plus 5-Series", - "sub_path": "filament/X5/Generic TPU 95A @X-Plus 5.json" - }, - { - "name": "QIDI PC/ABS-FR@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PC-ABS-FR @X-Plus 5.json" - }, - { - "name": "QIDI PC/ABS-FR @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PC-ABS-FR @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PC/ABS-FR @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PC-ABS-FR @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PC/ABS-FR @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PC-ABS-FR @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI ASA-Aero@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI ASA-Aero @X-Plus 5.json" - }, - { - "name": "QIDI ASA-Aero @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI ASA-Aero @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "Generic ABS @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/Generic ABS @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "Generic ABS @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/Generic ABS @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "Generic ABS @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/Generic ABS @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "Generic ABS @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/Generic ABS @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI ASA @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/QIDI ASA @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "QIDI ASA @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI ASA @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI ASA @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI ASA @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI ASA @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI ASA @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "Generic PETG @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/Generic PETG @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "Generic PETG @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/Generic PETG @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "Generic PETG @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/Generic PETG @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "Generic PETG @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/Generic PETG @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "Generic PLA @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/Generic PLA @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "Generic PLA @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/Generic PLA @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "Generic PLA @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/Generic PLA @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "Generic PLA @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/Generic PLA @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "Generic PLA+ @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/Generic PLA+ @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "Generic PLA+ @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/Generic PLA+ @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "Generic PLA+ @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/Generic PLA+ @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "Generic PLA+ @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/Generic PLA+ @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "Generic PLA Silk @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/Generic PLA Silk @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "Generic PLA Silk @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/Generic PLA Silk @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "Generic TPU 95A @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/Generic TPU 95A @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "Generic TPU 95A @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/Generic TPU 95A @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "Generic TPU 95A @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/Generic TPU 95A @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI TPU 95A-HF@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI TPU 95A-HF @X-Plus 5.json" - }, - { - "name": "QIDI TPU 95A-HF @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI TPU 95A-HF @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI TPU 95A-HF @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI TPU 95A-HF @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI TPU 95A-HF @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI TPU 95A-HF @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "PolyLite PLA @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/PolyLite PLA @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "PolyLite PLA @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/PolyLite PLA @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "PolyLite PLA @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/PolyLite PLA @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "PolyLite PLA @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/PolyLite PLA @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "Polymaker PLA-HT @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "Polymaker PLA-HT @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "Polymaker PLA-HT @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "Polymaker PLA-HT @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "PolyLite ABS@X-Plus 5-Series", - "sub_path": "filament/X5/PolyLite ABS @X-Plus 5.json" - }, - { - "name": "PolyLite ABS @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/PolyLite ABS @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "PolyLite ABS @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/PolyLite ABS @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "PolyLite ABS @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/PolyLite ABS @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "PolyLite ABS @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/PolyLite ABS @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "Overture PLA@X-Plus 5-Series", - "sub_path": "filament/X5/Overture PLA @X-Plus 5.json" - }, - { - "name": "Overture PLA @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/Overture PLA @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "Overture PLA @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/Overture PLA @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "Overture PLA @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/Overture PLA @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "Overture PLA @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/Overture PLA @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "Overture ABS@X-Plus 5-Series", - "sub_path": "filament/X5/Overture ABS @X-Plus 5.json" - }, - { - "name": "Overture ABS @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/Overture ABS @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "Overture ABS @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/Overture ABS @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "Overture ABS @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/Overture ABS @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "Overture ABS @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/Overture ABS @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "Bambu PLA@X-Plus 5-Series", - "sub_path": "filament/X5/Bambu PLA @X-Plus 5.json" - }, - { - "name": "Bambu PLA @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/Bambu PLA @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "Bambu PLA @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/Bambu PLA @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "Bambu PLA @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/Bambu PLA @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "Bambu PLA @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/Bambu PLA @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "Bambu ABS@X-Plus 5-Series", - "sub_path": "filament/X5/Bambu ABS @X-Plus 5.json" - }, - { - "name": "Bambu ABS @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/Bambu ABS @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "Bambu ABS @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/Bambu ABS @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "Bambu ABS @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/Bambu ABS @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "Bambu ABS @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/Bambu ABS @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "Bambu PETG@X-Plus 5-Series", - "sub_path": "filament/X5/Bambu PETG @X-Plus 5.json" - }, - { - "name": "Bambu PETG @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/Bambu PETG @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "Bambu PETG @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/Bambu PETG @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "Bambu PETG @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/Bambu PETG @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "Bambu PETG @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/Bambu PETG @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "HATCHBOX PLA@X-Plus 5-Series", - "sub_path": "filament/X5/HATCHBOX PLA @X-Plus 5.json" - }, - { - "name": "HATCHBOX PLA @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "HATCHBOX PLA @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "HATCHBOX PLA @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "HATCHBOX PLA @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "HATCHBOX ABS@X-Plus 5-Series", - "sub_path": "filament/X5/HATCHBOX ABS @X-Plus 5.json" - }, - { - "name": "HATCHBOX ABS @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "HATCHBOX ABS @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "HATCHBOX ABS @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "HATCHBOX ABS @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "HATCHBOX PETG@X-Plus 5-Series", - "sub_path": "filament/X5/HATCHBOX PETG @X-Plus 5.json" - }, - { - "name": "HATCHBOX PETG @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "HATCHBOX PETG @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "HATCHBOX PETG @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "HATCHBOX PETG @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PAHT-GF@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PAHT-GF @X-Plus 5.json" - }, - { - "name": "QIDI PAHT-GF @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PAHT-GF @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PAHT-GF @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PAHT-GF @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PAHT-GF @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PAHT-GF @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PET-GF@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PET-GF @X-Plus 5.json" - }, - { - "name": "QIDI PET-GF @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PET-GF @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PET-GF @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PET-GF @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PET-GF @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PET-GF @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI UltraPA-CF25@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI UltraPA-CF25 @X-Plus 5.json" - }, - { - "name": "QIDI UltraPA-CF25 @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI UltraPA-CF25 @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI UltraPA-CF25 @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI UltraPA-CF25 @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI UltraPA-CF25 @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI UltraPA-CF25 @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI WOOD Rapido@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI WOOD Rapido @X-Plus 5.json" - }, - { - "name": "QIDI WOOD Rapido @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI WOOD Rapido @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI WOOD Rapido @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI WOOD Rapido @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI WOOD Rapido @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI WOOD Rapido @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "Generic PC@X-Plus 5-Series", - "sub_path": "filament/X5/Generic PC @X-Plus 5.json" - }, - { - "name": "Generic PC @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/Generic PC @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "Generic PC @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/Generic PC @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "Generic PC @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/Generic PC @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "Generic PC @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/Generic PC @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI TPU-Aero@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI TPU-Aero @X-Plus 5.json" - }, - { - "name": "QIDI TPU-Aero @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI TPU-Aero @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI TPU-Aero @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI TPU-Aero @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI Support For PET/PA@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI Support For PET-PA @X-Plus 5.json" - }, - { - "name": "QIDI Support For PET/PA @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI Support For PET-PA @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI Support For PET/PA @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI Support For PET-PA @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI Support For PET/PA @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI Support For PET-PA @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI Support For PAHT@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI Support For PAHT @X-Plus 5.json" - }, - { - "name": "QIDI Support For PAHT @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI Support For PAHT @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI Support For PAHT @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI Support For PAHT @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI Support For PAHT @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI Support For PAHT @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PLA Basic@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PLA Basic @X-Plus 5.json" - }, - { - "name": "QIDI PLA Basic @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "QIDI PLA Basic @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PLA Basic @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PLA Basic @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PLA Matte Basic@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PLA Matte Basic @X-Plus 5.json" - }, - { - "name": "QIDI PLA Matte Basic @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "QIDI PLA Matte Basic @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PLA Matte Basic @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PLA Matte Basic @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PETG Rapido@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PETG Rapido @X-Plus 5.json" - }, - { - "name": "QIDI PETG Rapido @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "QIDI PETG Rapido @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PETG Rapido @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PETG Rapido @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PETG Basic@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PETG Basic @X-Plus 5.json" - }, - { - "name": "QIDI PETG Basic @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "QIDI PETG Basic @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PETG Basic @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PETG Basic @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PETG Translucent@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PETG Translucent @X-Plus 5.json" - }, - { - "name": "QIDI PETG Translucent @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "QIDI PETG Translucent @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PETG Translucent @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PETG Translucent @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PETG-CF@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PETG-CF @X-Plus 5.json" - }, - { - "name": "QIDI PETG-CF @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PETG-CF @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PETG-CF @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PETG-CF @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PETG-CF @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PETG-CF @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PETG-GF@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PETG-GF @X-Plus 5.json" - }, - { - "name": "QIDI PETG-GF @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PETG-GF @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PETG-GF @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PETG-GF @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PETG-GF @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PETG-GF @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PPS-GF@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PPS-GF @X-Plus 5.json" - }, - { - "name": "QIDI PPS-GF @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PPS-GF @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PPS-GF @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PPS-GF @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PPS-GF @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PPS-GF @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PEBA 95A@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PEBA 95A @X-Plus 5.json" - }, - { - "name": "QIDI PEBA 95A @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PEBA 95A @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PEBA 95A @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PEBA 95A @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI ASA-CF@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI ASA-CF @X-Plus 5.json" - }, - { - "name": "QIDI ASA-CF @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI ASA-CF @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI ASA-CF @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI ASA-CF @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI ASA-CF @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI ASA-CF @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI TPU-GF@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI TPU-GF @X-Plus 5.json" - }, - { - "name": "QIDI TPU-GF @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI TPU-GF @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI TPU-GF @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI TPU-GF @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI TPU-GF @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI TPU-GF @Qidi X-Plus 5 0.8 nozzle.json" } ], "machine_list": [ @@ -7214,6 +7214,10 @@ "name": "Qidi X-Max 4 0.4 nozzle", "sub_path": "machine/Qidi X-Max 4 0.4 nozzle.json" }, + { + "name": "Qidi X-Plus 5 0.4 nozzle", + "sub_path": "machine/Qidi X-Plus 5 0.4 nozzle.json" + }, { "name": "Qidi Q2 0.4 nozzle", "sub_path": "machine/Qidi Q2 0.4 nozzle.json" @@ -7234,6 +7238,18 @@ "name": "Qidi X-Max 4 0.8 nozzle", "sub_path": "machine/Qidi X-Max 4 0.8 nozzle.json" }, + { + "name": "Qidi X-Plus 5 0.2 nozzle", + "sub_path": "machine/Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Qidi X-Plus 5 0.6 nozzle", + "sub_path": "machine/Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Qidi X-Plus 5 0.8 nozzle", + "sub_path": "machine/Qidi X-Plus 5 0.8 nozzle.json" + }, { "name": "Qidi Q2 0.2 nozzle", "sub_path": "machine/Qidi Q2 0.2 nozzle.json" @@ -7257,22 +7273,6 @@ { "name": "Qidi Q2C 0.8 nozzle", "sub_path": "machine/Qidi Q2C 0.8 nozzle.json" - }, - { - "name": "Qidi X-Plus 5 0.4 nozzle", - "sub_path": "machine/Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "Qidi X-Plus 5 0.6 nozzle", - "sub_path": "machine/Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "Qidi X-Plus 5 0.8 nozzle", - "sub_path": "machine/Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "Qidi X-Plus 5 0.2 nozzle", - "sub_path": "machine/Qidi X-Plus 5 0.2 nozzle.json" } ] } diff --git a/resources/profiles/Ratrig.json b/resources/profiles/Ratrig.json index dbe4c3cc56..09ce326368 100644 --- a/resources/profiles/Ratrig.json +++ b/resources/profiles/Ratrig.json @@ -276,26 +276,22 @@ } ], "filament_list": [ - { - "name": "Generic ABS BigNozzle @RatRig", - "sub_path": "filament/Generic ABS BigNozzle @RatRig.json" - }, { "name": "Generic ABS @RatRig", "sub_path": "filament/Generic ABS @RatRig.json" }, { - "name": "RatRig PunkFil ABS", - "sub_path": "filament/RatRig PunkFil ABS.json" - }, - { - "name": "Generic ASA BigNozzle @RatRig", - "sub_path": "filament/Generic ASA BigNozzle @RatRig.json" + "name": "Generic ABS BigNozzle @RatRig", + "sub_path": "filament/Generic ABS BigNozzle @RatRig.json" }, { "name": "Generic ASA @RatRig", "sub_path": "filament/Generic ASA @RatRig.json" }, + { + "name": "Generic ASA BigNozzle @RatRig", + "sub_path": "filament/Generic ASA BigNozzle @RatRig.json" + }, { "name": "Generic PA @RatRig", "sub_path": "filament/Generic PA @RatRig.json" @@ -308,38 +304,30 @@ "name": "Generic PC @RatRig", "sub_path": "filament/Generic PC @RatRig.json" }, - { - "name": "Generic PCTG BigNozzle @RatRig", - "sub_path": "filament/Generic PCTG BigNozzle @RatRig.json" - }, - { - "name": "Generic PETG BigNozzle @RatRig", - "sub_path": "filament/Generic PETG BigNozzle @RatRig.json" - }, { "name": "Generic PCTG @RatRig", "sub_path": "filament/Generic PCTG @RatRig.json" }, + { + "name": "Generic PCTG BigNozzle @RatRig", + "sub_path": "filament/Generic PCTG BigNozzle @RatRig.json" + }, { "name": "Generic PETG @RatRig", "sub_path": "filament/Generic PETG @RatRig.json" }, { - "name": "RatRig PunkFil PETG", - "sub_path": "filament/RatRig PunkFil PETG.json" - }, - { - "name": "RatRig PunkFil PETG CF", - "sub_path": "filament/RatRig PunkFil PETG CF.json" - }, - { - "name": "Generic PLA BigNozzle @RatRig", - "sub_path": "filament/Generic PLA BigNozzle @RatRig.json" + "name": "Generic PETG BigNozzle @RatRig", + "sub_path": "filament/Generic PETG BigNozzle @RatRig.json" }, { "name": "Generic PLA @RatRig", "sub_path": "filament/Generic PLA @RatRig.json" }, + { + "name": "Generic PLA BigNozzle @RatRig", + "sub_path": "filament/Generic PLA BigNozzle @RatRig.json" + }, { "name": "Generic PLA-CF @RatRig", "sub_path": "filament/Generic PLA-CF @RatRig.json" @@ -348,13 +336,25 @@ "name": "Generic PVA @RatRig", "sub_path": "filament/Generic PVA @RatRig.json" }, + { + "name": "Generic TPU @RatRig", + "sub_path": "filament/Generic TPU @RatRig.json" + }, { "name": "Generic TPU BigNozzle @RatRig", "sub_path": "filament/Generic TPU BigNozzle @RatRig.json" }, { - "name": "Generic TPU @RatRig", - "sub_path": "filament/Generic TPU @RatRig.json" + "name": "RatRig PunkFil ABS", + "sub_path": "filament/RatRig PunkFil ABS.json" + }, + { + "name": "RatRig PunkFil PETG", + "sub_path": "filament/RatRig PunkFil PETG.json" + }, + { + "name": "RatRig PunkFil PETG CF", + "sub_path": "filament/RatRig PunkFil PETG CF.json" } ], "machine_list": [ diff --git a/resources/profiles/SeeMeCNC.json b/resources/profiles/SeeMeCNC.json index 4bc30dee93..43a273d52c 100644 --- a/resources/profiles/SeeMeCNC.json +++ b/resources/profiles/SeeMeCNC.json @@ -1,6 +1,6 @@ { "name": "SeeMeCNC", - "version": "2.4.0.03", + "version": "2.4.0.04", "force_update": "1", "description": "SeeMeCNC configurations - Full profile set for Artemis, BOSSdelta, and RostockMAX printers", "machine_model_list": [ @@ -50,10 +50,6 @@ "name": "SeeMeCNC process base 1.0mm", "sub_path": "process/SeeMeCNC_process_base_1.0mm.json" }, - { - "name": "SeeMeCNC process base", - "sub_path": "process/SeeMeCNC_process_base.json" - }, { "name": "0.16mm Fine @SeeMeCNC Artemis 0.4", "sub_path": "process/0.16mm Fine @SeeMeCNC Artemis 0.4.json" @@ -86,34 +82,6 @@ "name": "0.20mm Draft @SeeMeCNC RostockMAX v3.2 0.4", "sub_path": "process/0.20mm Draft @SeeMeCNC RostockMAX v3.2 0.4.json" }, - { - "name": "0.20mm Fine @SeeMeCNC Artemis 0.5", - "sub_path": "process/0.20mm Fine @SeeMeCNC Artemis 0.5.json" - }, - { - "name": "0.20mm Fine @SeeMeCNC BOSSdelta 300 0.5", - "sub_path": "process/0.20mm Fine @SeeMeCNC BOSSdelta 300 0.5.json" - }, - { - "name": "0.20mm Fine @SeeMeCNC BOSSdelta 500 0505 0.5", - "sub_path": "process/0.20mm Fine @SeeMeCNC BOSSdelta 500 0505 0.5.json" - }, - { - "name": "0.20mm Fine @SeeMeCNC BOSSdelta 500 0510 0.5", - "sub_path": "process/0.20mm Fine @SeeMeCNC BOSSdelta 500 0510 0.5.json" - }, - { - "name": "0.20mm Fine @SeeMeCNC BOSSdelta 500 0521 0.5", - "sub_path": "process/0.20mm Fine @SeeMeCNC BOSSdelta 500 0521 0.5.json" - }, - { - "name": "0.20mm Fine @SeeMeCNC RostockMAX v3.2 0.5", - "sub_path": "process/0.20mm Fine @SeeMeCNC RostockMAX v3.2 0.5.json" - }, - { - "name": "0.20mm Fine @SeeMeCNC RostockMAX v4 0.5", - "sub_path": "process/0.20mm Fine @SeeMeCNC RostockMAX v4 0.5.json" - }, { "name": "0.20mm Standard @SeeMeCNC Artemis 0.4", "sub_path": "process/0.20mm Standard @SeeMeCNC Artemis 0.4.json" @@ -170,34 +138,6 @@ "name": "0.24mm Draft @SeeMeCNC RostockMAX v4 0.4", "sub_path": "process/0.24mm Draft @SeeMeCNC RostockMAX v4 0.4.json" }, - { - "name": "0.25mm Standard @SeeMeCNC Artemis 0.5", - "sub_path": "process/0.25mm Standard @SeeMeCNC Artemis 0.5.json" - }, - { - "name": "0.25mm Standard @SeeMeCNC BOSSdelta 300 0.5", - "sub_path": "process/0.25mm Standard @SeeMeCNC BOSSdelta 300 0.5.json" - }, - { - "name": "0.25mm Standard @SeeMeCNC BOSSdelta 500 0505 0.5", - "sub_path": "process/0.25mm Standard @SeeMeCNC BOSSdelta 500 0505 0.5.json" - }, - { - "name": "0.25mm Standard @SeeMeCNC BOSSdelta 500 0510 0.5", - "sub_path": "process/0.25mm Standard @SeeMeCNC BOSSdelta 500 0510 0.5.json" - }, - { - "name": "0.25mm Standard @SeeMeCNC BOSSdelta 500 0521 0.5", - "sub_path": "process/0.25mm Standard @SeeMeCNC BOSSdelta 500 0521 0.5.json" - }, - { - "name": "0.25mm Standard @SeeMeCNC RostockMAX v3.2 0.5", - "sub_path": "process/0.25mm Standard @SeeMeCNC RostockMAX v3.2 0.5.json" - }, - { - "name": "0.25mm Standard @SeeMeCNC RostockMAX v4 0.5", - "sub_path": "process/0.25mm Standard @SeeMeCNC RostockMAX v4 0.5.json" - }, { "name": "0.28mm Extra Draft @SeeMeCNC Artemis 0.4", "sub_path": "process/0.28mm Extra Draft @SeeMeCNC Artemis 0.4.json" @@ -227,32 +167,60 @@ "sub_path": "process/0.28mm Extra Draft @SeeMeCNC RostockMAX v4 0.4.json" }, { - "name": "0.28mm Fine @SeeMeCNC Artemis 0.7", - "sub_path": "process/0.28mm Fine @SeeMeCNC Artemis 0.7.json" + "name": "0.20mm Fine @SeeMeCNC Artemis 0.5", + "sub_path": "process/0.20mm Fine @SeeMeCNC Artemis 0.5.json" }, { - "name": "0.28mm Fine @SeeMeCNC BOSSdelta 300 0.7", - "sub_path": "process/0.28mm Fine @SeeMeCNC BOSSdelta 300 0.7.json" + "name": "0.20mm Fine @SeeMeCNC BOSSdelta 300 0.5", + "sub_path": "process/0.20mm Fine @SeeMeCNC BOSSdelta 300 0.5.json" }, { - "name": "0.28mm Fine @SeeMeCNC BOSSdelta 500 0505 0.7", - "sub_path": "process/0.28mm Fine @SeeMeCNC BOSSdelta 500 0505 0.7.json" + "name": "0.20mm Fine @SeeMeCNC BOSSdelta 500 0505 0.5", + "sub_path": "process/0.20mm Fine @SeeMeCNC BOSSdelta 500 0505 0.5.json" }, { - "name": "0.28mm Fine @SeeMeCNC BOSSdelta 500 0510 0.7", - "sub_path": "process/0.28mm Fine @SeeMeCNC BOSSdelta 500 0510 0.7.json" + "name": "0.20mm Fine @SeeMeCNC BOSSdelta 500 0510 0.5", + "sub_path": "process/0.20mm Fine @SeeMeCNC BOSSdelta 500 0510 0.5.json" }, { - "name": "0.28mm Fine @SeeMeCNC BOSSdelta 500 0521 0.7", - "sub_path": "process/0.28mm Fine @SeeMeCNC BOSSdelta 500 0521 0.7.json" + "name": "0.20mm Fine @SeeMeCNC BOSSdelta 500 0521 0.5", + "sub_path": "process/0.20mm Fine @SeeMeCNC BOSSdelta 500 0521 0.5.json" }, { - "name": "0.28mm Fine @SeeMeCNC RostockMAX v3.2 0.7", - "sub_path": "process/0.28mm Fine @SeeMeCNC RostockMAX v3.2 0.7.json" + "name": "0.20mm Fine @SeeMeCNC RostockMAX v3.2 0.5", + "sub_path": "process/0.20mm Fine @SeeMeCNC RostockMAX v3.2 0.5.json" }, { - "name": "0.28mm Fine @SeeMeCNC RostockMAX v4 0.7", - "sub_path": "process/0.28mm Fine @SeeMeCNC RostockMAX v4 0.7.json" + "name": "0.20mm Fine @SeeMeCNC RostockMAX v4 0.5", + "sub_path": "process/0.20mm Fine @SeeMeCNC RostockMAX v4 0.5.json" + }, + { + "name": "0.25mm Standard @SeeMeCNC Artemis 0.5", + "sub_path": "process/0.25mm Standard @SeeMeCNC Artemis 0.5.json" + }, + { + "name": "0.25mm Standard @SeeMeCNC BOSSdelta 300 0.5", + "sub_path": "process/0.25mm Standard @SeeMeCNC BOSSdelta 300 0.5.json" + }, + { + "name": "0.25mm Standard @SeeMeCNC BOSSdelta 500 0505 0.5", + "sub_path": "process/0.25mm Standard @SeeMeCNC BOSSdelta 500 0505 0.5.json" + }, + { + "name": "0.25mm Standard @SeeMeCNC BOSSdelta 500 0510 0.5", + "sub_path": "process/0.25mm Standard @SeeMeCNC BOSSdelta 500 0510 0.5.json" + }, + { + "name": "0.25mm Standard @SeeMeCNC BOSSdelta 500 0521 0.5", + "sub_path": "process/0.25mm Standard @SeeMeCNC BOSSdelta 500 0521 0.5.json" + }, + { + "name": "0.25mm Standard @SeeMeCNC RostockMAX v3.2 0.5", + "sub_path": "process/0.25mm Standard @SeeMeCNC RostockMAX v3.2 0.5.json" + }, + { + "name": "0.25mm Standard @SeeMeCNC RostockMAX v4 0.5", + "sub_path": "process/0.25mm Standard @SeeMeCNC RostockMAX v4 0.5.json" }, { "name": "0.30mm Draft @SeeMeCNC Artemis 0.5", @@ -282,34 +250,6 @@ "name": "0.30mm Draft @SeeMeCNC RostockMAX v4 0.5", "sub_path": "process/0.30mm Draft @SeeMeCNC RostockMAX v4 0.5.json" }, - { - "name": "0.30mm TPU Solid @SeeMeCNC Artemis 0.7", - "sub_path": "process/0.30mm TPU Solid @SeeMeCNC Artemis 0.7.json" - }, - { - "name": "0.30mm TPU Solid @SeeMeCNC BOSSdelta 300 0.7", - "sub_path": "process/0.30mm TPU Solid @SeeMeCNC BOSSdelta 300 0.7.json" - }, - { - "name": "0.30mm TPU Solid @SeeMeCNC BOSSdelta 500 0505 0.7", - "sub_path": "process/0.30mm TPU Solid @SeeMeCNC BOSSdelta 500 0505 0.7.json" - }, - { - "name": "0.30mm TPU Solid @SeeMeCNC BOSSdelta 500 0510 0.7", - "sub_path": "process/0.30mm TPU Solid @SeeMeCNC BOSSdelta 500 0510 0.7.json" - }, - { - "name": "0.30mm TPU Solid @SeeMeCNC BOSSdelta 500 0521 0.7", - "sub_path": "process/0.30mm TPU Solid @SeeMeCNC BOSSdelta 500 0521 0.7.json" - }, - { - "name": "0.30mm TPU Solid @SeeMeCNC RostockMAX v3.2 0.7", - "sub_path": "process/0.30mm TPU Solid @SeeMeCNC RostockMAX v3.2 0.7.json" - }, - { - "name": "0.30mm TPU Solid @SeeMeCNC RostockMAX v4 0.7", - "sub_path": "process/0.30mm TPU Solid @SeeMeCNC RostockMAX v4 0.7.json" - }, { "name": "0.35mm Extra Draft @SeeMeCNC Artemis 0.5", "sub_path": "process/0.35mm Extra Draft @SeeMeCNC Artemis 0.5.json" @@ -338,6 +278,62 @@ "name": "0.35mm Extra Draft @SeeMeCNC RostockMAX v4 0.5", "sub_path": "process/0.35mm Extra Draft @SeeMeCNC RostockMAX v4 0.5.json" }, + { + "name": "0.28mm Fine @SeeMeCNC Artemis 0.7", + "sub_path": "process/0.28mm Fine @SeeMeCNC Artemis 0.7.json" + }, + { + "name": "0.28mm Fine @SeeMeCNC BOSSdelta 300 0.7", + "sub_path": "process/0.28mm Fine @SeeMeCNC BOSSdelta 300 0.7.json" + }, + { + "name": "0.28mm Fine @SeeMeCNC BOSSdelta 500 0505 0.7", + "sub_path": "process/0.28mm Fine @SeeMeCNC BOSSdelta 500 0505 0.7.json" + }, + { + "name": "0.28mm Fine @SeeMeCNC BOSSdelta 500 0510 0.7", + "sub_path": "process/0.28mm Fine @SeeMeCNC BOSSdelta 500 0510 0.7.json" + }, + { + "name": "0.28mm Fine @SeeMeCNC BOSSdelta 500 0521 0.7", + "sub_path": "process/0.28mm Fine @SeeMeCNC BOSSdelta 500 0521 0.7.json" + }, + { + "name": "0.28mm Fine @SeeMeCNC RostockMAX v3.2 0.7", + "sub_path": "process/0.28mm Fine @SeeMeCNC RostockMAX v3.2 0.7.json" + }, + { + "name": "0.28mm Fine @SeeMeCNC RostockMAX v4 0.7", + "sub_path": "process/0.28mm Fine @SeeMeCNC RostockMAX v4 0.7.json" + }, + { + "name": "0.30mm TPU Solid @SeeMeCNC Artemis 0.7", + "sub_path": "process/0.30mm TPU Solid @SeeMeCNC Artemis 0.7.json" + }, + { + "name": "0.30mm TPU Solid @SeeMeCNC BOSSdelta 300 0.7", + "sub_path": "process/0.30mm TPU Solid @SeeMeCNC BOSSdelta 300 0.7.json" + }, + { + "name": "0.30mm TPU Solid @SeeMeCNC BOSSdelta 500 0505 0.7", + "sub_path": "process/0.30mm TPU Solid @SeeMeCNC BOSSdelta 500 0505 0.7.json" + }, + { + "name": "0.30mm TPU Solid @SeeMeCNC BOSSdelta 500 0510 0.7", + "sub_path": "process/0.30mm TPU Solid @SeeMeCNC BOSSdelta 500 0510 0.7.json" + }, + { + "name": "0.30mm TPU Solid @SeeMeCNC BOSSdelta 500 0521 0.7", + "sub_path": "process/0.30mm TPU Solid @SeeMeCNC BOSSdelta 500 0521 0.7.json" + }, + { + "name": "0.30mm TPU Solid @SeeMeCNC RostockMAX v3.2 0.7", + "sub_path": "process/0.30mm TPU Solid @SeeMeCNC RostockMAX v3.2 0.7.json" + }, + { + "name": "0.30mm TPU Solid @SeeMeCNC RostockMAX v4 0.7", + "sub_path": "process/0.30mm TPU Solid @SeeMeCNC RostockMAX v4 0.7.json" + }, { "name": "0.35mm Standard @SeeMeCNC Artemis 0.7", "sub_path": "process/0.35mm Standard @SeeMeCNC Artemis 0.7.json" @@ -394,34 +390,6 @@ "name": "0.35mm TPU Vase @SeeMeCNC RostockMAX v4 0.7", "sub_path": "process/0.35mm TPU Vase @SeeMeCNC RostockMAX v4 0.7.json" }, - { - "name": "0.40mm Fine @SeeMeCNC Artemis 1.0", - "sub_path": "process/0.40mm Fine @SeeMeCNC Artemis 1.0.json" - }, - { - "name": "0.40mm Fine @SeeMeCNC BOSSdelta 300 1.0", - "sub_path": "process/0.40mm Fine @SeeMeCNC BOSSdelta 300 1.0.json" - }, - { - "name": "0.40mm Fine @SeeMeCNC BOSSdelta 500 0505 1.0", - "sub_path": "process/0.40mm Fine @SeeMeCNC BOSSdelta 500 0505 1.0.json" - }, - { - "name": "0.40mm Fine @SeeMeCNC BOSSdelta 500 0510 1.0", - "sub_path": "process/0.40mm Fine @SeeMeCNC BOSSdelta 500 0510 1.0.json" - }, - { - "name": "0.40mm Fine @SeeMeCNC BOSSdelta 500 0521 1.0", - "sub_path": "process/0.40mm Fine @SeeMeCNC BOSSdelta 500 0521 1.0.json" - }, - { - "name": "0.40mm Fine @SeeMeCNC RostockMAX v3.2 1.0", - "sub_path": "process/0.40mm Fine @SeeMeCNC RostockMAX v3.2 1.0.json" - }, - { - "name": "0.40mm Fine @SeeMeCNC RostockMAX v4 1.0", - "sub_path": "process/0.40mm Fine @SeeMeCNC RostockMAX v4 1.0.json" - }, { "name": "0.42mm Draft @SeeMeCNC Artemis 0.7", "sub_path": "process/0.42mm Draft @SeeMeCNC Artemis 0.7.json" @@ -478,6 +446,34 @@ "name": "0.49mm Extra Draft @SeeMeCNC RostockMAX v4 0.7", "sub_path": "process/0.49mm Extra Draft @SeeMeCNC RostockMAX v4 0.7.json" }, + { + "name": "0.40mm Fine @SeeMeCNC Artemis 1.0", + "sub_path": "process/0.40mm Fine @SeeMeCNC Artemis 1.0.json" + }, + { + "name": "0.40mm Fine @SeeMeCNC BOSSdelta 300 1.0", + "sub_path": "process/0.40mm Fine @SeeMeCNC BOSSdelta 300 1.0.json" + }, + { + "name": "0.40mm Fine @SeeMeCNC BOSSdelta 500 0505 1.0", + "sub_path": "process/0.40mm Fine @SeeMeCNC BOSSdelta 500 0505 1.0.json" + }, + { + "name": "0.40mm Fine @SeeMeCNC BOSSdelta 500 0510 1.0", + "sub_path": "process/0.40mm Fine @SeeMeCNC BOSSdelta 500 0510 1.0.json" + }, + { + "name": "0.40mm Fine @SeeMeCNC BOSSdelta 500 0521 1.0", + "sub_path": "process/0.40mm Fine @SeeMeCNC BOSSdelta 500 0521 1.0.json" + }, + { + "name": "0.40mm Fine @SeeMeCNC RostockMAX v3.2 1.0", + "sub_path": "process/0.40mm Fine @SeeMeCNC RostockMAX v3.2 1.0.json" + }, + { + "name": "0.40mm Fine @SeeMeCNC RostockMAX v4 1.0", + "sub_path": "process/0.40mm Fine @SeeMeCNC RostockMAX v4 1.0.json" + }, { "name": "0.50mm Standard @SeeMeCNC Artemis 1.0", "sub_path": "process/0.50mm Standard @SeeMeCNC Artemis 1.0.json" @@ -561,6 +557,10 @@ { "name": "0.70mm Extra Draft @SeeMeCNC RostockMAX v4 1.0", "sub_path": "process/0.70mm Extra Draft @SeeMeCNC RostockMAX v4 1.0.json" + }, + { + "name": "SeeMeCNC process base", + "sub_path": "process/SeeMeCNC_process_base.json" } ], "filament_list": [ diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS_0_4mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS_0_4mm.json deleted file mode 100644 index d5df31d0aa..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS_0_4mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC ABS 0.4 nozzle", - "inherits": "SeeMeCNC ABS", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC ABS 0.4 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 0.4 nozzle", - "SeeMeCNC BOSSdelta 500 0505 0.4 nozzle", - "SeeMeCNC BOSSdelta 500 0510 0.4 nozzle", - "SeeMeCNC BOSSdelta 500 0521 0.4 nozzle", - "SeeMeCNC BOSSdelta 300 0.4 nozzle", - "SeeMeCNC RostockMAX v3.2 0.4 nozzle", - "SeeMeCNC RostockMAX v4 0.4 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.16mm Fine @SeeMeCNC Artemis 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 300 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.16mm Fine @SeeMeCNC RostockMAX v3.2 0.4", - "0.16mm Fine @SeeMeCNC RostockMAX v4 0.4", - "0.20mm Standard @SeeMeCNC Artemis 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 300 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.20mm Standard @SeeMeCNC RostockMAX v3.2 0.4", - "0.20mm Standard @SeeMeCNC RostockMAX v4 0.4", - "0.24mm Draft @SeeMeCNC Artemis 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 300 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.24mm Draft @SeeMeCNC RostockMAX v3.2 0.4", - "0.24mm Draft @SeeMeCNC RostockMAX v4 0.4", - "0.28mm Extra Draft @SeeMeCNC Artemis 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 300 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.28mm Extra Draft @SeeMeCNC RostockMAX v3.2 0.4", - "0.28mm Extra Draft @SeeMeCNC RostockMAX v4 0.4" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "5" - ], - "filament_z_hop": [ - "0.2" - ], - "filament_retraction_speed": [ - "45" - ], - "filament_deretraction_speed": [ - "35" - ], - "setting_id": "FOSiDadyHyp8WKTb", - "filament_id": "SMCFB00104" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS_0_5mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS_0_5mm.json deleted file mode 100644 index 6cdf1850d4..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS_0_5mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC ABS 0.5 nozzle", - "inherits": "SeeMeCNC ABS", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC ABS 0.5 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 0.5 nozzle", - "SeeMeCNC BOSSdelta 500 0505 0.5 nozzle", - "SeeMeCNC BOSSdelta 500 0510 0.5 nozzle", - "SeeMeCNC BOSSdelta 500 0521 0.5 nozzle", - "SeeMeCNC BOSSdelta 300 0.5 nozzle", - "SeeMeCNC RostockMAX v3.2 0.5 nozzle", - "SeeMeCNC RostockMAX v4 0.5 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.20mm Fine @SeeMeCNC Artemis 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 300 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.20mm Fine @SeeMeCNC RostockMAX v3.2 0.5", - "0.20mm Fine @SeeMeCNC RostockMAX v4 0.5", - "0.25mm Standard @SeeMeCNC Artemis 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 300 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.25mm Standard @SeeMeCNC RostockMAX v3.2 0.5", - "0.25mm Standard @SeeMeCNC RostockMAX v4 0.5", - "0.30mm Draft @SeeMeCNC Artemis 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 300 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.30mm Draft @SeeMeCNC RostockMAX v3.2 0.5", - "0.30mm Draft @SeeMeCNC RostockMAX v4 0.5", - "0.35mm Extra Draft @SeeMeCNC Artemis 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 300 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.35mm Extra Draft @SeeMeCNC RostockMAX v3.2 0.5", - "0.35mm Extra Draft @SeeMeCNC RostockMAX v4 0.5" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "5" - ], - "filament_z_hop": [ - "0.3" - ], - "filament_retraction_speed": [ - "45" - ], - "filament_deretraction_speed": [ - "35" - ], - "setting_id": "XzvEoqhK0cx7JieM", - "filament_id": "SMCFB00105" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS_0_7mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS_0_7mm.json deleted file mode 100644 index 8bdd0003fc..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS_0_7mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC ABS 0.7 nozzle", - "inherits": "SeeMeCNC ABS", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC ABS 0.7 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0505 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0510 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0521 0.7 nozzle", - "SeeMeCNC BOSSdelta 300 0.7 nozzle", - "SeeMeCNC RostockMAX v3.2 0.7 nozzle", - "SeeMeCNC RostockMAX v4 0.7 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.28mm Fine @SeeMeCNC Artemis 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 300 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.28mm Fine @SeeMeCNC RostockMAX v3.2 0.7", - "0.28mm Fine @SeeMeCNC RostockMAX v4 0.7", - "0.35mm Standard @SeeMeCNC Artemis 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 300 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.35mm Standard @SeeMeCNC RostockMAX v3.2 0.7", - "0.35mm Standard @SeeMeCNC RostockMAX v4 0.7", - "0.42mm Draft @SeeMeCNC Artemis 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 300 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.42mm Draft @SeeMeCNC RostockMAX v3.2 0.7", - "0.42mm Draft @SeeMeCNC RostockMAX v4 0.7", - "0.49mm Extra Draft @SeeMeCNC Artemis 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 300 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.49mm Extra Draft @SeeMeCNC RostockMAX v3.2 0.7", - "0.49mm Extra Draft @SeeMeCNC RostockMAX v4 0.7" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "6" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_retraction_speed": [ - "45" - ], - "filament_deretraction_speed": [ - "35" - ], - "setting_id": "RbmLGSWPaVvl0NNr", - "filament_id": "SMCFB00107" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS_1_0mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS_1_0mm.json deleted file mode 100644 index 0d060b85f3..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS_1_0mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC ABS 1.0 nozzle", - "inherits": "SeeMeCNC ABS", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC ABS 1.0 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 1.0 nozzle", - "SeeMeCNC BOSSdelta 500 0505 1.0 nozzle", - "SeeMeCNC BOSSdelta 500 0510 1.0 nozzle", - "SeeMeCNC BOSSdelta 500 0521 1.0 nozzle", - "SeeMeCNC BOSSdelta 300 1.0 nozzle", - "SeeMeCNC RostockMAX v3.2 1.0 nozzle", - "SeeMeCNC RostockMAX v4 1.0 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.40mm Fine @SeeMeCNC Artemis 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 300 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.40mm Fine @SeeMeCNC RostockMAX v3.2 1.0", - "0.40mm Fine @SeeMeCNC RostockMAX v4 1.0", - "0.50mm Standard @SeeMeCNC Artemis 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 300 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.50mm Standard @SeeMeCNC RostockMAX v3.2 1.0", - "0.50mm Standard @SeeMeCNC RostockMAX v4 1.0", - "0.60mm Draft @SeeMeCNC Artemis 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 300 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.60mm Draft @SeeMeCNC RostockMAX v3.2 1.0", - "0.60mm Draft @SeeMeCNC RostockMAX v4 1.0", - "0.70mm Extra Draft @SeeMeCNC Artemis 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 300 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.70mm Extra Draft @SeeMeCNC RostockMAX v3.2 1.0", - "0.70mm Extra Draft @SeeMeCNC RostockMAX v4 1.0" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "6" - ], - "filament_z_hop": [ - "0.5" - ], - "filament_retraction_speed": [ - "45" - ], - "filament_deretraction_speed": [ - "35" - ], - "setting_id": "DTcAxACOOtdvD43R", - "filament_id": "SMCFB00110" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA_CF_0_4mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA_CF_0_4mm.json deleted file mode 100644 index fcde530598..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA_CF_0_4mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC PA-CF 0.4 nozzle", - "inherits": "SeeMeCNC PA-CF", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC PA-CF 0.4 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 0.4 nozzle", - "SeeMeCNC BOSSdelta 500 0505 0.4 nozzle", - "SeeMeCNC BOSSdelta 500 0510 0.4 nozzle", - "SeeMeCNC BOSSdelta 500 0521 0.4 nozzle", - "SeeMeCNC BOSSdelta 300 0.4 nozzle", - "SeeMeCNC RostockMAX v3.2 0.4 nozzle", - "SeeMeCNC RostockMAX v4 0.4 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.16mm Fine @SeeMeCNC Artemis 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 300 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.16mm Fine @SeeMeCNC RostockMAX v3.2 0.4", - "0.16mm Fine @SeeMeCNC RostockMAX v4 0.4", - "0.20mm Standard @SeeMeCNC Artemis 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 300 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.20mm Standard @SeeMeCNC RostockMAX v3.2 0.4", - "0.20mm Standard @SeeMeCNC RostockMAX v4 0.4", - "0.24mm Draft @SeeMeCNC Artemis 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 300 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.24mm Draft @SeeMeCNC RostockMAX v3.2 0.4", - "0.24mm Draft @SeeMeCNC RostockMAX v4 0.4", - "0.28mm Extra Draft @SeeMeCNC Artemis 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 300 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.28mm Extra Draft @SeeMeCNC RostockMAX v3.2 0.4", - "0.28mm Extra Draft @SeeMeCNC RostockMAX v4 0.4" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "5" - ], - "filament_z_hop": [ - "0.2" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_deretraction_speed": [ - "30" - ], - "setting_id": "jf0puhp8kCuwL3jt", - "filament_id": "SMCFN00104" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA_CF_0_5mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA_CF_0_5mm.json deleted file mode 100644 index 0439f58952..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA_CF_0_5mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC PA-CF 0.5 nozzle", - "inherits": "SeeMeCNC PA-CF", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC PA-CF 0.5 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 0.5 nozzle", - "SeeMeCNC BOSSdelta 500 0505 0.5 nozzle", - "SeeMeCNC BOSSdelta 500 0510 0.5 nozzle", - "SeeMeCNC BOSSdelta 500 0521 0.5 nozzle", - "SeeMeCNC BOSSdelta 300 0.5 nozzle", - "SeeMeCNC RostockMAX v3.2 0.5 nozzle", - "SeeMeCNC RostockMAX v4 0.5 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.20mm Fine @SeeMeCNC Artemis 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 300 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.20mm Fine @SeeMeCNC RostockMAX v3.2 0.5", - "0.20mm Fine @SeeMeCNC RostockMAX v4 0.5", - "0.25mm Standard @SeeMeCNC Artemis 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 300 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.25mm Standard @SeeMeCNC RostockMAX v3.2 0.5", - "0.25mm Standard @SeeMeCNC RostockMAX v4 0.5", - "0.30mm Draft @SeeMeCNC Artemis 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 300 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.30mm Draft @SeeMeCNC RostockMAX v3.2 0.5", - "0.30mm Draft @SeeMeCNC RostockMAX v4 0.5", - "0.35mm Extra Draft @SeeMeCNC Artemis 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 300 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.35mm Extra Draft @SeeMeCNC RostockMAX v3.2 0.5", - "0.35mm Extra Draft @SeeMeCNC RostockMAX v4 0.5" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "5" - ], - "filament_z_hop": [ - "0.3" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_deretraction_speed": [ - "30" - ], - "setting_id": "c3gXbtFjJn4aK7pL", - "filament_id": "SMCFN00105" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA_CF_0_7mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA_CF_0_7mm.json deleted file mode 100644 index d14e219656..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA_CF_0_7mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC PA-CF 0.7 nozzle", - "inherits": "SeeMeCNC PA-CF", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC PA-CF 0.7 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0505 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0510 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0521 0.7 nozzle", - "SeeMeCNC BOSSdelta 300 0.7 nozzle", - "SeeMeCNC RostockMAX v3.2 0.7 nozzle", - "SeeMeCNC RostockMAX v4 0.7 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.28mm Fine @SeeMeCNC Artemis 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 300 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.28mm Fine @SeeMeCNC RostockMAX v3.2 0.7", - "0.28mm Fine @SeeMeCNC RostockMAX v4 0.7", - "0.35mm Standard @SeeMeCNC Artemis 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 300 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.35mm Standard @SeeMeCNC RostockMAX v3.2 0.7", - "0.35mm Standard @SeeMeCNC RostockMAX v4 0.7", - "0.42mm Draft @SeeMeCNC Artemis 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 300 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.42mm Draft @SeeMeCNC RostockMAX v3.2 0.7", - "0.42mm Draft @SeeMeCNC RostockMAX v4 0.7", - "0.49mm Extra Draft @SeeMeCNC Artemis 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 300 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.49mm Extra Draft @SeeMeCNC RostockMAX v3.2 0.7", - "0.49mm Extra Draft @SeeMeCNC RostockMAX v4 0.7" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "6" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_deretraction_speed": [ - "30" - ], - "setting_id": "7sDIfUAs3Ftv7uUD", - "filament_id": "SMCFN00107" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA_CF_1_0mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA_CF_1_0mm.json deleted file mode 100644 index aa760ceef2..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA_CF_1_0mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC PA-CF 1.0 nozzle", - "inherits": "SeeMeCNC PA-CF", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC PA-CF 1.0 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 1.0 nozzle", - "SeeMeCNC BOSSdelta 500 0505 1.0 nozzle", - "SeeMeCNC BOSSdelta 500 0510 1.0 nozzle", - "SeeMeCNC BOSSdelta 500 0521 1.0 nozzle", - "SeeMeCNC BOSSdelta 300 1.0 nozzle", - "SeeMeCNC RostockMAX v3.2 1.0 nozzle", - "SeeMeCNC RostockMAX v4 1.0 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.40mm Fine @SeeMeCNC Artemis 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 300 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.40mm Fine @SeeMeCNC RostockMAX v3.2 1.0", - "0.40mm Fine @SeeMeCNC RostockMAX v4 1.0", - "0.50mm Standard @SeeMeCNC Artemis 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 300 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.50mm Standard @SeeMeCNC RostockMAX v3.2 1.0", - "0.50mm Standard @SeeMeCNC RostockMAX v4 1.0", - "0.60mm Draft @SeeMeCNC Artemis 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 300 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.60mm Draft @SeeMeCNC RostockMAX v3.2 1.0", - "0.60mm Draft @SeeMeCNC RostockMAX v4 1.0", - "0.70mm Extra Draft @SeeMeCNC Artemis 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 300 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.70mm Extra Draft @SeeMeCNC RostockMAX v3.2 1.0", - "0.70mm Extra Draft @SeeMeCNC RostockMAX v4 1.0" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "6" - ], - "filament_z_hop": [ - "0.5" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_deretraction_speed": [ - "30" - ], - "setting_id": "nr7CBE99WoHXy4Dw", - "filament_id": "SMCFN00110" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_0_4mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_0_4mm.json deleted file mode 100644 index bb37dfdbd4..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_0_4mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC PETG 0.4 nozzle", - "inherits": "SeeMeCNC PETG", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC PETG 0.4 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 0.4 nozzle", - "SeeMeCNC BOSSdelta 500 0505 0.4 nozzle", - "SeeMeCNC BOSSdelta 500 0510 0.4 nozzle", - "SeeMeCNC BOSSdelta 500 0521 0.4 nozzle", - "SeeMeCNC BOSSdelta 300 0.4 nozzle", - "SeeMeCNC RostockMAX v3.2 0.4 nozzle", - "SeeMeCNC RostockMAX v4 0.4 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.16mm Fine @SeeMeCNC Artemis 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 300 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.16mm Fine @SeeMeCNC RostockMAX v3.2 0.4", - "0.16mm Fine @SeeMeCNC RostockMAX v4 0.4", - "0.20mm Standard @SeeMeCNC Artemis 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 300 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.20mm Standard @SeeMeCNC RostockMAX v3.2 0.4", - "0.20mm Standard @SeeMeCNC RostockMAX v4 0.4", - "0.24mm Draft @SeeMeCNC Artemis 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 300 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.24mm Draft @SeeMeCNC RostockMAX v3.2 0.4", - "0.24mm Draft @SeeMeCNC RostockMAX v4 0.4", - "0.28mm Extra Draft @SeeMeCNC Artemis 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 300 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.28mm Extra Draft @SeeMeCNC RostockMAX v3.2 0.4", - "0.28mm Extra Draft @SeeMeCNC RostockMAX v4 0.4" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "5" - ], - "filament_z_hop": [ - "0.2" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_deretraction_speed": [ - "30" - ], - "setting_id": "kqCiusj7FAzbmnro", - "filament_id": "SMCFG00104" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_0_5mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_0_5mm.json deleted file mode 100644 index a0dab684b8..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_0_5mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC PETG 0.5 nozzle", - "inherits": "SeeMeCNC PETG", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC PETG 0.5 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 0.5 nozzle", - "SeeMeCNC BOSSdelta 500 0505 0.5 nozzle", - "SeeMeCNC BOSSdelta 500 0510 0.5 nozzle", - "SeeMeCNC BOSSdelta 500 0521 0.5 nozzle", - "SeeMeCNC BOSSdelta 300 0.5 nozzle", - "SeeMeCNC RostockMAX v3.2 0.5 nozzle", - "SeeMeCNC RostockMAX v4 0.5 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.20mm Fine @SeeMeCNC Artemis 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 300 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.20mm Fine @SeeMeCNC RostockMAX v3.2 0.5", - "0.20mm Fine @SeeMeCNC RostockMAX v4 0.5", - "0.25mm Standard @SeeMeCNC Artemis 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 300 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.25mm Standard @SeeMeCNC RostockMAX v3.2 0.5", - "0.25mm Standard @SeeMeCNC RostockMAX v4 0.5", - "0.30mm Draft @SeeMeCNC Artemis 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 300 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.30mm Draft @SeeMeCNC RostockMAX v3.2 0.5", - "0.30mm Draft @SeeMeCNC RostockMAX v4 0.5", - "0.35mm Extra Draft @SeeMeCNC Artemis 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 300 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.35mm Extra Draft @SeeMeCNC RostockMAX v3.2 0.5", - "0.35mm Extra Draft @SeeMeCNC RostockMAX v4 0.5" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "6" - ], - "filament_z_hop": [ - "0.3" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_deretraction_speed": [ - "30" - ], - "setting_id": "85J1rc8KxOc7v2cF", - "filament_id": "SMCFG00105" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_0_7mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_0_7mm.json deleted file mode 100644 index 3285e22d73..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_0_7mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC PETG 0.7 nozzle", - "inherits": "SeeMeCNC PETG", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC PETG 0.7 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0505 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0510 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0521 0.7 nozzle", - "SeeMeCNC BOSSdelta 300 0.7 nozzle", - "SeeMeCNC RostockMAX v3.2 0.7 nozzle", - "SeeMeCNC RostockMAX v4 0.7 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.28mm Fine @SeeMeCNC Artemis 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 300 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.28mm Fine @SeeMeCNC RostockMAX v3.2 0.7", - "0.28mm Fine @SeeMeCNC RostockMAX v4 0.7", - "0.35mm Standard @SeeMeCNC Artemis 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 300 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.35mm Standard @SeeMeCNC RostockMAX v3.2 0.7", - "0.35mm Standard @SeeMeCNC RostockMAX v4 0.7", - "0.42mm Draft @SeeMeCNC Artemis 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 300 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.42mm Draft @SeeMeCNC RostockMAX v3.2 0.7", - "0.42mm Draft @SeeMeCNC RostockMAX v4 0.7", - "0.49mm Extra Draft @SeeMeCNC Artemis 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 300 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.49mm Extra Draft @SeeMeCNC RostockMAX v3.2 0.7", - "0.49mm Extra Draft @SeeMeCNC RostockMAX v4 0.7" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "6" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_deretraction_speed": [ - "30" - ], - "setting_id": "QI1p2Hi76cWlfRwC", - "filament_id": "SMCFG00107" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_1_0mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_1_0mm.json deleted file mode 100644 index ac5455210d..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_1_0mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC PETG 1.0 nozzle", - "inherits": "SeeMeCNC PETG", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC PETG 1.0 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 1.0 nozzle", - "SeeMeCNC BOSSdelta 500 0505 1.0 nozzle", - "SeeMeCNC BOSSdelta 500 0510 1.0 nozzle", - "SeeMeCNC BOSSdelta 500 0521 1.0 nozzle", - "SeeMeCNC BOSSdelta 300 1.0 nozzle", - "SeeMeCNC RostockMAX v3.2 1.0 nozzle", - "SeeMeCNC RostockMAX v4 1.0 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.40mm Fine @SeeMeCNC Artemis 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 300 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.40mm Fine @SeeMeCNC RostockMAX v3.2 1.0", - "0.40mm Fine @SeeMeCNC RostockMAX v4 1.0", - "0.50mm Standard @SeeMeCNC Artemis 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 300 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.50mm Standard @SeeMeCNC RostockMAX v3.2 1.0", - "0.50mm Standard @SeeMeCNC RostockMAX v4 1.0", - "0.60mm Draft @SeeMeCNC Artemis 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 300 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.60mm Draft @SeeMeCNC RostockMAX v3.2 1.0", - "0.60mm Draft @SeeMeCNC RostockMAX v4 1.0", - "0.70mm Extra Draft @SeeMeCNC Artemis 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 300 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.70mm Extra Draft @SeeMeCNC RostockMAX v3.2 1.0", - "0.70mm Extra Draft @SeeMeCNC RostockMAX v4 1.0" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "7" - ], - "filament_z_hop": [ - "0.5" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_deretraction_speed": [ - "30" - ], - "setting_id": "Njx1ZHccqqJzQ7AQ", - "filament_id": "SMCFG00110" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_CF_0_4mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_CF_0_4mm.json deleted file mode 100644 index 01ef0f3562..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_CF_0_4mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC PETG-CF 0.4 nozzle", - "inherits": "SeeMeCNC PETG-CF", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC PETG-CF 0.4 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 0.4 nozzle", - "SeeMeCNC BOSSdelta 500 0505 0.4 nozzle", - "SeeMeCNC BOSSdelta 500 0510 0.4 nozzle", - "SeeMeCNC BOSSdelta 500 0521 0.4 nozzle", - "SeeMeCNC BOSSdelta 300 0.4 nozzle", - "SeeMeCNC RostockMAX v3.2 0.4 nozzle", - "SeeMeCNC RostockMAX v4 0.4 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.16mm Fine @SeeMeCNC Artemis 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 300 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.16mm Fine @SeeMeCNC RostockMAX v3.2 0.4", - "0.16mm Fine @SeeMeCNC RostockMAX v4 0.4", - "0.20mm Standard @SeeMeCNC Artemis 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 300 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.20mm Standard @SeeMeCNC RostockMAX v3.2 0.4", - "0.20mm Standard @SeeMeCNC RostockMAX v4 0.4", - "0.24mm Draft @SeeMeCNC Artemis 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 300 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.24mm Draft @SeeMeCNC RostockMAX v3.2 0.4", - "0.24mm Draft @SeeMeCNC RostockMAX v4 0.4", - "0.28mm Extra Draft @SeeMeCNC Artemis 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 300 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.28mm Extra Draft @SeeMeCNC RostockMAX v3.2 0.4", - "0.28mm Extra Draft @SeeMeCNC RostockMAX v4 0.4" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "5" - ], - "filament_z_hop": [ - "0.2" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_deretraction_speed": [ - "30" - ], - "setting_id": "ulVlpkQVbvkSpmli", - "filament_id": "SMCFG00204" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_CF_0_5mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_CF_0_5mm.json deleted file mode 100644 index 0b3d526c6b..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_CF_0_5mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC PETG-CF 0.5 nozzle", - "inherits": "SeeMeCNC PETG-CF", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC PETG-CF 0.5 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 0.5 nozzle", - "SeeMeCNC BOSSdelta 500 0505 0.5 nozzle", - "SeeMeCNC BOSSdelta 500 0510 0.5 nozzle", - "SeeMeCNC BOSSdelta 500 0521 0.5 nozzle", - "SeeMeCNC BOSSdelta 300 0.5 nozzle", - "SeeMeCNC RostockMAX v3.2 0.5 nozzle", - "SeeMeCNC RostockMAX v4 0.5 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.20mm Fine @SeeMeCNC Artemis 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 300 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.20mm Fine @SeeMeCNC RostockMAX v3.2 0.5", - "0.20mm Fine @SeeMeCNC RostockMAX v4 0.5", - "0.25mm Standard @SeeMeCNC Artemis 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 300 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.25mm Standard @SeeMeCNC RostockMAX v3.2 0.5", - "0.25mm Standard @SeeMeCNC RostockMAX v4 0.5", - "0.30mm Draft @SeeMeCNC Artemis 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 300 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.30mm Draft @SeeMeCNC RostockMAX v3.2 0.5", - "0.30mm Draft @SeeMeCNC RostockMAX v4 0.5", - "0.35mm Extra Draft @SeeMeCNC Artemis 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 300 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.35mm Extra Draft @SeeMeCNC RostockMAX v3.2 0.5", - "0.35mm Extra Draft @SeeMeCNC RostockMAX v4 0.5" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "5" - ], - "filament_z_hop": [ - "0.3" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_deretraction_speed": [ - "30" - ], - "setting_id": "jK9Gr2VDAnOKrkPW", - "filament_id": "SMCFG00205" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_CF_0_7mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_CF_0_7mm.json deleted file mode 100644 index e2172b6707..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_CF_0_7mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC PETG-CF 0.7 nozzle", - "inherits": "SeeMeCNC PETG-CF", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC PETG-CF 0.7 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0505 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0510 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0521 0.7 nozzle", - "SeeMeCNC BOSSdelta 300 0.7 nozzle", - "SeeMeCNC RostockMAX v3.2 0.7 nozzle", - "SeeMeCNC RostockMAX v4 0.7 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.28mm Fine @SeeMeCNC Artemis 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 300 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.28mm Fine @SeeMeCNC RostockMAX v3.2 0.7", - "0.28mm Fine @SeeMeCNC RostockMAX v4 0.7", - "0.35mm Standard @SeeMeCNC Artemis 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 300 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.35mm Standard @SeeMeCNC RostockMAX v3.2 0.7", - "0.35mm Standard @SeeMeCNC RostockMAX v4 0.7", - "0.42mm Draft @SeeMeCNC Artemis 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 300 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.42mm Draft @SeeMeCNC RostockMAX v3.2 0.7", - "0.42mm Draft @SeeMeCNC RostockMAX v4 0.7", - "0.49mm Extra Draft @SeeMeCNC Artemis 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 300 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.49mm Extra Draft @SeeMeCNC RostockMAX v3.2 0.7", - "0.49mm Extra Draft @SeeMeCNC RostockMAX v4 0.7" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "6" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_deretraction_speed": [ - "30" - ], - "setting_id": "Gn57oqh6nMBO651i", - "filament_id": "SMCFG00207" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_CF_1_0mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_CF_1_0mm.json deleted file mode 100644 index 1fabd765d4..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_CF_1_0mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC PETG-CF 1.0 nozzle", - "inherits": "SeeMeCNC PETG-CF", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC PETG-CF 1.0 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 1.0 nozzle", - "SeeMeCNC BOSSdelta 500 0505 1.0 nozzle", - "SeeMeCNC BOSSdelta 500 0510 1.0 nozzle", - "SeeMeCNC BOSSdelta 500 0521 1.0 nozzle", - "SeeMeCNC BOSSdelta 300 1.0 nozzle", - "SeeMeCNC RostockMAX v3.2 1.0 nozzle", - "SeeMeCNC RostockMAX v4 1.0 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.40mm Fine @SeeMeCNC Artemis 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 300 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.40mm Fine @SeeMeCNC RostockMAX v3.2 1.0", - "0.40mm Fine @SeeMeCNC RostockMAX v4 1.0", - "0.50mm Standard @SeeMeCNC Artemis 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 300 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.50mm Standard @SeeMeCNC RostockMAX v3.2 1.0", - "0.50mm Standard @SeeMeCNC RostockMAX v4 1.0", - "0.60mm Draft @SeeMeCNC Artemis 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 300 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.60mm Draft @SeeMeCNC RostockMAX v3.2 1.0", - "0.60mm Draft @SeeMeCNC RostockMAX v4 1.0", - "0.70mm Extra Draft @SeeMeCNC Artemis 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 300 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.70mm Extra Draft @SeeMeCNC RostockMAX v3.2 1.0", - "0.70mm Extra Draft @SeeMeCNC RostockMAX v4 1.0" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "6" - ], - "filament_z_hop": [ - "0.5" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_deretraction_speed": [ - "30" - ], - "setting_id": "nzRT23S6xk1bxbDJ", - "filament_id": "SMCFG00210" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA_0_4mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA_0_4mm.json deleted file mode 100644 index 9d216c2e7c..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA_0_4mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC PLA 0.4 nozzle", - "inherits": "SeeMeCNC PLA", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC PLA 0.4 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 0.4 nozzle", - "SeeMeCNC BOSSdelta 500 0505 0.4 nozzle", - "SeeMeCNC BOSSdelta 500 0510 0.4 nozzle", - "SeeMeCNC BOSSdelta 500 0521 0.4 nozzle", - "SeeMeCNC BOSSdelta 300 0.4 nozzle", - "SeeMeCNC RostockMAX v3.2 0.4 nozzle", - "SeeMeCNC RostockMAX v4 0.4 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.16mm Fine @SeeMeCNC Artemis 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 300 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.16mm Fine @SeeMeCNC RostockMAX v3.2 0.4", - "0.16mm Fine @SeeMeCNC RostockMAX v4 0.4", - "0.20mm Standard @SeeMeCNC Artemis 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 300 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.20mm Standard @SeeMeCNC RostockMAX v3.2 0.4", - "0.20mm Standard @SeeMeCNC RostockMAX v4 0.4", - "0.24mm Draft @SeeMeCNC Artemis 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 300 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.24mm Draft @SeeMeCNC RostockMAX v3.2 0.4", - "0.24mm Draft @SeeMeCNC RostockMAX v4 0.4", - "0.28mm Extra Draft @SeeMeCNC Artemis 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 300 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.28mm Extra Draft @SeeMeCNC RostockMAX v3.2 0.4", - "0.28mm Extra Draft @SeeMeCNC RostockMAX v4 0.4" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "5" - ], - "filament_z_hop": [ - "0.2" - ], - "filament_retraction_speed": [ - "45" - ], - "filament_deretraction_speed": [ - "35" - ], - "setting_id": "k3oaCcJHHyAuRi6J", - "filament_id": "SMCFL00104" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA_0_5mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA_0_5mm.json deleted file mode 100644 index 1f8a314c20..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA_0_5mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC PLA 0.5 nozzle", - "inherits": "SeeMeCNC PLA", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC PLA 0.5 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 0.5 nozzle", - "SeeMeCNC BOSSdelta 500 0505 0.5 nozzle", - "SeeMeCNC BOSSdelta 500 0510 0.5 nozzle", - "SeeMeCNC BOSSdelta 500 0521 0.5 nozzle", - "SeeMeCNC BOSSdelta 300 0.5 nozzle", - "SeeMeCNC RostockMAX v3.2 0.5 nozzle", - "SeeMeCNC RostockMAX v4 0.5 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.20mm Fine @SeeMeCNC Artemis 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 300 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.20mm Fine @SeeMeCNC RostockMAX v3.2 0.5", - "0.20mm Fine @SeeMeCNC RostockMAX v4 0.5", - "0.25mm Standard @SeeMeCNC Artemis 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 300 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.25mm Standard @SeeMeCNC RostockMAX v3.2 0.5", - "0.25mm Standard @SeeMeCNC RostockMAX v4 0.5", - "0.30mm Draft @SeeMeCNC Artemis 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 300 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.30mm Draft @SeeMeCNC RostockMAX v3.2 0.5", - "0.30mm Draft @SeeMeCNC RostockMAX v4 0.5", - "0.35mm Extra Draft @SeeMeCNC Artemis 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 300 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.35mm Extra Draft @SeeMeCNC RostockMAX v3.2 0.5", - "0.35mm Extra Draft @SeeMeCNC RostockMAX v4 0.5" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "5" - ], - "filament_z_hop": [ - "0.3" - ], - "filament_retraction_speed": [ - "45" - ], - "filament_deretraction_speed": [ - "35" - ], - "setting_id": "CcINW4WttiNsKvjf", - "filament_id": "SMCFL00105" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA_0_7mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA_0_7mm.json deleted file mode 100644 index ea51621992..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA_0_7mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC PLA 0.7 nozzle", - "inherits": "SeeMeCNC PLA", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC PLA 0.7 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0505 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0510 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0521 0.7 nozzle", - "SeeMeCNC BOSSdelta 300 0.7 nozzle", - "SeeMeCNC RostockMAX v3.2 0.7 nozzle", - "SeeMeCNC RostockMAX v4 0.7 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.28mm Fine @SeeMeCNC Artemis 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 300 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.28mm Fine @SeeMeCNC RostockMAX v3.2 0.7", - "0.28mm Fine @SeeMeCNC RostockMAX v4 0.7", - "0.35mm Standard @SeeMeCNC Artemis 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 300 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.35mm Standard @SeeMeCNC RostockMAX v3.2 0.7", - "0.35mm Standard @SeeMeCNC RostockMAX v4 0.7", - "0.42mm Draft @SeeMeCNC Artemis 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 300 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.42mm Draft @SeeMeCNC RostockMAX v3.2 0.7", - "0.42mm Draft @SeeMeCNC RostockMAX v4 0.7", - "0.49mm Extra Draft @SeeMeCNC Artemis 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 300 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.49mm Extra Draft @SeeMeCNC RostockMAX v3.2 0.7", - "0.49mm Extra Draft @SeeMeCNC RostockMAX v4 0.7" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "6" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_retraction_speed": [ - "45" - ], - "filament_deretraction_speed": [ - "35" - ], - "setting_id": "pOuc1eXMLLOBqHuz", - "filament_id": "SMCFL00107" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA_1_0mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA_1_0mm.json deleted file mode 100644 index b720b87de2..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA_1_0mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC PLA 1.0 nozzle", - "inherits": "SeeMeCNC PLA", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC PLA 1.0 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 1.0 nozzle", - "SeeMeCNC BOSSdelta 500 0505 1.0 nozzle", - "SeeMeCNC BOSSdelta 500 0510 1.0 nozzle", - "SeeMeCNC BOSSdelta 500 0521 1.0 nozzle", - "SeeMeCNC BOSSdelta 300 1.0 nozzle", - "SeeMeCNC RostockMAX v3.2 1.0 nozzle", - "SeeMeCNC RostockMAX v4 1.0 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.40mm Fine @SeeMeCNC Artemis 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 300 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.40mm Fine @SeeMeCNC RostockMAX v3.2 1.0", - "0.40mm Fine @SeeMeCNC RostockMAX v4 1.0", - "0.50mm Standard @SeeMeCNC Artemis 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 300 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.50mm Standard @SeeMeCNC RostockMAX v3.2 1.0", - "0.50mm Standard @SeeMeCNC RostockMAX v4 1.0", - "0.60mm Draft @SeeMeCNC Artemis 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 300 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.60mm Draft @SeeMeCNC RostockMAX v3.2 1.0", - "0.60mm Draft @SeeMeCNC RostockMAX v4 1.0", - "0.70mm Extra Draft @SeeMeCNC Artemis 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 300 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.70mm Extra Draft @SeeMeCNC RostockMAX v3.2 1.0", - "0.70mm Extra Draft @SeeMeCNC RostockMAX v4 1.0" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "6" - ], - "filament_z_hop": [ - "0.5" - ], - "filament_retraction_speed": [ - "45" - ], - "filament_deretraction_speed": [ - "35" - ], - "setting_id": "jSvqBk6R6HAaTRxk", - "filament_id": "SMCFL00110" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_TPU_0_7mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_TPU_0_7mm.json deleted file mode 100644 index dea7bb7820..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_TPU_0_7mm.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC TPU 0.7 nozzle", - "inherits": "SeeMeCNC TPU", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC TPU 0.7 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0505 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0510 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0521 0.7 nozzle", - "SeeMeCNC BOSSdelta 300 0.7 nozzle", - "SeeMeCNC RostockMAX v3.2 0.7 nozzle", - "SeeMeCNC RostockMAX v4 0.7 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.30mm TPU Solid @SeeMeCNC Artemis 0.7", - "0.30mm TPU Solid @SeeMeCNC BOSSdelta 300 0.7", - "0.30mm TPU Solid @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.30mm TPU Solid @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.30mm TPU Solid @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.30mm TPU Solid @SeeMeCNC RostockMAX v3.2 0.7", - "0.30mm TPU Solid @SeeMeCNC RostockMAX v4 0.7", - "0.35mm TPU Vase @SeeMeCNC Artemis 0.7", - "0.35mm TPU Vase @SeeMeCNC BOSSdelta 300 0.7", - "0.35mm TPU Vase @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.35mm TPU Vase @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.35mm TPU Vase @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.35mm TPU Vase @SeeMeCNC RostockMAX v3.2 0.7", - "0.35mm TPU Vase @SeeMeCNC RostockMAX v4 0.7" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "7" - ], - "filament_z_hop": [ - "0.3" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_deretraction_speed": [ - "30" - ], - "setting_id": "4LUkyKiKFb96OeC0", - "filament_id": "SMCFU00107" -} diff --git a/resources/profiles/Snapmaker.json b/resources/profiles/Snapmaker.json index 393271d0e5..d2309f6974 100644 --- a/resources/profiles/Snapmaker.json +++ b/resources/profiles/Snapmaker.json @@ -194,18 +194,42 @@ "name": "fdm_process_idex", "sub_path": "process/fdm_process_idex.json" }, + { + "name": "fdm_process_U1_0.06_nozzle_0.2", + "sub_path": "process/fdm_process_U1_0.06_nozzle_0.2.json" + }, { "name": "fdm_process_U1_0.08", "sub_path": "process/fdm_process_U1_0.08.json" }, + { + "name": "fdm_process_U1_0.08_nozzle_0.2", + "sub_path": "process/fdm_process_U1_0.08_nozzle_0.2.json" + }, + { + "name": "fdm_process_U1_0.10_nozzle_0.2", + "sub_path": "process/fdm_process_U1_0.10_nozzle_0.2.json" + }, { "name": "fdm_process_U1_0.12", "sub_path": "process/fdm_process_U1_0.12.json" }, + { + "name": "fdm_process_U1_0.12_nozzle_0.2", + "sub_path": "process/fdm_process_U1_0.12_nozzle_0.2.json" + }, + { + "name": "fdm_process_U1_0.14_nozzle_0.2", + "sub_path": "process/fdm_process_U1_0.14_nozzle_0.2.json" + }, { "name": "fdm_process_U1_0.16", "sub_path": "process/fdm_process_U1_0.16.json" }, + { + "name": "fdm_process_U1_0.18_nozzle_0.6", + "sub_path": "process/fdm_process_U1_0.18_nozzle_0.6.json" + }, { "name": "fdm_process_U1_0.20", "sub_path": "process/fdm_process_U1_0.20.json" @@ -214,14 +238,58 @@ "name": "fdm_process_U1_0.24", "sub_path": "process/fdm_process_U1_0.24.json" }, + { + "name": "fdm_process_U1_0.24_nozzle_0.6", + "sub_path": "process/fdm_process_U1_0.24_nozzle_0.6.json" + }, + { + "name": "fdm_process_U1_0.24_nozzle_0.8", + "sub_path": "process/fdm_process_U1_0.24_nozzle_0.8.json" + }, { "name": "fdm_process_U1_0.28", "sub_path": "process/fdm_process_U1_0.28.json" }, + { + "name": "fdm_process_U1_0.2_common", + "sub_path": "process/fdm_process_U1_0.2_common.json" + }, + { + "name": "fdm_process_U1_0.30_nozzle_0.6", + "sub_path": "process/fdm_process_U1_0.30_nozzle_0.6.json" + }, + { + "name": "fdm_process_U1_0.32_nozzle_0.8", + "sub_path": "process/fdm_process_U1_0.32_nozzle_0.8.json" + }, + { + "name": "fdm_process_U1_0.36_nozzle_0.6", + "sub_path": "process/fdm_process_U1_0.36_nozzle_0.6.json" + }, + { + "name": "fdm_process_U1_0.40_nozzle_0.8", + "sub_path": "process/fdm_process_U1_0.40_nozzle_0.8.json" + }, + { + "name": "fdm_process_U1_0.42_nozzle_0.6", + "sub_path": "process/fdm_process_U1_0.42_nozzle_0.6.json" + }, + { + "name": "fdm_process_U1_0.48_nozzle_0.8", + "sub_path": "process/fdm_process_U1_0.48_nozzle_0.8.json" + }, + { + "name": "fdm_process_U1_0.56_nozzle_0.8", + "sub_path": "process/fdm_process_U1_0.56_nozzle_0.8.json" + }, { "name": "fdm_process_U1_0.6_common", "sub_path": "process/fdm_process_U1_0.6_common.json" }, + { + "name": "fdm_process_U1_0.8_common", + "sub_path": "process/fdm_process_U1_0.8_common.json" + }, { "name": "0.08 Extra Fine @Snapmaker Artisan (0.4 nozzle)", "sub_path": "process/0.08 Extra Fine @Snapmaker Artisan (0.4 nozzle).json" @@ -402,6 +470,14 @@ "name": "0.48 Draft @Snapmaker J1 (0.8 nozzle)", "sub_path": "process/0.48 Draft @Snapmaker J1 (0.8 nozzle).json" }, + { + "name": "0.06 High Quality @Snapmaker U1 (0.2 nozzle)", + "sub_path": "process/0.06 High Quality @Snapmaker U1 (0.2 nozzle).json" + }, + { + "name": "0.06 Standard @Snapmaker U1 (0.2 nozzle)", + "sub_path": "process/0.06 Standard @Snapmaker U1 (0.2 nozzle).json" + }, { "name": "0.08 Extra Fine @Snapmaker U1 (0.4 nozzle)", "sub_path": "process/0.08 Extra Fine @Snapmaker U1 (0.4 nozzle).json" @@ -410,6 +486,22 @@ "name": "0.08 High Quality @Snapmaker U1 (0.4 nozzle)", "sub_path": "process/0.08 High Quality @Snapmaker U1 (0.4 nozzle).json" }, + { + "name": "0.08 High Quality @Snapmaker U1 (0.2 nozzle)", + "sub_path": "process/0.08 High Quality @Snapmaker U1 (0.2 nozzle).json" + }, + { + "name": "0.08 Standard @Snapmaker U1 (0.2 nozzle)", + "sub_path": "process/0.08 Standard @Snapmaker U1 (0.2 nozzle).json" + }, + { + "name": "0.10 High Quality @Snapmaker U1 (0.2 nozzle)", + "sub_path": "process/0.10 High Quality @Snapmaker U1 (0.2 nozzle).json" + }, + { + "name": "0.10 Standard @Snapmaker U1 (0.2 nozzle)", + "sub_path": "process/0.10 Standard @Snapmaker U1 (0.2 nozzle).json" + }, { "name": "0.12 Fine @Snapmaker U1 (0.4 nozzle)", "sub_path": "process/0.12 Fine @Snapmaker U1 (0.4 nozzle).json" @@ -418,6 +510,14 @@ "name": "0.12 High Quality @Snapmaker U1 (0.4 nozzle)", "sub_path": "process/0.12 High Quality @Snapmaker U1 (0.4 nozzle).json" }, + { + "name": "0.12 Standard @Snapmaker U1 (0.2 nozzle)", + "sub_path": "process/0.12 Standard @Snapmaker U1 (0.2 nozzle).json" + }, + { + "name": "0.14 Standard @Snapmaker U1 (0.2 nozzle)", + "sub_path": "process/0.14 Standard @Snapmaker U1 (0.2 nozzle).json" + }, { "name": "0.16 High Quality @Snapmaker U1 (0.4 nozzle)", "sub_path": "process/0.16 High Quality @Snapmaker U1 (0.4 nozzle).json" @@ -426,6 +526,10 @@ "name": "0.16 Optimal @Snapmaker U1 (0.4 nozzle)", "sub_path": "process/0.16 Optimal @Snapmaker U1 (0.4 nozzle).json" }, + { + "name": "0.18 Standard @Snapmaker U1 (0.6 nozzle)", + "sub_path": "process/0.18 Standard @Snapmaker U1 (0.6 nozzle).json" + }, { "name": "0.20 Quality @Snapmaker U1 (0.4 nozzle)", "sub_path": "process/0.20 Quality @Snapmaker U1 (0.4 nozzle).json" @@ -454,10 +558,50 @@ "name": "0.24 Draft @Snapmaker U1 (0.4 nozzle)", "sub_path": "process/0.24 Draft @Snapmaker U1 (0.4 nozzle).json" }, + { + "name": "0.24 Standard @Snapmaker U1 (0.6 nozzle)", + "sub_path": "process/0.24 Standard @Snapmaker U1 (0.6 nozzle).json" + }, + { + "name": "0.24 Standard @Snapmaker U1 (0.8 nozzle)", + "sub_path": "process/0.24 Standard @Snapmaker U1 (0.8 nozzle).json" + }, { "name": "0.28 Extra Draft @Snapmaker U1 (0.4 nozzle)", "sub_path": "process/0.28 Extra Draft @Snapmaker U1 (0.4 nozzle).json" }, + { + "name": "0.30 Standard @Snapmaker U1 (0.6 nozzle)", + "sub_path": "process/0.30 Standard @Snapmaker U1 (0.6 nozzle).json" + }, + { + "name": "0.30 Strength @Snapmaker U1 (0.6 nozzle)", + "sub_path": "process/0.30 Strength @Snapmaker U1 (0.6 nozzle).json" + }, + { + "name": "0.32 Standard @Snapmaker U1 (0.8 nozzle)", + "sub_path": "process/0.32 Standard @Snapmaker U1 (0.8 nozzle).json" + }, + { + "name": "0.36 Standard @Snapmaker U1 (0.6 nozzle)", + "sub_path": "process/0.36 Standard @Snapmaker U1 (0.6 nozzle).json" + }, + { + "name": "0.40 Standard @Snapmaker U1 (0.8 nozzle)", + "sub_path": "process/0.40 Standard @Snapmaker U1 (0.8 nozzle).json" + }, + { + "name": "0.42 Standard @Snapmaker U1 (0.6 nozzle)", + "sub_path": "process/0.42 Standard @Snapmaker U1 (0.6 nozzle).json" + }, + { + "name": "0.48 Standard @Snapmaker U1 (0.8 nozzle)", + "sub_path": "process/0.48 Standard @Snapmaker U1 (0.8 nozzle).json" + }, + { + "name": "0.56 Standard @Snapmaker U1 (0.8 nozzle)", + "sub_path": "process/0.56 Standard @Snapmaker U1 (0.8 nozzle).json" + }, { "name": "0.20 Standard @Snapmaker U1 (0.6 nozzle)", "sub_path": "process/0.20 Standard @Snapmaker U1 (0.6 nozzle).json" @@ -473,150 +617,6 @@ { "name": "0.06 Standard @Snapmaker Artisan (0.2 nozzle)", "sub_path": "process/0.06 Standard @Snapmaker Artisan (0.2 nozzle).json" - }, - { - "name": "fdm_process_U1_0.2_common", - "sub_path": "process/fdm_process_U1_0.2_common.json" - }, - { - "name": "fdm_process_U1_0.8_common", - "sub_path": "process/fdm_process_U1_0.8_common.json" - }, - { - "name": "fdm_process_U1_0.06_nozzle_0.2", - "sub_path": "process/fdm_process_U1_0.06_nozzle_0.2.json" - }, - { - "name": "fdm_process_U1_0.08_nozzle_0.2", - "sub_path": "process/fdm_process_U1_0.08_nozzle_0.2.json" - }, - { - "name": "fdm_process_U1_0.10_nozzle_0.2", - "sub_path": "process/fdm_process_U1_0.10_nozzle_0.2.json" - }, - { - "name": "fdm_process_U1_0.12_nozzle_0.2", - "sub_path": "process/fdm_process_U1_0.12_nozzle_0.2.json" - }, - { - "name": "fdm_process_U1_0.14_nozzle_0.2", - "sub_path": "process/fdm_process_U1_0.14_nozzle_0.2.json" - }, - { - "name": "fdm_process_U1_0.18_nozzle_0.6", - "sub_path": "process/fdm_process_U1_0.18_nozzle_0.6.json" - }, - { - "name": "fdm_process_U1_0.24_nozzle_0.6", - "sub_path": "process/fdm_process_U1_0.24_nozzle_0.6.json" - }, - { - "name": "fdm_process_U1_0.24_nozzle_0.8", - "sub_path": "process/fdm_process_U1_0.24_nozzle_0.8.json" - }, - { - "name": "fdm_process_U1_0.30_nozzle_0.6", - "sub_path": "process/fdm_process_U1_0.30_nozzle_0.6.json" - }, - { - "name": "fdm_process_U1_0.32_nozzle_0.8", - "sub_path": "process/fdm_process_U1_0.32_nozzle_0.8.json" - }, - { - "name": "fdm_process_U1_0.36_nozzle_0.6", - "sub_path": "process/fdm_process_U1_0.36_nozzle_0.6.json" - }, - { - "name": "fdm_process_U1_0.40_nozzle_0.8", - "sub_path": "process/fdm_process_U1_0.40_nozzle_0.8.json" - }, - { - "name": "fdm_process_U1_0.42_nozzle_0.6", - "sub_path": "process/fdm_process_U1_0.42_nozzle_0.6.json" - }, - { - "name": "fdm_process_U1_0.48_nozzle_0.8", - "sub_path": "process/fdm_process_U1_0.48_nozzle_0.8.json" - }, - { - "name": "fdm_process_U1_0.56_nozzle_0.8", - "sub_path": "process/fdm_process_U1_0.56_nozzle_0.8.json" - }, - { - "name": "0.06 High Quality @Snapmaker U1 (0.2 nozzle)", - "sub_path": "process/0.06 High Quality @Snapmaker U1 (0.2 nozzle).json" - }, - { - "name": "0.06 Standard @Snapmaker U1 (0.2 nozzle)", - "sub_path": "process/0.06 Standard @Snapmaker U1 (0.2 nozzle).json" - }, - { - "name": "0.08 High Quality @Snapmaker U1 (0.2 nozzle)", - "sub_path": "process/0.08 High Quality @Snapmaker U1 (0.2 nozzle).json" - }, - { - "name": "0.08 Standard @Snapmaker U1 (0.2 nozzle)", - "sub_path": "process/0.08 Standard @Snapmaker U1 (0.2 nozzle).json" - }, - { - "name": "0.10 High Quality @Snapmaker U1 (0.2 nozzle)", - "sub_path": "process/0.10 High Quality @Snapmaker U1 (0.2 nozzle).json" - }, - { - "name": "0.10 Standard @Snapmaker U1 (0.2 nozzle)", - "sub_path": "process/0.10 Standard @Snapmaker U1 (0.2 nozzle).json" - }, - { - "name": "0.12 Standard @Snapmaker U1 (0.2 nozzle)", - "sub_path": "process/0.12 Standard @Snapmaker U1 (0.2 nozzle).json" - }, - { - "name": "0.14 Standard @Snapmaker U1 (0.2 nozzle)", - "sub_path": "process/0.14 Standard @Snapmaker U1 (0.2 nozzle).json" - }, - { - "name": "0.18 Standard @Snapmaker U1 (0.6 nozzle)", - "sub_path": "process/0.18 Standard @Snapmaker U1 (0.6 nozzle).json" - }, - { - "name": "0.24 Standard @Snapmaker U1 (0.6 nozzle)", - "sub_path": "process/0.24 Standard @Snapmaker U1 (0.6 nozzle).json" - }, - { - "name": "0.30 Standard @Snapmaker U1 (0.6 nozzle)", - "sub_path": "process/0.30 Standard @Snapmaker U1 (0.6 nozzle).json" - }, - { - "name": "0.30 Strength @Snapmaker U1 (0.6 nozzle)", - "sub_path": "process/0.30 Strength @Snapmaker U1 (0.6 nozzle).json" - }, - { - "name": "0.36 Standard @Snapmaker U1 (0.6 nozzle)", - "sub_path": "process/0.36 Standard @Snapmaker U1 (0.6 nozzle).json" - }, - { - "name": "0.42 Standard @Snapmaker U1 (0.6 nozzle)", - "sub_path": "process/0.42 Standard @Snapmaker U1 (0.6 nozzle).json" - }, - { - "name": "0.24 Standard @Snapmaker U1 (0.8 nozzle)", - "sub_path": "process/0.24 Standard @Snapmaker U1 (0.8 nozzle).json" - }, - { - "name": "0.32 Standard @Snapmaker U1 (0.8 nozzle)", - "sub_path": "process/0.32 Standard @Snapmaker U1 (0.8 nozzle).json" - }, - { - "name": "0.40 Standard @Snapmaker U1 (0.8 nozzle)", - "sub_path": "process/0.40 Standard @Snapmaker U1 (0.8 nozzle).json" - }, - { - "name": "0.48 Standard @Snapmaker U1 (0.8 nozzle)", - "sub_path": "process/0.48 Standard @Snapmaker U1 (0.8 nozzle).json" - }, - { - "name": "0.56 Standard @Snapmaker U1 (0.8 nozzle)", - "sub_path": "process/0.56 Standard @Snapmaker U1 (0.8 nozzle).json" } ], "filament_list": [ @@ -624,14 +624,26 @@ "name": "PolyTerra PLA @0.2 nozzle", "sub_path": "filament/Polymaker/PolyTerra PLA @0.2 nozzle.json" }, + { + "name": "Snapmaker PLA Basic @U1 base", + "sub_path": "filament/Snapmaker PLA Basic @U1 base.json" + }, { "name": "Snapmaker PLA Lite @U1 base", "sub_path": "filament/Snapmaker PLA Lite @U1 base.json" }, + { + "name": "Snapmaker PLA Matte @U1 base2", + "sub_path": "filament/Snapmaker PLA Matte @U1 base2.json" + }, { "name": "Snapmaker PLA SnapSpeed @U1 base", "sub_path": "filament/Snapmaker PLA SnapSpeed @U1 base.json" }, + { + "name": "Snapmaker PLA SnapSpeed @U1 base2", + "sub_path": "filament/Snapmaker PLA SnapSpeed @U1 base2.json" + }, { "name": "Snapmaker TPU 95A @U1 base", "sub_path": "filament/Snapmaker TPU 95A @U1 base.json" @@ -648,14 +660,62 @@ "name": "PolyTerra J1 PLA @0.2 nozzle", "sub_path": "filament/Polymaker/PolyTerra J1 PLA @0.2 nozzle.json" }, + { + "name": "Snapmaker PLA Basic @U1", + "sub_path": "filament/Snapmaker PLA Basic @U1.json" + }, + { + "name": "Snapmaker PLA Full Spectrum @U1 0.4 nozzle", + "sub_path": "filament/Snapmaker PLA Full Spectrum @U1 0.4 nozzle.json" + }, + { + "name": "Snapmaker PLA Silk @U1", + "sub_path": "filament/Snapmaker PLA Silk @U1.json" + }, + { + "name": "Snapmaker PLA Silk @U1 0.2 nozzle", + "sub_path": "filament/Snapmaker PLA Silk @U1 0.2 nozzle.json" + }, + { + "name": "Snapmaker PLA Silk @U1 0.6 nozzle", + "sub_path": "filament/Snapmaker PLA Silk @U1 0.6 nozzle.json" + }, + { + "name": "Snapmaker PLA Silk @U1 0.8 nozzle", + "sub_path": "filament/Snapmaker PLA Silk @U1 0.8 nozzle.json" + }, { "name": "Snapmaker PLA Lite @U1", "sub_path": "filament/Snapmaker PLA Lite @U1.json" }, + { + "name": "Snapmaker PLA Matte @U1 0.2 nozzle", + "sub_path": "filament/Snapmaker PLA Matte @U1 0.2 nozzle.json" + }, + { + "name": "Snapmaker PLA Matte @U1 0.6 nozzle", + "sub_path": "filament/Snapmaker PLA Matte @U1 0.6 nozzle.json" + }, + { + "name": "Snapmaker PLA Matte @U1 0.8 nozzle", + "sub_path": "filament/Snapmaker PLA Matte @U1 0.8 nozzle.json" + }, { "name": "Snapmaker PLA SnapSpeed @U1", "sub_path": "filament/Snapmaker PLA SnapSpeed @U1.json" }, + { + "name": "Snapmaker PLA SnapSpeed @U1 0.2 nozzle", + "sub_path": "filament/Snapmaker PLA SnapSpeed @U1 0.2 nozzle.json" + }, + { + "name": "Snapmaker PLA SnapSpeed @U1 0.6 nozzle", + "sub_path": "filament/Snapmaker PLA SnapSpeed @U1 0.6 nozzle.json" + }, + { + "name": "Snapmaker PLA SnapSpeed @U1 0.8 nozzle", + "sub_path": "filament/Snapmaker PLA SnapSpeed @U1 0.8 nozzle.json" + }, { "name": "Snapmaker TPU 95A @U1", "sub_path": "filament/Snapmaker TPU 95A @U1.json" @@ -840,6 +900,14 @@ "name": "Snapmaker PETG @base", "sub_path": "filament/Snapmaker PETG @base.json" }, + { + "name": "Snapmaker PETG HF @U1 base2", + "sub_path": "filament/Snapmaker PETG HF @U1 base2.json" + }, + { + "name": "Snapmaker PETG Translucent @U1 base", + "sub_path": "filament/Snapmaker PETG Translucent @U1 base.json" + }, { "name": "Snapmaker PETG-CF @U1 base", "sub_path": "filament/Snapmaker PETG-CF @U1 base.json" @@ -988,6 +1056,10 @@ "name": "Polymaker PLA @Snapmaker U1 base", "sub_path": "filament/Polymaker/Polymaker PLA @Snapmaker U1 base.json" }, + { + "name": "Polymaker PLA @U1 base", + "sub_path": "filament/Polymaker PLA @U1 base.json" + }, { "name": "Polymaker PLA Pro @Base", "sub_path": "filament/Polymaker/Polymaker PLA Pro @Base.json" @@ -1048,6 +1120,10 @@ "name": "Snapmaker PLA @base", "sub_path": "filament/Snapmaker PLA @base.json" }, + { + "name": "Snapmaker PLA Glow @U1 base", + "sub_path": "filament/Snapmaker PLA Glow @U1 base.json" + }, { "name": "Snapmaker PLA Metal @U1 base", "sub_path": "filament/Snapmaker PLA Metal @U1 base.json" @@ -1060,6 +1136,34 @@ "name": "Snapmaker PLA Silk @base", "sub_path": "filament/Snapmaker PLA Silk @base.json" }, + { + "name": "Snapmaker PLA Translucent @U1 base", + "sub_path": "filament/Snapmaker PLA Translucent @U1 base.json" + }, + { + "name": "Snapmaker PLA Wood @U1 0.4 nozzle", + "sub_path": "filament/Snapmaker PLA Wood @U1 0.4 nozzle.json" + }, + { + "name": "Snapmaker PLA Wood @U1 0.6 nozzle", + "sub_path": "filament/Snapmaker PLA Wood @U1 0.6 nozzle.json" + }, + { + "name": "Snapmaker PLA Wood @U1 0.8 nozzle", + "sub_path": "filament/Snapmaker PLA Wood @U1 0.8 nozzle.json" + }, + { + "name": "Snapmaker PLA-CF @U1 0.4 nozzle", + "sub_path": "filament/Snapmaker PLA-CF @U1 0.4 nozzle.json" + }, + { + "name": "Snapmaker PLA-CF @U1 0.6 nozzle", + "sub_path": "filament/Snapmaker PLA-CF @U1 0.6 nozzle.json" + }, + { + "name": "Snapmaker PLA-CF @U1 0.8 nozzle", + "sub_path": "filament/Snapmaker PLA-CF @U1 0.8 nozzle.json" + }, { "name": "Snapmaker PLA-CF @U1 base", "sub_path": "filament/Snapmaker PLA-CF @U1 base.json" @@ -1096,6 +1200,30 @@ "name": "Snapmaker J1 TPU @base", "sub_path": "filament/Snapmaker J1 TPU @base.json" }, + { + "name": "Snapmaker TPU 90A @U1", + "sub_path": "filament/Snapmaker TPU 90A @U1.json" + }, + { + "name": "Snapmaker TPU 90A @U1 0.6 nozzle", + "sub_path": "filament/Snapmaker TPU 90A @U1 0.6 nozzle.json" + }, + { + "name": "Snapmaker TPU 90A @U1 0.8 nozzle", + "sub_path": "filament/Snapmaker TPU 90A @U1 0.8 nozzle.json" + }, + { + "name": "Snapmaker TPU 95A HF @U1", + "sub_path": "filament/Snapmaker TPU 95A HF @U1.json" + }, + { + "name": "Snapmaker TPU 95A HF @U1 0.6 nozzle", + "sub_path": "filament/Snapmaker TPU 95A HF @U1 0.6 nozzle.json" + }, + { + "name": "Snapmaker TPU 95A HF @U1 0.8 nozzle", + "sub_path": "filament/Snapmaker TPU 95A HF @U1 0.8 nozzle.json" + }, { "name": "Snapmaker TPU @U1 base", "sub_path": "filament/Snapmaker TPU @U1 base.json" @@ -1316,6 +1444,34 @@ "name": "Snapmaker PETG @0.2 nozzle", "sub_path": "filament/Snapmaker PETG @0.2 nozzle.json" }, + { + "name": "Snapmaker PETG HF @U1 0.2 nozzle", + "sub_path": "filament/Snapmaker PETG HF @U1 0.2 nozzle.json" + }, + { + "name": "Snapmaker PETG HF @U1 0.6 nozzle", + "sub_path": "filament/Snapmaker PETG HF @U1 0.6 nozzle.json" + }, + { + "name": "Snapmaker PETG HF @U1 0.8 nozzle", + "sub_path": "filament/Snapmaker PETG HF @U1 0.8 nozzle.json" + }, + { + "name": "Snapmaker PETG Translucent @U1 0.2 nozzle", + "sub_path": "filament/Snapmaker PETG Translucent @U1 0.2 nozzle.json" + }, + { + "name": "Snapmaker PETG Translucent @U1 0.4 nozzle", + "sub_path": "filament/Snapmaker PETG Translucent @U1 0.4 nozzle.json" + }, + { + "name": "Snapmaker PETG Translucent @U1 0.6 nozzle", + "sub_path": "filament/Snapmaker PETG Translucent @U1 0.6 nozzle.json" + }, + { + "name": "Snapmaker PETG Translucent @U1 0.8 nozzle", + "sub_path": "filament/Snapmaker PETG Translucent @U1 0.8 nozzle.json" + }, { "name": "Snapmaker PETG-CF @U1", "sub_path": "filament/Snapmaker PETG-CF @U1.json" @@ -1460,6 +1616,18 @@ "name": "Polymaker PLA @Snapmaker U1", "sub_path": "filament/Polymaker/Polymaker PLA @Snapmaker U1.json" }, + { + "name": "Polymaker General PLA Family @U1", + "sub_path": "filament/Polymaker General PLA Family @U1.json" + }, + { + "name": "Polymaker Silk PLA Family @U1", + "sub_path": "filament/Polymaker Silk PLA Family @U1.json" + }, + { + "name": "Polymaker Tough PLA Family @U1", + "sub_path": "filament/Polymaker Tough PLA Family @U1.json" + }, { "name": "Polymaker PLA Pro @Snapmaker U1", "sub_path": "filament/Polymaker/Polymaker PLA Pro @Snapmaker U1.json" @@ -1560,6 +1728,10 @@ "name": "Snapmaker PLA", "sub_path": "filament/Snapmaker PLA.json" }, + { + "name": "Snapmaker PLA Glow @U1 0.4 nozzle", + "sub_path": "filament/Snapmaker PLA Glow @U1 0.4 nozzle.json" + }, { "name": "Snapmaker PLA Metal @U1", "sub_path": "filament/Snapmaker PLA Metal @U1.json" @@ -1572,6 +1744,22 @@ "name": "Snapmaker PLA Silk @0.2 nozzle", "sub_path": "filament/Snapmaker PLA Silk @0.2 nozzle.json" }, + { + "name": "Snapmaker PLA Translucent @U1 0.2 nozzle", + "sub_path": "filament/Snapmaker PLA Translucent @U1 0.2 nozzle.json" + }, + { + "name": "Snapmaker PLA Translucent @U1 0.4 nozzle", + "sub_path": "filament/Snapmaker PLA Translucent @U1 0.4 nozzle.json" + }, + { + "name": "Snapmaker PLA Translucent @U1 0.6 nozzle", + "sub_path": "filament/Snapmaker PLA Translucent @U1 0.6 nozzle.json" + }, + { + "name": "Snapmaker PLA Translucent @U1 0.8 nozzle", + "sub_path": "filament/Snapmaker PLA Translucent @U1 0.8 nozzle.json" + }, { "name": "Snapmaker PLA-CF", "sub_path": "filament/Snapmaker PLA-CF.json" @@ -1612,6 +1800,14 @@ "name": "Snapmaker PVA @U1", "sub_path": "filament/Snapmaker PVA @U1.json" }, + { + "name": "Snapmaker PVA @U1 0.6 nozzle", + "sub_path": "filament/Snapmaker PVA @U1 0.6 nozzle.json" + }, + { + "name": "Snapmaker PVA @U1 0.8 nozzle", + "sub_path": "filament/Snapmaker PVA @U1 0.8 nozzle.json" + }, { "name": "Snapmaker PVA", "sub_path": "filament/Snapmaker PVA.json" @@ -1712,26 +1908,6 @@ "name": "Snapmaker Breakaway Support For PLA @U1", "sub_path": "filament/Snapmaker Breakaway Support For PLA @U1.json" }, - { - "name": "PolyTerra J1 PLA", - "sub_path": "filament/Polymaker/PolyTerra J1 PLA.json" - }, - { - "name": "Snapmaker PLA Matte @U1 base", - "sub_path": "filament/Snapmaker PLA Matte @U1 base.json" - }, - { - "name": "Polymaker PLA @U1 base", - "sub_path": "filament/Polymaker PLA @U1 base.json" - }, - { - "name": "Polymaker Silk PLA Family @U1", - "sub_path": "filament/Polymaker Silk PLA Family @U1.json" - }, - { - "name": "Polymaker Tough PLA Family @U1", - "sub_path": "filament/Polymaker Tough PLA Family @U1.json" - }, { "name": "Snapmaker Breakaway Support For PLA @U1 0.2 nozzle", "sub_path": "filament/Snapmaker Breakaway Support For PLA @U1 0.2 nozzle.json" @@ -1745,188 +1921,12 @@ "sub_path": "filament/Snapmaker Breakaway Support For PLA @U1 0.8 nozzle.json" }, { - "name": "Snapmaker PETG HF @U1 base2", - "sub_path": "filament/Snapmaker PETG HF @U1 base2.json" + "name": "PolyTerra J1 PLA", + "sub_path": "filament/Polymaker/PolyTerra J1 PLA.json" }, { - "name": "Snapmaker PETG Translucent @U1 base", - "sub_path": "filament/Snapmaker PETG Translucent @U1 base.json" - }, - { - "name": "Snapmaker PLA Basic @U1 base", - "sub_path": "filament/Snapmaker PLA Basic @U1 base.json" - }, - { - "name": "Snapmaker PLA Full Spectrum @U1 0.4 nozzle", - "sub_path": "filament/Snapmaker PLA Full Spectrum @U1 0.4 nozzle.json" - }, - { - "name": "Snapmaker PLA Glow @U1 base", - "sub_path": "filament/Snapmaker PLA Glow @U1 base.json" - }, - { - "name": "Snapmaker PLA Matte @U1 base2", - "sub_path": "filament/Snapmaker PLA Matte @U1 base2.json" - }, - { - "name": "Snapmaker PLA Silk @U1 0.2 nozzle", - "sub_path": "filament/Snapmaker PLA Silk @U1 0.2 nozzle.json" - }, - { - "name": "Snapmaker PLA Silk @U1 0.6 nozzle", - "sub_path": "filament/Snapmaker PLA Silk @U1 0.6 nozzle.json" - }, - { - "name": "Snapmaker PLA Silk @U1 0.8 nozzle", - "sub_path": "filament/Snapmaker PLA Silk @U1 0.8 nozzle.json" - }, - { - "name": "Snapmaker PLA SnapSpeed @U1 base2", - "sub_path": "filament/Snapmaker PLA SnapSpeed @U1 base2.json" - }, - { - "name": "Snapmaker PLA Translucent @U1 base", - "sub_path": "filament/Snapmaker PLA Translucent @U1 base.json" - }, - { - "name": "Snapmaker PLA Wood @U1 0.4 nozzle", - "sub_path": "filament/Snapmaker PLA Wood @U1 0.4 nozzle.json" - }, - { - "name": "Snapmaker PLA Wood @U1 0.6 nozzle", - "sub_path": "filament/Snapmaker PLA Wood @U1 0.6 nozzle.json" - }, - { - "name": "Snapmaker PLA Wood @U1 0.8 nozzle", - "sub_path": "filament/Snapmaker PLA Wood @U1 0.8 nozzle.json" - }, - { - "name": "Snapmaker PLA-CF @U1 0.4 nozzle", - "sub_path": "filament/Snapmaker PLA-CF @U1 0.4 nozzle.json" - }, - { - "name": "Snapmaker PLA-CF @U1 0.6 nozzle", - "sub_path": "filament/Snapmaker PLA-CF @U1 0.6 nozzle.json" - }, - { - "name": "Snapmaker PLA-CF @U1 0.8 nozzle", - "sub_path": "filament/Snapmaker PLA-CF @U1 0.8 nozzle.json" - }, - { - "name": "Snapmaker PVA @U1 0.6 nozzle", - "sub_path": "filament/Snapmaker PVA @U1 0.6 nozzle.json" - }, - { - "name": "Snapmaker PVA @U1 0.8 nozzle", - "sub_path": "filament/Snapmaker PVA @U1 0.8 nozzle.json" - }, - { - "name": "Snapmaker TPU 90A @U1", - "sub_path": "filament/Snapmaker TPU 90A @U1.json" - }, - { - "name": "Snapmaker TPU 90A @U1 0.6 nozzle", - "sub_path": "filament/Snapmaker TPU 90A @U1 0.6 nozzle.json" - }, - { - "name": "Snapmaker TPU 90A @U1 0.8 nozzle", - "sub_path": "filament/Snapmaker TPU 90A @U1 0.8 nozzle.json" - }, - { - "name": "Snapmaker TPU 95A HF @U1", - "sub_path": "filament/Snapmaker TPU 95A HF @U1.json" - }, - { - "name": "Snapmaker TPU 95A HF @U1 0.6 nozzle", - "sub_path": "filament/Snapmaker TPU 95A HF @U1 0.6 nozzle.json" - }, - { - "name": "Snapmaker TPU 95A HF @U1 0.8 nozzle", - "sub_path": "filament/Snapmaker TPU 95A HF @U1 0.8 nozzle.json" - }, - { - "name": "Snapmaker PLA Silk @U1", - "sub_path": "filament/Snapmaker PLA Silk @U1.json" - }, - { - "name": "Polymaker General PLA Family @U1", - "sub_path": "filament/Polymaker General PLA Family @U1.json" - }, - { - "name": "Snapmaker PETG HF @U1 0.2 nozzle", - "sub_path": "filament/Snapmaker PETG HF @U1 0.2 nozzle.json" - }, - { - "name": "Snapmaker PETG HF @U1 0.6 nozzle", - "sub_path": "filament/Snapmaker PETG HF @U1 0.6 nozzle.json" - }, - { - "name": "Snapmaker PETG HF @U1 0.8 nozzle", - "sub_path": "filament/Snapmaker PETG HF @U1 0.8 nozzle.json" - }, - { - "name": "Snapmaker PETG Translucent @U1 0.2 nozzle", - "sub_path": "filament/Snapmaker PETG Translucent @U1 0.2 nozzle.json" - }, - { - "name": "Snapmaker PETG Translucent @U1 0.4 nozzle", - "sub_path": "filament/Snapmaker PETG Translucent @U1 0.4 nozzle.json" - }, - { - "name": "Snapmaker PETG Translucent @U1 0.6 nozzle", - "sub_path": "filament/Snapmaker PETG Translucent @U1 0.6 nozzle.json" - }, - { - "name": "Snapmaker PETG Translucent @U1 0.8 nozzle", - "sub_path": "filament/Snapmaker PETG Translucent @U1 0.8 nozzle.json" - }, - { - "name": "Snapmaker PLA Basic @U1", - "sub_path": "filament/Snapmaker PLA Basic @U1.json" - }, - { - "name": "Snapmaker PLA Glow @U1 0.4 nozzle", - "sub_path": "filament/Snapmaker PLA Glow @U1 0.4 nozzle.json" - }, - { - "name": "Snapmaker PLA Matte @U1 0.2 nozzle", - "sub_path": "filament/Snapmaker PLA Matte @U1 0.2 nozzle.json" - }, - { - "name": "Snapmaker PLA Matte @U1 0.6 nozzle", - "sub_path": "filament/Snapmaker PLA Matte @U1 0.6 nozzle.json" - }, - { - "name": "Snapmaker PLA Matte @U1 0.8 nozzle", - "sub_path": "filament/Snapmaker PLA Matte @U1 0.8 nozzle.json" - }, - { - "name": "Snapmaker PLA SnapSpeed @U1 0.2 nozzle", - "sub_path": "filament/Snapmaker PLA SnapSpeed @U1 0.2 nozzle.json" - }, - { - "name": "Snapmaker PLA SnapSpeed @U1 0.6 nozzle", - "sub_path": "filament/Snapmaker PLA SnapSpeed @U1 0.6 nozzle.json" - }, - { - "name": "Snapmaker PLA SnapSpeed @U1 0.8 nozzle", - "sub_path": "filament/Snapmaker PLA SnapSpeed @U1 0.8 nozzle.json" - }, - { - "name": "Snapmaker PLA Translucent @U1 0.2 nozzle", - "sub_path": "filament/Snapmaker PLA Translucent @U1 0.2 nozzle.json" - }, - { - "name": "Snapmaker PLA Translucent @U1 0.4 nozzle", - "sub_path": "filament/Snapmaker PLA Translucent @U1 0.4 nozzle.json" - }, - { - "name": "Snapmaker PLA Translucent @U1 0.6 nozzle", - "sub_path": "filament/Snapmaker PLA Translucent @U1 0.6 nozzle.json" - }, - { - "name": "Snapmaker PLA Translucent @U1 0.8 nozzle", - "sub_path": "filament/Snapmaker PLA Translucent @U1 0.8 nozzle.json" + "name": "Snapmaker PLA Matte @U1 base", + "sub_path": "filament/Snapmaker PLA Matte @U1 base.json" } ], "machine_list": [ @@ -2050,6 +2050,10 @@ "name": "fdm_a400", "sub_path": "machine/fdm_a400.json" }, + { + "name": "Snapmaker U1 (0.2 nozzle)", + "sub_path": "machine/Snapmaker U1 (0.2 nozzle).json" + }, { "name": "Snapmaker U1 (0.4 nozzle)", "sub_path": "machine/Snapmaker U1 (0.4 nozzle).json" @@ -2062,6 +2066,10 @@ "name": "Snapmaker U1 (0.6 nozzle)", "sub_path": "machine/Snapmaker U1 (0.6 nozzle).json" }, + { + "name": "Snapmaker U1 (0.8 nozzle)", + "sub_path": "machine/Snapmaker U1 (0.8 nozzle).json" + }, { "name": "Snapmaker A250 BKit (0.2 nozzle)", "sub_path": "machine/Snapmaker A250 BKit (0.2 nozzle).json" @@ -2325,14 +2333,6 @@ { "name": "Snapmaker A350 Dual QS+B Kit (0.8 nozzle)", "sub_path": "machine/Snapmaker A350 Dual QS+B Kit (0.8 nozzle).json" - }, - { - "name": "Snapmaker U1 (0.2 nozzle)", - "sub_path": "machine/Snapmaker U1 (0.2 nozzle).json" - }, - { - "name": "Snapmaker U1 (0.8 nozzle)", - "sub_path": "machine/Snapmaker U1 (0.8 nozzle).json" } ] } diff --git a/resources/profiles/Sovol.json b/resources/profiles/Sovol.json index a38645abc2..9562873886 100644 --- a/resources/profiles/Sovol.json +++ b/resources/profiles/Sovol.json @@ -201,82 +201,66 @@ } ], "filament_list": [ - { - "name": "Generic ABS @Sovol SV08 MAX", - "sub_path": "filament/Generic ABS @Sovol SV08 MAX.json" - }, - { - "name": "Generic PC @Sovol SV08 MAX", - "sub_path": "filament/Generic PC @Sovol SV08 MAX.json" - }, - { - "name": "Generic PETG @Sovol SV08 MAX", - "sub_path": "filament/Generic PETG @Sovol SV08 MAX.json" - }, - { - "name": "Generic PLA @Sovol SV08 MAX", - "sub_path": "filament/Generic PLA @Sovol SV08 MAX.json" - }, - { - "name": "Generic PLA Silk @Sovol SV08 MAX", - "sub_path": "filament/Generic PLA Silk @Sovol SV08 MAX.json" - }, - { - "name": "Generic TPU @Sovol SV08 MAX", - "sub_path": "filament/Generic TPU @Sovol SV08 MAX.json" - }, - { - "name": "Polymaker PETG @Sovol SV08 MAX", - "sub_path": "filament/Polymaker PETG @Sovol SV08 MAX.json" - }, - { - "name": "SUNLU PETG @Sovol SV08 MAX", - "sub_path": "filament/SUNLU PETG @Sovol SV08 MAX.json" - }, { "name": "Generic ABS @Sovol SV06 ACE", "sub_path": "filament/Generic ABS @Sovol SV06 ACE.json" }, - { - "name": "Generic PETG @Sovol SV06 ACE", - "sub_path": "filament/Generic PETG @Sovol SV06 ACE.json" - }, - { - "name": "Generic PLA @Sovol SV06 ACE", - "sub_path": "filament/Generic PLA @Sovol SV06 ACE.json" - }, - { - "name": "Generic TPU @Sovol SV06 ACE", - "sub_path": "filament/Generic TPU @Sovol SV06 ACE.json" - }, { "name": "Generic ABS @Sovol SV06 Plus ACE", "sub_path": "filament/Generic ABS @Sovol SV06 Plus ACE.json" }, + { + "name": "Generic ABS @Sovol SV08", + "sub_path": "filament/Generic ABS @Sovol SV08.json" + }, + { + "name": "Generic ABS @Sovol SV08 MAX", + "sub_path": "filament/Generic ABS @Sovol SV08 MAX.json" + }, + { + "name": "Generic ABS @Sovol Zero", + "sub_path": "filament/Generic ABS @Sovol Zero.json" + }, + { + "name": "Generic PC @Sovol SV08 MAX", + "sub_path": "filament/Generic PC @Sovol SV08 MAX.json" + }, + { + "name": "Generic PC @Sovol Zero", + "sub_path": "filament/Generic PC @Sovol Zero.json" + }, + { + "name": "Generic PETG @Sovol SV06 ACE", + "sub_path": "filament/Generic PETG @Sovol SV06 ACE.json" + }, { "name": "Generic PETG @Sovol SV06 Plus ACE", "sub_path": "filament/Generic PETG @Sovol SV06 Plus ACE.json" }, + { + "name": "Generic PETG @Sovol SV08", + "sub_path": "filament/Generic PETG @Sovol SV08.json" + }, + { + "name": "Generic PETG @Sovol SV08 MAX", + "sub_path": "filament/Generic PETG @Sovol SV08 MAX.json" + }, + { + "name": "Generic PETG @Sovol Zero", + "sub_path": "filament/Generic PETG @Sovol Zero.json" + }, + { + "name": "Generic PLA @Sovol SV06 ACE", + "sub_path": "filament/Generic PLA @Sovol SV06 ACE.json" + }, { "name": "Generic PLA @Sovol SV06 Plus ACE", "sub_path": "filament/Generic PLA @Sovol SV06 Plus ACE.json" }, - { - "name": "Generic TPU @Sovol SV06 Plus ACE", - "sub_path": "filament/Generic TPU @Sovol SV06 Plus ACE.json" - }, { "name": "Generic PLA @Sovol SV07", "sub_path": "filament/Generic PLA @Sovol SV07.json" }, - { - "name": "Generic ABS @Sovol SV08", - "sub_path": "filament/Generic ABS @Sovol SV08.json" - }, - { - "name": "Generic PETG @Sovol SV08", - "sub_path": "filament/Generic PETG @Sovol SV08.json" - }, { "name": "Generic PLA @Sovol SV08", "sub_path": "filament/Generic PLA @Sovol SV08.json" @@ -286,44 +270,60 @@ "sub_path": "filament/Generic PLA @Sovol SV08 0.2 nozzle.json" }, { - "name": "Generic TPU @Sovol SV08", - "sub_path": "filament/Generic TPU @Sovol SV08.json" - }, - { - "name": "Generic ABS @Sovol Zero", - "sub_path": "filament/Generic ABS @Sovol Zero.json" - }, - { - "name": "Generic PC @Sovol Zero", - "sub_path": "filament/Generic PC @Sovol Zero.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": "Generic PLA @Sovol SV08 MAX", + "sub_path": "filament/Generic PLA @Sovol SV08 MAX.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": "Generic PLA Silk @Sovol SV08 MAX", + "sub_path": "filament/Generic PLA Silk @Sovol SV08 MAX.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": "Generic TPU @Sovol SV06 ACE", + "sub_path": "filament/Generic TPU @Sovol SV06 ACE.json" + }, + { + "name": "Generic TPU @Sovol SV06 Plus ACE", + "sub_path": "filament/Generic TPU @Sovol SV06 Plus ACE.json" + }, + { + "name": "Generic TPU @Sovol SV08", + "sub_path": "filament/Generic TPU @Sovol SV08.json" + }, + { + "name": "Generic TPU @Sovol SV08 MAX", + "sub_path": "filament/Generic TPU @Sovol SV08 MAX.json" }, { "name": "Generic TPU @Sovol Zero", "sub_path": "filament/Generic TPU @Sovol Zero.json" + }, + { + "name": "Polymaker PETG @Sovol SV08 MAX", + "sub_path": "filament/Polymaker PETG @Sovol SV08 MAX.json" + }, + { + "name": "SUNLU PETG @Sovol SV08 MAX", + "sub_path": "filament/SUNLU PETG @Sovol SV08 MAX.json" + }, + { + "name": "Sovol Zero PETG HS Nozzle", + "sub_path": "filament/Sovol Zero PETG HS Nozzle.json" + }, + { + "name": "Sovol Zero PLA Basic HS Nozzle", + "sub_path": "filament/Sovol Zero PLA Basic HS Nozzle.json" + }, + { + "name": "Sovol Zero PLA Silk HS Nozzle", + "sub_path": "filament/Sovol Zero PLA Silk HS Nozzle.json" } ], "machine_list": [ diff --git a/resources/profiles/Tiertime.json b/resources/profiles/Tiertime.json index 8134d621df..0aab493c03 100644 --- a/resources/profiles/Tiertime.json +++ b/resources/profiles/Tiertime.json @@ -360,14 +360,6 @@ "name": "fdm_filament_tpu", "sub_path": "filament/fdm_filament_tpu.json" }, - { - "name": "Tiertime ABS", - "sub_path": "filament/Tiertime ABS.json" - }, - { - "name": "Tiertime ABS@300HS", - "sub_path": "filament/Tiertime ABS@300HS.json" - }, { "name": "Generic ABS @Tiertime", "sub_path": "filament/Generic ABS @Tiertime.json" @@ -377,12 +369,12 @@ "sub_path": "filament/Generic ABS @Tiertime 300HS.json" }, { - "name": "Tiertime ASA", - "sub_path": "filament/Tiertime ASA.json" + "name": "Tiertime ABS", + "sub_path": "filament/Tiertime ABS.json" }, { - "name": "Tiertime ASA@300HS", - "sub_path": "filament/Tiertime ASA@300HS.json" + "name": "Tiertime ABS@300HS", + "sub_path": "filament/Tiertime ABS@300HS.json" }, { "name": "Generic ASA @Tiertime", @@ -392,6 +384,14 @@ "name": "Generic ASA @Tiertime 300HS", "sub_path": "filament/Generic ASA @Tiertime 300HS.json" }, + { + "name": "Tiertime ASA", + "sub_path": "filament/Tiertime ASA.json" + }, + { + "name": "Tiertime ASA@300HS", + "sub_path": "filament/Tiertime ASA@300HS.json" + }, { "name": "Generic BVOH @Tiertime", "sub_path": "filament/Generic BVOH @Tiertime.json" @@ -420,6 +420,10 @@ "name": "Generic PA @Tiertime", "sub_path": "filament/Generic PA @Tiertime.json" }, + { + "name": "Generic PA @Tiertime 300HS", + "sub_path": "filament/Generic PA @Tiertime 300HS.json" + }, { "name": "Generic PA-CF @Tiertime", "sub_path": "filament/Generic PA-CF @Tiertime.json" @@ -428,10 +432,6 @@ "name": "Generic PA-CF @Tiertime 300HS", "sub_path": "filament/Generic PA-CF @Tiertime 300HS.json" }, - { - "name": "Generic PA @Tiertime 300HS", - "sub_path": "filament/Generic PA @Tiertime 300HS.json" - }, { "name": "Tiertime PA6-CF", "sub_path": "filament/Tiertime PA6-CF.json" @@ -468,6 +468,10 @@ "name": "Generic PE @Tiertime", "sub_path": "filament/Generic PE @Tiertime.json" }, + { + "name": "Generic PE @Tiertime 300HS", + "sub_path": "filament/Generic PE @Tiertime 300HS.json" + }, { "name": "Generic PE-CF @Tiertime", "sub_path": "filament/Generic PE-CF @Tiertime.json" @@ -476,14 +480,14 @@ "name": "Generic PE-CF @Tiertime 300HS", "sub_path": "filament/Generic PE-CF @Tiertime 300HS.json" }, - { - "name": "Generic PE @Tiertime 300HS", - "sub_path": "filament/Generic PE @Tiertime 300HS.json" - }, { "name": "Generic PETG @Tiertime", "sub_path": "filament/Generic PETG @Tiertime.json" }, + { + "name": "Generic PETG @Tiertime 300HS", + "sub_path": "filament/Generic PETG @Tiertime 300HS.json" + }, { "name": "Generic PETG-CF @Tiertime", "sub_path": "filament/Generic PETG-CF @Tiertime.json" @@ -492,10 +496,6 @@ "name": "Generic PETG-CF @Tiertime 300HS", "sub_path": "filament/Generic PETG-CF @Tiertime 300HS.json" }, - { - "name": "Generic PETG @Tiertime 300HS", - "sub_path": "filament/Generic PETG @Tiertime 300HS.json" - }, { "name": "Tiertime PET-CF", "sub_path": "filament/Tiertime PET-CF.json" @@ -524,6 +524,10 @@ "name": "Generic PLA @Tiertime", "sub_path": "filament/Generic PLA @Tiertime.json" }, + { + "name": "Generic PLA @Tiertime 300HS", + "sub_path": "filament/Generic PLA @Tiertime 300HS.json" + }, { "name": "Generic PLA High Speed @Tiertime", "sub_path": "filament/Generic PLA High Speed @Tiertime.json" @@ -548,10 +552,6 @@ "name": "Generic PLA-CF @Tiertime 300HS", "sub_path": "filament/Generic PLA-CF @Tiertime 300HS.json" }, - { - "name": "Generic PLA @Tiertime 300HS", - "sub_path": "filament/Generic PLA @Tiertime 300HS.json" - }, { "name": "Tiertime PLA", "sub_path": "filament/Tiertime PLA.json" @@ -572,6 +572,10 @@ "name": "Generic PP @Tiertime", "sub_path": "filament/Generic PP @Tiertime.json" }, + { + "name": "Generic PP @Tiertime 300HS", + "sub_path": "filament/Generic PP @Tiertime 300HS.json" + }, { "name": "Generic PP-CF @Tiertime", "sub_path": "filament/Generic PP-CF @Tiertime.json" @@ -588,10 +592,6 @@ "name": "Generic PP-GF @Tiertime 300HS", "sub_path": "filament/Generic PP-GF @Tiertime 300HS.json" }, - { - "name": "Generic PP @Tiertime 300HS", - "sub_path": "filament/Generic PP @Tiertime 300HS.json" - }, { "name": "Generic PPA-CF @Tiertime", "sub_path": "filament/Generic PPA-CF @Tiertime.json" @@ -612,6 +612,10 @@ "name": "Generic PPS @Tiertime", "sub_path": "filament/Generic PPS @Tiertime.json" }, + { + "name": "Generic PPS @Tiertime 300HS", + "sub_path": "filament/Generic PPS @Tiertime 300HS.json" + }, { "name": "Generic PPS-CF @Tiertime", "sub_path": "filament/Generic PPS-CF @Tiertime.json" @@ -620,10 +624,6 @@ "name": "Generic PPS-CF @Tiertime 300HS", "sub_path": "filament/Generic PPS-CF @Tiertime 300HS.json" }, - { - "name": "Generic PPS @Tiertime 300HS", - "sub_path": "filament/Generic PPS @Tiertime 300HS.json" - }, { "name": "Generic PVA @Tiertime", "sub_path": "filament/Generic PVA @Tiertime.json" diff --git a/resources/profiles/TwoTrees.json b/resources/profiles/TwoTrees.json index 3cd77c911b..7817792c99 100644 --- a/resources/profiles/TwoTrees.json +++ b/resources/profiles/TwoTrees.json @@ -80,13 +80,13 @@ } ], "filament_list": [ - { - "name": "Generic TPU 95A @TwoTrees SK1", - "sub_path": "filament/Generic TPU 95A @TwoTrees SK1.json" - }, { "name": "Generic HS PLA @TwoTrees SK1", "sub_path": "filament/Generic HS PLA @TwoTrees SK1.json" + }, + { + "name": "Generic TPU 95A @TwoTrees SK1", + "sub_path": "filament/Generic TPU 95A @TwoTrees SK1.json" } ], "machine_list": [ diff --git a/resources/profiles/blacklist.json b/resources/profiles/blacklist.json index 2c036613fc..6c16b5ae5d 100644 --- a/resources/profiles/blacklist.json +++ b/resources/profiles/blacklist.json @@ -4,9 +4,5 @@ ], "process": [ "GP008" - ], - "machine_model_list": [], - "process_list": [], - "filament_list": [], - "machine_list": [] + ] } diff --git a/resources/profiles/iQ.json b/resources/profiles/iQ.json index 050a0a2eb2..4b1f83b354 100644 --- a/resources/profiles/iQ.json +++ b/resources/profiles/iQ.json @@ -56,6 +56,14 @@ "name": "fdm_process_tiq_common", "sub_path": "process/fdm_process_tiq_common.json" }, + { + "name": "0.15mm Standard @iQ TiQ2 (0.25 Nozzle)", + "sub_path": "process/0.15mm Standard @iQ TiQ2 (0.25 Nozzle).json" + }, + { + "name": "0.15mm Standard @iQ TiQ8 (0.25 Nozzle)", + "sub_path": "process/0.15mm Standard @iQ TiQ8 (0.25 Nozzle).json" + }, { "name": "0.20mm Standard @iQ TiQ2 P1 - HPP4GF25 Grauts (0.4 Nozzle)", "sub_path": "process/0.20mm Standard @iQ TiQ2 P1 - HPP4GF25 Grauts (0.4 Nozzle).json" @@ -76,26 +84,18 @@ "name": "0.20mm Standard @iQ TiQ8 P1 - ABS Natur Material4Print (0.4 Nozzle)", "sub_path": "process/0.20mm Standard @iQ TiQ8 P1 - ABS Natur Material4Print (0.4 Nozzle).json" }, - { - "name": "0.15mm Standard @iQ TiQ2 (0.25 Nozzle)", - "sub_path": "process/0.15mm Standard @iQ TiQ2 (0.25 Nozzle).json" - }, { "name": "0.30mm Standard @iQ TiQ2 (0.6 Nozzle)", "sub_path": "process/0.30mm Standard @iQ TiQ2 (0.6 Nozzle).json" }, - { - "name": "0.40mm Standard @iQ TiQ2 (0.8 Nozzle)", - "sub_path": "process/0.40mm Standard @iQ TiQ2 (0.8 Nozzle).json" - }, - { - "name": "0.15mm Standard @iQ TiQ8 (0.25 Nozzle)", - "sub_path": "process/0.15mm Standard @iQ TiQ8 (0.25 Nozzle).json" - }, { "name": "0.30mm Standard @iQ TiQ8 (0.6 Nozzle)", "sub_path": "process/0.30mm Standard @iQ TiQ8 (0.6 Nozzle).json" }, + { + "name": "0.40mm Standard @iQ TiQ2 (0.8 Nozzle)", + "sub_path": "process/0.40mm Standard @iQ TiQ2 (0.8 Nozzle).json" + }, { "name": "0.40mm Standard @iQ TiQ8 (0.8 Nozzle)", "sub_path": "process/0.40mm Standard @iQ TiQ8 (0.8 Nozzle).json" diff --git a/resources/profiles/re3D.json b/resources/profiles/re3D.json index 7a66cb4ce1..52ad3a3fc5 100644 --- a/resources/profiles/re3D.json +++ b/resources/profiles/re3D.json @@ -1,199 +1,199 @@ { - "name": "re3D", - "url": "", - "version": "03.00.10", - "force_update": "0", - "description": "re3D configurations", - "machine_model_list": [ - { - "name": "re3D Gigabot 4", - "sub_path": "machine/re3D Gigabot 4.json" - }, - { - "name": "re3D Gigabot 4 XLT", - "sub_path": "machine/re3D Gigabot 4 XLT.json" - }, - { - "name": "re3D GigabotX 2", - "sub_path": "machine/re3D GigabotX 2.json" - }, - { - "name": "re3D GigabotX 2 XLT", - "sub_path": "machine/re3D GigabotX 2 XLT.json" - }, - { - "name": "re3D Terabot 4", - "sub_path": "machine/re3D Terabot 4.json" - }, - { - "name": "re3D TerabotX 2", - "sub_path": "machine/re3D TerabotX 2.json" - } - ], - "process_list": [ - { - "name": "fdm_process_common", - "sub_path": "process/fdm_process_common.json" - }, - { - "name": "fdm_process_re3D_common", - "sub_path": "process/fdm_process_re3D_common.json" - }, - { - "name": "fgf_process_re3D_common", - "sub_path": "process/fgf_process_re3D_common.json" - }, - { - "name": "0.2 Fine", - "sub_path": "process/0.2mm Fine @re3D fdm 0.4.json" - }, - { - "name": "0.26 Standard", - "sub_path": "process/0.26mm Standard @re3D fdm 0.4.json" - }, - { - "name": "0.32 Draft", - "sub_path": "process/0.32mm Draft @re3D fdm 0.4.json" - }, - { - "name": "0.3 Fine", - "sub_path": "process/0.3mm Fine @re3D fdm 0.8.json" - }, - { - "name": "0.4 Standard", - "sub_path": "process/0.4mm Draft @re3D fdm 0.8.json" - }, - { - "name": "1.0 Standard", - "sub_path": "process/1.0mm Standard @re3D fgf 1.75.json" - }, - { - "name": "0.6 Standard", - "sub_path": "process/0.6mm Standard @re3D fgf 0.8.json" - } - ], - "filament_list": [ - { - "name": "fdm_filament_common", - "sub_path": "filament/fdm_filament_common.json" - }, - { - "name": "fdm_filament_pla", - "sub_path": "filament/fdm_filament_pla.json" - }, - { - "name": "fdm_filament_pet", - "sub_path": "filament/fdm_filament_pet.json" - }, - { - "name": "fdm_filament_pp", - "sub_path": "filament/fdm_filament_pp.json" - }, - { - "name": "fdm_filament_pc", - "sub_path": "filament/fdm_filament_pc.json" - }, - { - "name": "re3D PLA @0.4 nozzle", - "sub_path": "filament/re3D PLA @0.4 nozzle.json" - }, - { - "name": "re3D PLA @0.8 nozzle", - "sub_path": "filament/re3D PLA @0.8 nozzle.json" - }, - { - "name": "re3D PETG @0.4 nozzle", - "sub_path": "filament/re3D PETG @0.4 nozzle.json" - }, - { - "name": "re3D PETG @0.8 nozzle", - "sub_path": "filament/re3D PETG @0.8 nozzle.json" - }, - { - "name": "re3D PC @0.4 nozzle", - "sub_path": "filament/re3D PC @0.4 nozzle.json" - }, - { - "name": "re3D PC @0.8 nozzle", - "sub_path": "filament/re3D PC @0.8 nozzle.json" - }, - { - "name": "re3D rPETG @0.8 nozzle", - "sub_path": "filament/re3D rPETG @0.8 nozzle.json" - }, - { - "name": "re3D rPETG @1.75 nozzle", - "sub_path": "filament/re3D rPETG @1.75 nozzle.json" - }, - { - "name": "re3D rPP @0.8 nozzle", - "sub_path": "filament/re3D rPP @0.8 nozzle.json" - }, - { - "name": "re3D rPP @1.75 nozzle", - "sub_path": "filament/re3D rPP @1.75 nozzle.json" - } - ], - "machine_list": [ - { - "name": "fdm_machine_common", - "sub_path": "machine/fdm_machine_common.json" - }, - { - "name": "fdm_re3D_common", - "sub_path": "machine/fdm_re3D_common.json" - }, - { - "name": "fgf_re3D_common", - "sub_path": "machine/fgf_re3D_common.json" - }, - { - "name": "re3D Gigabot 4 0.4 nozzle", - "sub_path": "machine/re3D Gigabot 4 0.4 nozzle.json" - }, - { - "name": "re3D Gigabot 4 0.8 nozzle", - "sub_path": "machine/re3D Gigabot 4 0.8 nozzle.json" - }, - { - "name": "re3D Gigabot 4 XLT 0.4 nozzle", - "sub_path": "machine/re3D Gigabot 4 XLT 0.4 nozzle.json" - }, - { - "name": "re3D Gigabot 4 XLT 0.8 nozzle", - "sub_path": "machine/re3D Gigabot 4 XLT 0.8 nozzle.json" - }, - { - "name": "re3D GigabotX 2 0.8 nozzle", - "sub_path": "machine/re3D GigabotX 2 0.8 nozzle.json" - }, - { - "name": "re3D GigabotX 2 1.75 nozzle", - "sub_path": "machine/re3D GigabotX 2 1.75 nozzle.json" - }, - { - "name": "re3D GigabotX 2 XLT 0.8 nozzle", - "sub_path": "machine/re3D GigabotX 2 XLT 0.8 nozzle.json" - }, - { - "name": "re3D GigabotX 2 XLT 1.75 nozzle", - "sub_path": "machine/re3D GigabotX 2 XLT 1.75 nozzle.json" - }, - { - "name": "re3D Terabot 4 0.4 nozzle", - "sub_path": "machine/re3D Terabot 4 0.4 nozzle.json" - }, - { - "name": "re3D Terabot 4 0.8 nozzle", - "sub_path": "machine/re3D Terabot 4 0.8 nozzle.json" - }, - { - "name": "re3D TerabotX 2 0.8 nozzle", - "sub_path": "machine/re3D TerabotX 2 0.8 nozzle.json" - }, - { - "name": "re3D TerabotX 2 1.75 nozzle", - "sub_path": "machine/re3D TerabotX 2 1.75 nozzle.json" - } - ] -} \ No newline at end of file + "name": "re3D", + "url": "", + "version": "03.00.10", + "force_update": "0", + "description": "re3D configurations", + "machine_model_list": [ + { + "name": "re3D Gigabot 4", + "sub_path": "machine/re3D Gigabot 4.json" + }, + { + "name": "re3D Gigabot 4 XLT", + "sub_path": "machine/re3D Gigabot 4 XLT.json" + }, + { + "name": "re3D GigabotX 2", + "sub_path": "machine/re3D GigabotX 2.json" + }, + { + "name": "re3D GigabotX 2 XLT", + "sub_path": "machine/re3D GigabotX 2 XLT.json" + }, + { + "name": "re3D Terabot 4", + "sub_path": "machine/re3D Terabot 4.json" + }, + { + "name": "re3D TerabotX 2", + "sub_path": "machine/re3D TerabotX 2.json" + } + ], + "process_list": [ + { + "name": "fdm_process_common", + "sub_path": "process/fdm_process_common.json" + }, + { + "name": "fdm_process_re3D_common", + "sub_path": "process/fdm_process_re3D_common.json" + }, + { + "name": "fgf_process_re3D_common", + "sub_path": "process/fgf_process_re3D_common.json" + }, + { + "name": "0.2 Fine", + "sub_path": "process/0.2mm Fine @re3D fdm 0.4.json" + }, + { + "name": "0.26 Standard", + "sub_path": "process/0.26mm Standard @re3D fdm 0.4.json" + }, + { + "name": "0.3 Fine", + "sub_path": "process/0.3mm Fine @re3D fdm 0.8.json" + }, + { + "name": "0.32 Draft", + "sub_path": "process/0.32mm Draft @re3D fdm 0.4.json" + }, + { + "name": "0.4 Standard", + "sub_path": "process/0.4mm Draft @re3D fdm 0.8.json" + }, + { + "name": "0.6 Standard", + "sub_path": "process/0.6mm Standard @re3D fgf 0.8.json" + }, + { + "name": "1.0 Standard", + "sub_path": "process/1.0mm Standard @re3D fgf 1.75.json" + } + ], + "filament_list": [ + { + "name": "fdm_filament_common", + "sub_path": "filament/fdm_filament_common.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_pp", + "sub_path": "filament/fdm_filament_pp.json" + }, + { + "name": "re3D PC @0.4 nozzle", + "sub_path": "filament/re3D PC @0.4 nozzle.json" + }, + { + "name": "re3D PC @0.8 nozzle", + "sub_path": "filament/re3D PC @0.8 nozzle.json" + }, + { + "name": "re3D PETG @0.4 nozzle", + "sub_path": "filament/re3D PETG @0.4 nozzle.json" + }, + { + "name": "re3D PETG @0.8 nozzle", + "sub_path": "filament/re3D PETG @0.8 nozzle.json" + }, + { + "name": "re3D rPETG @0.8 nozzle", + "sub_path": "filament/re3D rPETG @0.8 nozzle.json" + }, + { + "name": "re3D rPETG @1.75 nozzle", + "sub_path": "filament/re3D rPETG @1.75 nozzle.json" + }, + { + "name": "re3D PLA @0.4 nozzle", + "sub_path": "filament/re3D PLA @0.4 nozzle.json" + }, + { + "name": "re3D PLA @0.8 nozzle", + "sub_path": "filament/re3D PLA @0.8 nozzle.json" + }, + { + "name": "re3D rPP @0.8 nozzle", + "sub_path": "filament/re3D rPP @0.8 nozzle.json" + }, + { + "name": "re3D rPP @1.75 nozzle", + "sub_path": "filament/re3D rPP @1.75 nozzle.json" + } + ], + "machine_list": [ + { + "name": "fdm_machine_common", + "sub_path": "machine/fdm_machine_common.json" + }, + { + "name": "fdm_re3D_common", + "sub_path": "machine/fdm_re3D_common.json" + }, + { + "name": "fgf_re3D_common", + "sub_path": "machine/fgf_re3D_common.json" + }, + { + "name": "re3D Gigabot 4 0.4 nozzle", + "sub_path": "machine/re3D Gigabot 4 0.4 nozzle.json" + }, + { + "name": "re3D Gigabot 4 0.8 nozzle", + "sub_path": "machine/re3D Gigabot 4 0.8 nozzle.json" + }, + { + "name": "re3D Gigabot 4 XLT 0.4 nozzle", + "sub_path": "machine/re3D Gigabot 4 XLT 0.4 nozzle.json" + }, + { + "name": "re3D Gigabot 4 XLT 0.8 nozzle", + "sub_path": "machine/re3D Gigabot 4 XLT 0.8 nozzle.json" + }, + { + "name": "re3D Terabot 4 0.4 nozzle", + "sub_path": "machine/re3D Terabot 4 0.4 nozzle.json" + }, + { + "name": "re3D Terabot 4 0.8 nozzle", + "sub_path": "machine/re3D Terabot 4 0.8 nozzle.json" + }, + { + "name": "re3D GigabotX 2 0.8 nozzle", + "sub_path": "machine/re3D GigabotX 2 0.8 nozzle.json" + }, + { + "name": "re3D GigabotX 2 1.75 nozzle", + "sub_path": "machine/re3D GigabotX 2 1.75 nozzle.json" + }, + { + "name": "re3D GigabotX 2 XLT 0.8 nozzle", + "sub_path": "machine/re3D GigabotX 2 XLT 0.8 nozzle.json" + }, + { + "name": "re3D GigabotX 2 XLT 1.75 nozzle", + "sub_path": "machine/re3D GigabotX 2 XLT 1.75 nozzle.json" + }, + { + "name": "re3D TerabotX 2 0.8 nozzle", + "sub_path": "machine/re3D TerabotX 2 0.8 nozzle.json" + }, + { + "name": "re3D TerabotX 2 1.75 nozzle", + "sub_path": "machine/re3D TerabotX 2 1.75 nozzle.json" + } + ] +} diff --git a/scripts/check_profile.ps1 b/scripts/check_profile.ps1 index 66ed33c31d..b5d3345e33 100644 --- a/scripts/check_profile.ps1 +++ b/scripts/check_profile.ps1 @@ -9,12 +9,17 @@ same semantics: every check runs even after an earlier one fails (the workflow's continue-on-error), then the script exits non-zero once at the end. - extra_json_check scripts/orca_extra_profile_check.py + profile_tool scripts/orca_profile_tool.py check validate_system validator -p -l validate_slice validator -p -s -l validate_filament_subtypes validator -p -l -f validate_custom validator against every released custom-preset fixture + profile_tool is the only check that is not the validator binary; it makes the static checks + the validator cannot, because the validator loads the tree the way the slicer does and so + never sees a profile no .json indexes, a preset name two files claim, or a file + normalize and update-index would still rewrite. + Everything that has to be downloaded - the profile validator and the custom-preset fixture archives - lands under \.test\check_profiles and is reused on the next run. That directory also holds one log per check plus a copy of the comment CI would post on the PR. @@ -33,15 +38,15 @@ under emulation on ARM64. .PARAMETER ProfilesDir - Profile tree to validate (default: resources\profiles). extra_json_check always looks at the + Profile tree to validate (default: resources\profiles). profile_tool 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 + reports that one as skipped, and naming it explicitly still runs it. profile_tool 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 @@ -110,7 +115,7 @@ $HostArch = switch ($HostArch) { default { 'x86' } } -$AllChecks = @('extra_json_check', 'validate_system', 'validate_slice', 'validate_filament_subtypes', 'validate_custom') +$AllChecks = @('profile_tool', 'validate_system', 'validate_slice', 'validate_filament_subtypes', 'validate_custom') $script:LogWriter = $null $script:Python = '' @@ -203,7 +208,7 @@ if ($Vendor) { } } -# The validator's -v and orca_extra_profile_check.py's --vendor both take that stem; an unscoped +# The validator's -v and orca_profile_tool.py check'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 { @() } @@ -434,8 +439,8 @@ function Expand-VendorPresets([string] $Zip, [string] $Tree, [string] $Prefix) { $CheckBodies = @{ - extra_json_check = { - Invoke-Tool -Exe (Resolve-Python) -Arguments (@((Join-Path $RepoRoot 'scripts\orca_extra_profile_check.py')) + $VendorPyArgs) + profile_tool = { + Invoke-Tool -Exe (Resolve-Python) -Arguments (@((Join-Path $RepoRoot 'scripts\orca_profile_tool.py'), 'check') + $VendorPyArgs) } validate_system = { @@ -571,7 +576,7 @@ $CheckBodies = @{ # Heading CI puts above this check's log in the PR comment. $CommentHeadings = @{ - extra_json_check = '### Extra JSON Check Failed' + profile_tool = '### Profile Check Failed (orca_profile_tool.py)' validate_system = '### System Profile Validation Failed' validate_slice = '### Slice Validation Failed (custom g-code expansion)' validate_filament_subtypes = '### Filament Subtype Validation Failed' @@ -618,7 +623,7 @@ try { [Console]::OutputEncoding = New-Object Text.UTF8Encoding($false) Push-UserPresets - if ($Checks | Where-Object { $_ -ne 'extra_json_check' }) { $Validator = Resolve-Validator } + if ($Checks | Where-Object { $_ -ne 'profile_tool' }) { $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); @@ -673,7 +678,7 @@ try { '' } '---' - '*Please fix the above errors and push a new commit.*' + '*Fix the errors above and push a new commit. To reproduce this run locally: `scripts/check_profile.sh`, or `scripts\check_profile.bat` on Windows.*' ) $commentPath = Join-Path $WorkDir 'pr_comment.md' [IO.File]::WriteAllLines($commentPath, [string[]] $comment) diff --git a/scripts/check_profile.sh b/scripts/check_profile.sh index 51c8599b60..9076c957ab 100755 --- a/scripts/check_profile.sh +++ b/scripts/check_profile.sh @@ -38,7 +38,7 @@ 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. +# both the validator's -v and orca_profile_tool.py check'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="" @@ -46,7 +46,7 @@ LOG_LEVEL=2 PREFER_DOWNLOAD=0 REFRESH=0 -ALL_CHECKS=(extra_json_check validate_system validate_slice validate_filament_subtypes validate_custom) +ALL_CHECKS=(profile_tool validate_system validate_slice validate_filament_subtypes validate_custom) CHECKS=() # "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) @@ -60,7 +60,7 @@ Run the profile checks from .github/workflows/check_profiles.yml locally. Usage: scripts/check_profile.sh [OPTION]... [CHECK]... Checks (default: all, in this order): - extra_json_check scripts/orca_extra_profile_check.py + profile_tool scripts/orca_profile_tool.py check validate_system validator -p -l validate_slice validator -p -s -l validate_filament_subtypes validator -p -l -f @@ -79,14 +79,18 @@ Options: -l, --log-level N validator log level (default: ${LOG_LEVEL}, as in CI) -h, --help show this help -Note: extra_json_check always looks at the tree next to the script -(/resources/profiles); --profiles only redirects the validator checks. +Note: profile_tool is the only check that is not the validator binary; it makes the static +checks the validator cannot, because the validator loads the tree the way the slicer does +and so never sees a profile no .json indexes, a preset name two files claim, or a +file normalize and update-index would still rewrite. It always looks at the tree next to +the script (/resources/profiles); --profiles only redirects the validator checks, +because validating another tree's ids needs that tree's own filament_id snapshot too. 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. +profile_tool 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 } @@ -361,8 +365,8 @@ resolve_validator() { # ---------------------------------------------------------------------------- checks -check_extra_json_check() { - python3 "${REPO_ROOT}/scripts/orca_extra_profile_check.py" --vendor "${VENDOR}" +check_profile_tool() { + python3 "${REPO_ROOT}/scripts/orca_profile_tool.py" check --vendor "${VENDOR}" } check_validate_system() { @@ -548,7 +552,7 @@ EOF # Heading CI puts above this check's log in the PR comment. comment_heading() { case "$1" in - extra_json_check) echo "### Extra JSON Check Failed" ;; + profile_tool) echo "### Profile Check Failed (orca_profile_tool.py)" ;; validate_system) echo "### System Profile Validation Failed" ;; validate_slice) echo "### Slice Validation Failed (custom g-code expansion)" ;; validate_filament_subtypes) echo "### Filament Subtype Validation Failed" ;; @@ -638,7 +642,9 @@ fi ${RESULTS} INNER echo "---" - echo "*Please fix the above errors and push a new commit.*" + # Single-quoted on purpose: the backticks below are markdown, not command substitution. + # shellcheck disable=SC2016 + echo '*Fix the errors above and push a new commit. To reproduce this run locally: `scripts/check_profile.sh`, or `scripts\check_profile.bat` on Windows.*' } > "${WORK_DIR}/pr_comment.md" printf '\n%sOne or more profile checks failed.%s Logs: %s\n' "${C_RED}" "${C_RESET}" "${LOG_DIR}" diff --git a/scripts/orca_extra_profile_check.py b/scripts/orca_extra_profile_check.py deleted file mode 100644 index e95e2c29e8..0000000000 --- a/scripts/orca_extra_profile_check.py +++ /dev/null @@ -1,660 +0,0 @@ -import os -import json -import argparse -from pathlib import Path - -from orca_id_tool import generate_preset_setting_id, check_filament_ids - -OBSOLETE_KEYS = { - "acceleration", "scale", "rotate", "duplicate", "duplicate_grid", - "bed_size", "print_center", "g0", "wipe_tower_per_color_wipe", - "support_sharp_tails", "support_remove_small_overhangs", "support_with_sheath", - "tree_support_collision_resolution", "tree_support_with_infill", - "max_volumetric_speed", "max_print_speed", "support_closing_radius", - "remove_freq_sweep", "remove_bed_leveling", "remove_extrusion_calibration", - "support_transition_line_width", "support_transition_speed", "bed_temperature", - "bed_temperature_initial_layer", "can_switch_nozzle_type", "can_add_auxiliary_fan", - "extra_flush_volume", "spaghetti_detector", "adaptive_layer_height", - "z_hop_type", "z_lift_type", "bed_temperature_difference", "long_retraction_when_cut", - "retraction_distance_when_cut", "extruder_type", "internal_bridge_support_thickness", - "extruder_clearance_max_radius", "top_area_threshold", "reduce_wall_solid_infill", - "filament_load_time", "filament_unload_time", "smooth_coefficient", - "overhang_totally_speed", "silent_mode", "overhang_speed_classic" -} - -# Utility functions for printing messages in different colors. -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 - - -# Add helper function for duplicate key detection. -def no_duplicates_object_pairs_hook(pairs): - seen = {} - for key, value in pairs: - if key in seen: - raise ValueError(f"Duplicate key detected: {key}") - seen[key] = value - return seen - -# NOTE: currently Orca expects compatible_printers to be a defined in every instantiation profile, inheritation is not supported in Profile page -def check_filament_compatible_printers(vendor, vendor_folder): - """ - Checks JSON files in the vendor folder for missing or empty 'compatible_printers' - when 'instantiation' is flagged as true. - - In the OrcaFilamentLibrary 'compatible_printers' is optional: a profile without it is generic and - offered on every printer, while a profile that lists printers supersedes the generic one there. - - Parameters: - vendor (str): The vendor name the folder belongs to. - vendor_folder (str or Path): The directory to search for JSON profile files. - - Returns: - int: The number of profiles with missing or empty 'compatible_printers'. - """ - error = 0 - vendor_path = Path(vendor_folder) - if not vendor_path.exists(): - return 0 - - profiles = {} - - # Use rglob to recursively find .json files. - for file_path in vendor_path.rglob("*.json"): - if file_path.name == 'filaments_color_codes.json': # Ignore non-profile file - continue - - try: - with open(file_path, 'r', encoding='UTF-8') as fp: - # Use custom hook to detect duplicates. - data = json.load(fp, object_pairs_hook=no_duplicates_object_pairs_hook) - except ValueError as ve: - print_error(f"Duplicate key error in {file_path}: {ve}") - error += 1 - continue - except Exception as e: - print_error(f"Error processing {file_path}: {e}") - error += 1 - continue - - profile_name = data['name'] - if profile_name in profiles: - print_error(f"Duplicated profile {profile_name}: {file_path}") - error += 1 - continue - - profiles[profile_name] = { - 'file_path': file_path, - 'content': data, - } - - def get_property(profile, key): - content = profile['content'] - if key in content: - return content[key] - return None - - def get_inherit_property(profile, key): - content = profile['content'] - if key in content: - return content[key] - - if 'inherits' in content: - inherits = content['inherits'] - if inherits not in profiles: - raise ValueError(f"Parent profile not found: {inherits}, referenced in {profile['file_path']}") - - return get_inherit_property(profiles[inherits], key) - - return None - - for profile in profiles.values(): - instantiation = str(profile['content'].get("instantiation", "")).lower() == "true" - if instantiation and vendor != 'OrcaFilamentLibrary': - try: - compatible_printers = get_property(profile, "compatible_printers") - if not compatible_printers or (isinstance(compatible_printers, list) and not compatible_printers): - print_error(f"'compatible_printers' missing in {profile['file_path']}") - error += 1 - except ValueError as ve: - print_error(f"Unable to parse {profile['file_path']}: {ve}") - error += 1 - continue - - return error - -def load_available_filament_profiles(profiles_dir, vendor_name): - """ - Load all available filament profiles from a vendor's directory. - - Parameters: - profiles_dir (Path): The directory containing vendor profile directories - vendor_name (str): The name of the vendor directory - - Returns: - set: A set of filament profile names - """ - profiles = set() - vendor_path = profiles_dir / vendor_name / "filament" - - if not vendor_path.exists(): - return profiles - - for file_path in vendor_path.rglob("*.json"): - try: - with open(file_path, 'r', encoding='UTF-8') as fp: - data = json.load(fp) - if "name" in data: - profiles.add(data["name"]) - except Exception as e: - print_error(f"Error loading filament profile {file_path}: {e}") - - return profiles - -def check_machine_default_materials(profiles_dir, vendor_name): - """ - Checks if default materials referenced in machine profiles exist in - the vendor's filament library or in the global OrcaFilamentLibrary. - - Parameters: - profiles_dir (Path): The base profiles directory - vendor_name (str): The vendor name to check - - Returns: - int: Number of missing filament references found - int: the number of warnings found (0 or 1) - """ - error_count = 0 - machine_dir = profiles_dir / vendor_name / "machine" - - if not machine_dir.exists(): - print_warning(f"No machine profiles found for vendor: {vendor_name}") - return 0, 1 - - # Load available filament profiles - vendor_filaments = load_available_filament_profiles(profiles_dir, vendor_name) - global_filaments = load_available_filament_profiles(profiles_dir, "OrcaFilamentLibrary") - all_available_filaments = vendor_filaments.union(global_filaments) - - # Check each machine profile - for file_path in machine_dir.rglob("*.json"): - try: - with open(file_path, 'r', encoding='UTF-8') as fp: - data = json.load(fp) - - default_materials = None - if "default_materials" in data: - default_materials = data["default_materials"] - elif "default_filament_profile" in data: - default_materials = data["default_filament_profile"] - - if default_materials: - if isinstance(default_materials, list): - for material in default_materials: - if material not in all_available_filaments: - print_error(f"Missing filament profile: '{material}' referenced in {file_path.relative_to(profiles_dir)}") - error_count += 1 - else: - # Handle semicolon-separated list of materials in a string - if ";" in default_materials: - for material in default_materials.split(";"): - material = material.strip() - if material and material not in all_available_filaments: - print_error(f"Missing filament profile: '{material}' referenced in {file_path.relative_to(profiles_dir)}") - error_count += 1 - else: - # Single material in a string - if default_materials not in all_available_filaments: - print_error(f"Missing filament profile: '{default_materials}' referenced in {file_path.relative_to(profiles_dir)}") - error_count += 1 - - except Exception as e: - print_error(f"Error processing machine profile {file_path}: {e}") - error_count += 1 - - return error_count, 0 - -def check_name_consistency(profiles_dir, vendor_name): - """ - Make sure filament profile names match in both vendor json and subpath files. - Filament profiles work only if the name in .json matches the name in sub_path file, - or if it's one of the sub_path file's `renamed_from`. - - Parameters: - profiles_dir (Path): Base profiles directory - vendor_name (str): Vendor name - - Returns: - int: Number of errors found - int: Number of warnings found (0 or 1) - """ - error_count = 0 - vendor_dir = profiles_dir / vendor_name - vendor_file = profiles_dir / (vendor_name + ".json") - - if not vendor_file.exists(): - print_warning(f"No profiles found for vendor: {vendor_name} at {vendor_file}") - return 0, 1 - - try: - with open(vendor_file, 'r', encoding='UTF-8') as fp: - data = json.load(fp) - except Exception as e: - print_error(f"Error loading vendor profile {vendor_file}: {e}") - return 1, 0 - - for section in ['filament_list', 'machine_model_list', 'machine_list', 'process_list']: - if section not in data: - continue - - for child in data[section]: - name_in_vendor = child['name'] - sub_path = child['sub_path'] - sub_file = vendor_dir / sub_path - - if not sub_file.exists(): - print_error(f"Missing sub profile: '{sub_path}' declared in {vendor_file.relative_to(profiles_dir)}") - error_count += 1 - continue - - try: - with open(sub_file, 'r', encoding='UTF-8') as fp: - sub_data = json.load(fp) - except Exception as e: - print_error(f"Error loading profile {sub_file}: {e}") - error_count += 1 - continue - - name_in_sub = sub_data['name'] - - if name_in_sub == name_in_vendor: - continue - - # if 'renamed_from' in sub_data: - # renamed_from = [n.strip() for n in sub_data['renamed_from'].split(';')] - # if name_in_vendor in renamed_from: - # continue - - print_error(f"{section} name mismatch: required '{name_in_vendor}' in {vendor_file.relative_to(profiles_dir)} but found '{name_in_sub}' in {sub_file.relative_to(profiles_dir)}") - error_count += 1 - - return error_count, 0 - -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 (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 = 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: - with open(file_path, 'r', encoding='UTF-8') as fp: - # Use custom hook to detect duplicates. - data = json.load(fp, object_pairs_hook=no_duplicates_object_pairs_hook) - except ValueError as ve: - print_error(f"Duplicate key error in {file_path}: {ve}") - error += 1 - continue - except Exception as e: - print_error(f"Error processing {file_path}: {e}") - error += 1 - continue - - if 'filament_id' not in data: - continue - - filament_id = data['filament_id'] - - 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): - """ - Check for obsolete keys in all filament profiles for a vendor. - - Parameters: - profiles_dir (Path): Base profiles directory - vendor_name (str): Vendor name - obsolete_keys (set): Set of obsolete key names to check - - Returns: - int: Number of obsolete keys found - """ - error_count = 0 - vendor_path = profiles_dir / vendor_name / "filament" - - if not vendor_path.exists(): - return 0 - - for file_path in vendor_path.rglob("*.json"): - try: - with open(file_path, "r", encoding="UTF-8") as fp: - data = json.load(fp) - except Exception as e: - print_warning(f"Error reading profile {file_path.relative_to(profiles_dir)}: {e}") - error_count += 1 - continue - - for key in data.keys(): - if key in OBSOLETE_KEYS: - print_warning(f"Obsolete key: '{key}' found in {file_path.relative_to(profiles_dir)}") - error_count += 1 - - return error_count - - -CONFLICT_KEYS = [ - ['extruder_clearance_radius', 'extruder_clearance_max_radius'], -] - -VECTOR_KEYS = { - "filament_type", -} - -def check_vector_type_keys(profiles_dir, vendor_name): - """ - Check that properties expected to be vectors (JSON arrays) are not stored as scalars. - For example, `filament_type` must be a list like ["PA-CF"], not a string "PA-CF". - - Parameters: - profiles_dir (Path): Base profiles directory - vendor_name (str): Vendor name - - Returns: - int: Number of errors found - """ - error_count = 0 - vendor_path = profiles_dir / vendor_name - - if not vendor_path.exists(): - return 0 - - for file_path in vendor_path.rglob("*.json"): - try: - with open(file_path, "r", encoding="UTF-8") as fp: - data = json.load(fp) - except Exception as e: - print_error(f"Error processing {file_path.relative_to(profiles_dir)}: {e}") - error_count += 1 - continue - - if not isinstance(data, dict): - continue - - for key in VECTOR_KEYS: - if key in data and not isinstance(data[key], list): - print_error( - f"'{key}' must be an array in {file_path.relative_to(profiles_dir)}, " - f"got {type(data[key]).__name__}: {data[key]!r}" - ) - error_count += 1 - - return error_count - -def check_conflict_keys(profiles_dir, vendor_name): - """ - Check for keys that could not be specified at the same time, - due to option renaming & backward compatibility reasons. - - For example, `extruder_clearance_max_radius` and `extruder_clearance_radius` cannot co-exist - otherwise slicer won't know which one to use. - - Parameters: - profiles_dir (Path): Base profiles directory - vendor_name (str): Vendor name - - Returns: - int: Number of errors found - int: Number of warnings found - """ - error_count = 0 - warn_count = 0 - vendor_path = profiles_dir / vendor_name - - if not vendor_path.exists(): - print_warning(f"No machine profiles found for vendor: {vendor_name}") - return 0, 1 - - for file_path in vendor_path.rglob("*.json"): - try: - with open(file_path, 'r', encoding='UTF-8') as fp: - # Use custom hook to detect duplicates. - data = json.load(fp, object_pairs_hook=no_duplicates_object_pairs_hook) - except ValueError as ve: - print_error(f"Duplicate key error in {file_path.relative_to(profiles_dir)}: {ve}") - error_count += 1 - continue - except Exception as e: - print_error(f"Error processing {file_path.relative_to(profiles_dir)}: {e}") - error_count += 1 - continue - - for key_sets in CONFLICT_KEYS: - if sum([1 if k in data else 0 for k in key_sets]) > 1: - print_error(f"Conflict keys {key_sets} co-exist in {file_path.relative_to(profiles_dir)}") - error_count += 1 - - return error_count, warn_count - - -# Bambu (BBL) keeps its authoritative "G*" cloud ids, which are NOT produced by the -# deterministic formula, so BBL is exempt from the formula match (Rule 2) only. It is -# still checked for presence, uniqueness, base-no-id and the typo key like every other -# vendor. Every other vendor (incl. OrcaFilamentLibrary and Custom) must also match the -# formula. -SETTING_ID_FORMULA_EXEMPT_VENDORS = {"BBL"} -PROFILE_SUBDIRS = ("filament", "process", "machine") - - -def check_setting_id_uniqueness(profiles_dir): - """ - Validate setting_id across every vendor (see scripts/orca_id_tool.py): - 1. Every instantiated preset must HAVE a setting_id. (all vendors) - 2. A stored setting_id must equal generate_preset_setting_id(vendor, type, name); a stale - value means the JSON was edited without rerunning - "python scripts/orca_id_tool.py --generate --setting-id". - (all vendors EXCEPT the formula-exempt ones, e.g. BBL) - 3. Base profiles (instantiation != "true") must not carry a setting_id. (all vendors) - 4. setting_id must be globally unique - no two files may share one. (all vendors) - 5. No profile may use the misspelled key "settings_id". (all vendors) - Formula-exempt vendors (BBL) keep their authoritative ids, so only Rule 2 is skipped - for them; they are still held to presence, uniqueness, base-no-id and the typo check. - """ - errors = 0 - owners = {} # setting_id -> list of relative_path (every vendor) - for vendor_dir in sorted(profiles_dir.iterdir()): - if not vendor_dir.is_dir(): - continue - vendor = vendor_dir.name - formula_exempt = vendor in SETTING_ID_FORMULA_EXEMPT_VENDORS - for sub in PROFILE_SUBDIRS: - base = vendor_dir / sub - if not base.is_dir(): - continue - for file_path in base.rglob("*.json"): - try: - data = json.loads(file_path.read_bytes()) - except (ValueError, OSError): - continue - if not isinstance(data, dict): - continue - rel = file_path.relative_to(profiles_dir) - # Rule 5: catch the misspelled "settings_id" key. - if "settings_id" in data: - errors += 1 - print_error( - f'profile {rel} uses the misspelled key "settings_id" ' - f'(should be "setting_id"); run ' - f'"python scripts/orca_id_tool.py --generate --setting-id"' - ) - sid = data.get("setting_id") - instantiated = data.get("instantiation") == "true" - if not instantiated: - # Rule 3: base/template profiles must not carry a setting_id. - if sid: - errors += 1 - print_error( - f'base profile {rel} (instantiation != "true") must not have a ' - f'setting_id ("{sid}"); run ' - f'"python scripts/orca_id_tool.py --generate --setting-id"' - ) - continue - # Rule 1: every instantiated preset must have a setting_id. - if not sid: - errors += 1 - print_error( - f"instantiated preset {rel} is missing a setting_id; " - f'run "python scripts/orca_id_tool.py --generate --setting-id"' - ) - continue - # Rule 2: the stored id must match the deterministic rule. BBL keeps its - # authoritative G* ids and is exempt from this check only. - if not formula_exempt: - expected = generate_preset_setting_id(vendor, sub, data.get("name", "")) - if sid != expected: - errors += 1 - print_error( - f'setting_id "{sid}" in {rel} does not match the expected ' - f'"{expected}" for {vendor}/{sub}/{data.get("name", "")}; ' - f'run "python scripts/orca_id_tool.py --generate --setting-id"' - ) - continue - # Rule 4: collect for the global-uniqueness check below. - owners.setdefault(sid, []).append(rel) - - # Rule 4: a setting_id shared by two files is an error. For managed vendors this means - # a duplicate vendor/type/name; for formula-exempt vendors (BBL) a copy-pasted id. - for sid, locs in sorted(owners.items()): - if len(locs) < 2: - continue - errors += 1 - print_error( - f'setting_id "{sid}" is shared by {len(locs)} files ({sorted(map(str, locs))}); ' - f"setting_id must be globally unique" - ) - return errors - - -def main(): - parser = argparse.ArgumentParser( - description="Check 3D printer profiles for common issues", - formatter_class=argparse.ArgumentDefaultsHelpFormatter - ) - parser.add_argument("--vendor", type=str, help="Specify a single vendor to check") - parser.add_argument("--check-filaments", action="store_true", help="Check 'compatible_printers' in filament profiles") - parser.add_argument("--check-materials", action="store_true", help="Check default materials in machine profiles") - parser.add_argument("--check-obsolete-keys", action="store_true", help="Warn if obsolete keys are found in filament profiles") - args = parser.parse_args() - - print_info("Checking profiles ...") - - script_dir = Path(__file__).resolve().parent - profiles_dir = script_dir.parent / "resources" / "profiles" - checked_vendor_count = 0 - errors_found = 0 - warnings_found = 0 - - def run_checks(vendor_name): - nonlocal errors_found, warnings_found, checked_vendor_count - vendor_path = profiles_dir / vendor_name - - if args.check_filaments or not (args.check_materials and not args.check_filaments): - errors_found += check_filament_compatible_printers(vendor_name, vendor_path / "filament") - - if args.check_materials: - new_errors, new_warnings = check_machine_default_materials(profiles_dir, vendor_name) - errors_found += new_errors - warnings_found += new_warnings - - if args.check_obsolete_keys: - warnings_found += check_obsolete_keys(profiles_dir, vendor_name) - - new_errors, new_warnings = check_name_consistency(profiles_dir, vendor_name) - errors_found += new_errors - warnings_found += new_warnings - - new_errors, new_warnings = check_conflict_keys(profiles_dir, vendor_name) - errors_found += new_errors - warnings_found += new_warnings - - errors_found += check_vector_type_keys(profiles_dir, vendor_name) - - errors_found += check_filament_id(profiles_dir, vendor_name) - checked_vendor_count += 1 - - if args.vendor: - run_checks(args.vendor) - else: - for vendor_dir in profiles_dir.iterdir(): - if not vendor_dir.is_dir() or vendor_dir.name == "OrcaFilamentLibrary": - continue - run_checks(vendor_dir.name) - - # Global (cross-vendor) check: setting_id must be unique and stay in-namespace. - # 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/orca_id_tool.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}") - if errors_found > 0: - print_error(f"Files with errors : {errors_found}") - else: - print_success("Files with errors : 0") - if warnings_found > 0: - print_warning(f"Files with warnings : {warnings_found}") - else: - print_success("Files with warnings : 0") - print("=================================================") - if errors_found > 0 or warnings_found > 0 : - print_warning('Issue(s) found, try `orca_filament_lib.py --fix` to fix common issues automatically') - - exit(-1 if errors_found > 0 else 0) - - -if __name__ == "__main__": - main() diff --git a/scripts/orca_filament_lib.py b/scripts/orca_filament_lib.py deleted file mode 100644 index 65f037e3f3..0000000000 --- a/scripts/orca_filament_lib.py +++ /dev/null @@ -1,310 +0,0 @@ -import os -import json -import argparse -from collections import defaultdict - -def create_ordered_profile(profile_dict, priority_fields=['name', 'type']): - """Create a new dictionary with priority fields first""" - ordered_profile = {} - - # Add priority fields first - for field in priority_fields: - if field in profile_dict: - ordered_profile[field] = profile_dict[field] - - # Add remaining fields - for key, value in profile_dict.items(): - if key not in priority_fields: - ordered_profile[key] = value - - return ordered_profile - -def topological_sort(filaments): - # Build a graph of dependencies - graph = defaultdict(list) - in_degree = defaultdict(int) - name_to_filament = {f['name']: f for f in filaments} - all_names = set(name_to_filament.keys()) - - # Create the dependency graph - processed_files = set() - for filament in filaments: - if 'inherits' in filament: - parent = filament['inherits'] - child = filament['name'] - # Only create dependency if parent exists - if parent in all_names: - graph[parent].append(child) - in_degree[child] += 1 - if parent not in in_degree: - in_degree[parent] = 0 - processed_files.add(child) - processed_files.add(parent) - - # Initialize queue with nodes having no dependencies (now sorted) - queue = sorted([name for name, degree in in_degree.items() if degree == 0]) - result = [] - - # Process the queue - while queue: - current = queue.pop(0) - result.append(name_to_filament[current]) - processed_files.add(current) - - # Process children (now sorted) - children = sorted(graph[current]) - for child in children: - in_degree[child] -= 1 - if in_degree[child] == 0: - queue.append(child) - - # Add remaining files that weren't part of inheritance tree (now sorted) - remaining = sorted(all_names - processed_files) - for name in remaining: - result.append(name_to_filament[name]) - - return result - -def update_profile_library(vendor="",profile_type="filament"): - # change current working directory to the relative path(..\resources\profiles) compare to script location - os.chdir(os.path.join(os.path.dirname(__file__), '..', 'resources', 'profiles')) - - # Collect current profile entries - if vendor: - vendors = [vendor] - else: - profiles_dir = os.path.join(os.path.dirname(__file__), '..', 'resources', 'profiles') - vendors = [f[:-5] for f in os.listdir(profiles_dir) if f.lower().endswith('.json')] - for vendor in vendors: - current_profiles = [] - base_dir = vendor - # Orca expects machine_model to be in the machine folder - if profile_type == 'machine_model': - profile_dir = os.path.join(base_dir, 'machine') - else: - profile_dir = os.path.join(base_dir, profile_type) - - for root, dirs, files in os.walk(profile_dir): - for file in files: - if file.lower().endswith('.json'): - full_path = os.path.join(root, file) - - # Get relative path from base directory - sub_path = os.path.relpath(full_path, base_dir).replace('\\', '/') - - try: - with open(full_path, 'r', encoding='utf-8') as f: - _profile = json.load(f) - if _profile.get('type') != profile_type: - continue - name = _profile.get('name') - inherits = _profile.get('inherits') - - if name: - entry = { - "name": name, - "sub_path": sub_path - } - if inherits: - entry['inherits'] = inherits - current_profiles.append(entry) - else: - print(f"Warning: Missing 'name' in {full_path}") - except Exception as e: - print(f"Error reading {full_path}: {str(e)}") - continue - - # Sort profiles based on inheritance - sorted_profiles = topological_sort(current_profiles) - - # Remove the inherits field as it's not needed in the final JSON - for p in sorted_profiles: - p.pop('inherits', None) - - # Update library file - lib_path = f'{vendor}.json' - - profile_section = profile_type+'_list' - - try: - with open(lib_path, 'r+', encoding='utf-8') as f: - library = json.load(f) - library[profile_section] = sorted_profiles - f.seek(0) - json.dump(library, f, indent="\t", ensure_ascii=False) - f.write('\n') - f.truncate() - - print(f"Profile library for {vendor} updated successfully!") - except Exception as e: - print(f"Error updating library file: {str(e)}") - -def clean_up_profile(vendor="", profile_type="", force=False): -# change current working directory to the relative path(..\resources\profiles) compare to script location - os.chdir(os.path.join(os.path.dirname(__file__), '..', 'resources', 'profiles')) - - # Collect current profile entries - if vendor: - vendors = [vendor] - else: - profiles_dir = os.path.join(os.path.dirname(__file__), '..', 'resources', 'profiles') - vendors = [f[:-5] for f in os.listdir(profiles_dir) if f.lower().endswith('.json')] - for vendor in vendors: - current_profiles = [] - base_dir = vendor - # Orca expects machine_model to be in the machine folder - if profile_type == 'machine_model': - profile_dir = os.path.join(base_dir, 'machine') - else: - profile_dir = os.path.join(base_dir, profile_type) - - for root, dirs, files in os.walk(profile_dir): - for file in files: - if file.lower().endswith('.json'): - if file == 'filaments_color_codes.json': # Ignore non-profile file - continue - - full_path = os.path.join(root, file) - - # Get relative path from base directory - sub_path = os.path.relpath(full_path, base_dir).replace('\\', '/') - - try: - with open(full_path, 'r+', encoding='utf-8') as f: - _profile = json.load(f) - need_update = False - if not _profile.get('type') or _profile.get('type') == "": - need_update = True - name = _profile.get('name') - inherits = _profile.get('inherits') - if profile_type == "machine_model" or profile_type == "machine": - if "nozzle" in name or "Nozzle" in name: - _profile['type'] = "machine" - else: - _profile['type'] = "machine_model" - else: - _profile['type'] = profile_type - print(f"Added type: {_profile['type']} to {file}") - - fields_to_remove = ['version', 'is_custom_defined'] - for field in fields_to_remove: - if _profile.get(field): - # remove version field - del _profile[field] - print(f"Removed {field} field from {file}") - need_update = True - - # Handle `extruder_clearance_radius`. - if 'extruder_clearance_radius' in _profile and 'extruder_clearance_max_radius' in _profile: - # BBS renamed `extruder_clearance_radius` to `extruder_clearance_max_radius` - # however some of their profiles have both options exists with different value, which - # could cause very bad consequence such as toolhead collision. - # Here we make sure only one of these options exist, and if both present, we keep - # the one with greater value. - need_update = True - if float(_profile['extruder_clearance_max_radius']) > float(_profile['extruder_clearance_radius']): - del _profile['extruder_clearance_radius'] - else: - del _profile['extruder_clearance_max_radius'] - - # Convert filament fields to arrays if not already - if profile_type == 'filament': - fields_to_arrayify = ['filament_cost', 'filament_density', 'filament_type', "temperature_vitrification", "filament_max_volumetric_speed", "filament_vendor"] - for field in fields_to_arrayify: - if field in _profile and not isinstance(_profile[field], list): - original_value = _profile[field] - _profile[field] = [original_value] - print(f"Converted {field} to array in {file}") - need_update = True - - # remove following fields from filament profile - fields_to_remove = ['initial_layer_print_speed', 'outer_wall_speed', 'inner_wall_speed', 'infill_speed', 'top_surface_speed', 'travel_speed'] - for field in fields_to_remove: - if field in _profile: - del _profile[field] - print(f"Removed {field} field from {file}") - need_update = True - - - if need_update or force: - # write back to file - f.seek(0) - ordered_profile = create_ordered_profile(_profile, ['type', 'name', 'renamed_from', 'inherits', 'from', 'setting_id', 'filament_id', 'instantiation']) - json.dump(ordered_profile, f, indent="\t", ensure_ascii=False) - f.write('\n') - f.truncate() - print(f"Updated profile: {full_path}") - except Exception as e: - print(f"Error reading {full_path}: {str(e)}") - continue - -# For each JSON file, it will: -# - Replace "BBL X1C" with "System" in the name field -# - Empty the compatible_printers array -# - Ensure setting_id starts with 'O' -def rename_filament_system(vendor="OrcaFilamentLibrary"): - # change current working directory to the relative path - os.chdir(os.path.join(os.path.dirname(__file__), '..', 'resources', 'profiles')) - - base_dir = vendor - filament_dir = os.path.join(base_dir, 'filament') - - for root, dirs, files in os.walk(filament_dir): - for file in files: - if file.lower().endswith('.json'): - full_path = os.path.join(root, file) - try: - with open(full_path, 'r', encoding='utf-8') as f: - data = json.load(f) - modified = False - - # Update name if it contains "BBL X1C" - if 'name' in data and "BBL X1C" in data['name']: - data['name'] = data['name'].replace("BBL X1C", "System") - modified = True - - # Empty compatible_printers if exists - if 'compatible_printers' in data: - data['compatible_printers'] = [] - modified = True - - # Update setting_id if needed - if 'setting_id' in data and not data['setting_id'].startswith('O'): - data['setting_id'] = 'O' + data['setting_id'] - modified = True - - if modified: - with open(full_path, 'w', encoding='utf-8') as f: - json.dump(data, f, indent="\t", ensure_ascii=False) - f.write('\n') - print(f"Updated {full_path}") - - except Exception as e: - print(f"Error processing {full_path}: {str(e)}") - -if __name__ == '__main__': - parser = argparse.ArgumentParser(description='Update filament library for specified vendor') - parser.add_argument('-v', '--vendor', type=str, default="", - help='Vendor name (default: "" which means all vendors)') - parser.add_argument('-u', '--update', action='store_true', help='update vendor.json') - parser.add_argument('-p', '--profile_type', type=str, choices=['machine_model', 'process', 'filament', 'machine'], help='profile type (default: "" which means all types)') - parser.add_argument('-f', '--fix', action='store_true', help='Fix errors like missing type field, and clean up the profile') - parser.add_argument('--force', action='store_true', help='Force update the profile files, for --fix option') - args = parser.parse_args() - - if args.fix: - if(args.profile_type): - clean_up_profile(args.vendor, args.profile_type, args.force) - else: - clean_up_profile(args.vendor, 'machine_model', args.force) - clean_up_profile(args.vendor, 'process', args.force) - clean_up_profile(args.vendor, 'filament', args.force) - clean_up_profile(args.vendor, 'machine', args.force) - - if args.update: - update_profile_library(args.vendor, 'machine_model') - update_profile_library(args.vendor, 'process') - update_profile_library(args.vendor, 'filament') - update_profile_library(args.vendor, 'machine') - # else: - # rename_filament_system(args.vendor) \ No newline at end of file diff --git a/scripts/orca_id_tool.py b/scripts/orca_id_tool.py deleted file mode 100755 index 956aec3569..0000000000 --- a/scripts/orca_id_tool.py +++ /dev/null @@ -1,1429 +0,0 @@ -#!/usr/bin/env python3 -""" -Assign and validate the deterministic ids of OrcaSlicer system profiles: the -per-product filament_id and the per-preset setting_id. - -Both ids are pure functions of the thing they name, so nothing here is ever -invented: the tool only writes the id the rules below already imply, and a tree -that already satisfies them is left untouched. - -filament_id policy (see docs/HLSD/filament_id.md): - * 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///") ) - 8 chars total, which satisfies the AMS length limit. Nobody invents ids by - 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: - - 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 - - P + 7 hex chars (case-insensitive) and the literal "null" - user-custom presets (CreatePresetsDialog.cpp) - * 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. - -setting_id policy (see AGENTS.md "Critical Constraints"): - * setting_id is a PRESET id, a pure function of the preset's identity: - setting_id = base62_16( uuid5(NAMESPACE, "//") ) - The same value is recomputed on the fly by the C++ app - (Slic3r::generate_preset_setting_id); the two MUST stay byte-identical, and - the validator (orca_extra_profile_check.py) imports the rule from here. - Uniqueness is therefore automatic: two presets collide only if they share - vendor + type + name, which the validator flags. - * Only instantiated presets (instantiation == "true") carry a setting_id; - base / template profiles do not. - * Bambu (BBL) owns the authoritative "G*" setting_id space and is the only - reserved vendor: its setting_ids are never rewritten, which keeps - Bambu-synced presets backward compatible. filament_id has no such exemption - — the GF* catalog space is frozen and ownerless, so BBL's filament_ids are - minted like every other vendor's. - -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. filament_vendor / filament_type resolve the same way. - -Run from anywhere: - python scripts/orca_id_tool.py --generate write the ids every profile should carry - python scripts/orca_id_tool.py --dry-run preview that; writes nothing - python scripts/orca_id_tool.py --check validate filament_id state (what CI runs) - python scripts/orca_id_tool.py --update-snapshot re-record the sanctioned filament_id state -Narrow --generate with --filament-id / --setting-id and --vendor VENDOR (repeatable). -""" - -import argparse -import json -import os -import re -import sys -import uuid - -# The id namespace baked into both Python and C++ (Slic3r::generate_preset_setting_id). -# Dedicated, distinct from the cloud namespace (f47ac10b-...) so the two id spaces never -# coincide; it is the root of BOTH id rules below — never change it. -NAMESPACE = uuid.UUID("c1f4d9e2-7a3b-5c8d-9e0f-1a2b3c4d5e6f") -ALPHABET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" -SETTING_ID_LENGTH = 16 - -# Dedicated namespace for filament_id, derived from the setting_id namespace above. -# 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") -# 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")) - -OFL = "OrcaFilamentLibrary" - -# Bambu (BBL) is the only vendor exempt from the setting_id rule: it keeps its -# authoritative "G*" cloud ids. No vendor is exempt from the filament_id rule. -RESERVED_VENDORS = {"BBL"} - -# The profile types that carry a setting_id; the subdir name is also the type -# name, matching Preset::get_type_string() on the C++ side. -PROFILE_SUBDIRS = ("filament", "process", "machine") - -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) -# 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?@.*$") -# A JSON string literal, for the byte-preserving key edits. -_JSON_STR = r'"(?:[^"\\]|\\.)*"' - -GENERATE_CMD = "python scripts/orca_id_tool.py --generate" -UPDATE_HINT = 'run "python scripts/orca_id_tool.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 -# 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 _base62_tail(n, length): - """The low `length` base62 digits of n, most-significant first. - - The shared tail of both id rules. Its output bytes are pinned by the C++ - golden vectors (tests/libslic3r/test_preset_setting_id.cpp) and by the - filament_id snapshot — never change it. - """ - digits = [] - for _ in range(length): - digits.append(ALPHABET[n % 62]) - n //= 62 - return "".join(reversed(digits)) - - -def generate_preset_setting_id(vendor, type_name, name): - """Deterministic 16-char base62 setting_id for a preset. - - input = f"{vendor}/{type_name}/{name}"; u = uuid5(NAMESPACE, input); - id = the low SETTING_ID_LENGTH base62 digits of int(u.bytes, "big"), - most-significant first. Kept byte-identical to the C++ - Slic3r::generate_preset_setting_id. - """ - u = uuid.uuid5(NAMESPACE, f"{vendor}/{type_name}/{name}") - return _base62_tail(int.from_bytes(u.bytes, "big"), SETTING_ID_LENGTH) - - -def base_name(name): - """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, filament_name): - """Deterministic "OF" + 6-char base62 filament_id for a filament product. - - 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}" - u = uuid.uuid5(FILAMENT_ID_NAMESPACE, key) - return "OF" + _base62_tail(int.from_bytes(u.bytes, "big"), FILAMENT_ID_LENGTH) - - -# --------------------------------------------------------------------------- -# 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 list_profile_dirs(profiles_dir): - """Every vendor directory under the tree, index or not. - - What the setting_id pass walks, and what orca_extra_profile_check.py walks: - setting_id is a per-file property, so a bundle whose index has not landed yet - must still be assignable — otherwise the validator flags files the tool - refuses to touch. (filament_id is driven by each bundle's filament_list - instead, hence list_vendor_names above.) - """ - profiles_dir = str(profiles_dir) - return sorted(d for d in os.listdir(profiles_dir) - if os.path.isdir(os.path.join(profiles_dir, d))) - - -def iter_profile_files(vendor_dir): - """Yield (json path, type) under a vendor bundle, in a deterministic order.""" - for sub in PROFILE_SUBDIRS: - base = os.path.join(vendor_dir, sub) - if not os.path.isdir(base): - continue - for root, dirs, files in os.walk(base): - dirs.sort() # deterministic traversal across filesystems - for name in sorted(files): - if name.endswith(".json"): - yield os.path.join(root, name), sub - - -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 [], - "filament_vendor": data.get("filament_vendor"), - "filament_type": data.get("filament_type"), - "renamed_from": data.get("renamed_from"), - } - return presets, errors - - -def resolve_filament_id(name, filaments, ofl_filaments, seen=None, in_ofl=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. - - 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"): - 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 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, filament name).""" - return (resolve_filament_field(name, "filament_vendor", filaments, ofl_filaments), - resolve_filament_field(name, "filament_type", filaments, ofl_filaments), - base_name(name)) - - -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/Filament" 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, _entry = resolve_filament_id(rec["name"], filaments, ofl_filaments) - rec["eff_filament_id"] = eff - rec["id_source"] = src - vendors[vendor] = filaments - - # 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 - # 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 - missing_effective = [] # (vendor, name, file) instantiated presets resolving no id - 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 - 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) - declared_ids.setdefault(vendor, set()).add(fid) - ids.setdefault(fid, set()) - declarer_triples.append((vendor, rec, fid, triple)) - triples.setdefault(fid, set()).add(triple) - filament_triples.setdefault( - (vendor, base_name(rec["name"])), {}).setdefault( - triple, []).append(rec["name"]) - 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 not rec.get("filament_id") and OF_ID_RE.match(eff): - inherited.append((vendor, rec, eff, 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. - name_bundles = {} - for (vendor, filament_name), tmap in filament_triples.items(): - name_bundles.setdefault(filament_name, {})[vendor] = frozenset(tmap) - cross_bundle_triples = [ - (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 - ] - - 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, - "missing_effective": sorted(missing_effective), - "inherited": inherited, - "triples": {fid: sorted(list(t) for t in ts) for fid, ts in triples.items()}, - "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}, - } - - -# --------------------------------------------------------------------------- -# Snapshot IO -# --------------------------------------------------------------------------- - -def snapshot_from_analysis(analysis): - """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): - """Return the snapshot dict, or None when the file does not exist.""" - if not os.path.exists(path): - return None - data = load_json(path) - data.setdefault("ids", {}) - return data - - -def write_snapshot(path, obj): - """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) - 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, 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": - 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("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" - - -# --------------------------------------------------------------------------- -# Checks (imported and called tree-wide by orca_extra_profile_check.py) -# --------------------------------------------------------------------------- - -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 - match ^OF[0-9A-Za-z]{6}$. No exceptions: not the snapshot, not BBL. - 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, 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 - 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 - 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 - 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 OF_ID_RE.match(fid): - continue - print_error( - f'filament_id "{fid}" ({vendor}) is not a minted "OF" id; new ' - f'filament ids must come from "{GENERATE_CMD}"') - errors += 1 - - # -- 2. snapshot equality (both directions) ----------------------------- - tree_triples = analysis["triples"] - for fid in sorted(tree_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 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( - f'filament_id stability: snapshot id "{fid}" vanished from the tree; ' - f"{UPDATE_HINT}") - errors += 1 - continue - 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 - - # -- 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"])): - 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'"{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["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 "{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 - ofl_map = analysis["vendors"].get(OFL, {}) - for vendor, name, file in analysis["missing_effective"]: - 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; " - f'run "{GENERATE_CMD}" (expected id for filament ' - 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 ---------------------------------------------- - 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]: - 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 - 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'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 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'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") - - # -- 6. 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 - 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") - # 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): - 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 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}') - 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 - - -# --------------------------------------------------------------------------- -# --update-snapshot -# --------------------------------------------------------------------------- - -def update_snapshot(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, dry_run=False): - """Regenerate the snapshot from the tree. - - Refuses to sanction a tree it could not read whole, a reserved-namespace id - (or a claim on one) and an id declared under more than one triple: none of - them can ever pass --check, so writing them 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) - # A tree that could not be read whole cannot be sanctioned: the snapshot - # would silently drop the unreadable bundle's ids and claims, and the diff - # would read as a deliberate removal. - refusals = len(analysis["read_errors"]) - for msg in analysis["read_errors"]: - print_error(msg) - - 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 {} - - # 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(entry["filaments"]) - set(old_ids.get(fid, {}).get("filaments", []))) - for fid, entry in new_snap["ids"].items()) - removed_claims = sum( - 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 and not dry_run: - 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}") - if changed and dry_run: - print_success(f"dry run: {snapshot_path} would be rewritten; nothing written") - elif changed: - print_success(f"snapshot written to {snapshot_path}") - else: - print_success("snapshot already up to date; nothing changed") - return 0 - - -# --------------------------------------------------------------------------- -# Byte-preserving profile edits -# --------------------------------------------------------------------------- -# Binary IO throughout: a profile keeps its original line endings (LF or CRLF), -# its BOM and its exact formatting apart from the one line being touched. - -def insert_key_line(text, key, value, before=(), after=()): - """Insert a `"key": value` line into a preset that lacks one. - - Placed just before the first `before` anchor the file has (matching the - canonical key order), else just after the first `after` anchor, reusing that - anchor line's indentation and line ending. Returns (text, insertions made). - """ - def line(m): - return (f'{m.group(1)}"{key}": {json.dumps(value, ensure_ascii=False)},' - f'{m.group(2)}') - - for anchors, at_start in ((before, True), (after, False)): - for anchor in anchors: - m = re.search(r'^([ \t]*)"' + re.escape(anchor) + r'"[ \t]*:.*?(\r?\n)', - text, re.MULTILINE) - if m: - cut = m.start() if at_start else m.end() - return text[:cut] + line(m) + text[cut:], 1 - return text, 0 - - -def replace_key_value(text, key, new_value, old_value=None): - """Swap the JSON string VALUE on the `"key"` line, byte-preserving the rest. - - When old_value is given the line must carry exactly that value, so a stale - rewrite fails loudly instead of clobbering an unexpected id. - Returns (text, replacements made). - """ - value = (re.escape(json.dumps(old_value, ensure_ascii=False)) - if old_value is not None else _JSON_STR) - pattern = re.compile( - r'(^[ \t]*"' + re.escape(key) + r'"[ \t]*:[ \t]*)' + value, re.MULTILINE) - return pattern.subn( - lambda m: m.group(1) + json.dumps(new_value, ensure_ascii=False), text, count=1) - - -def delete_key_line(text, key, old_value=None): - """Delete the `"key"` line, byte-preserving the rest. - - Handles both the canonical layout (trailing comma) and a last-property - layout (comma on the preceding line, consumed so no dangling comma is left). - Returns (text, deletions made). - """ - value = (re.escape(json.dumps(old_value, ensure_ascii=False)) - if old_value is not None else _JSON_STR) - member = r'"' + re.escape(key) + r'"[ \t]*:[ \t]*' + value - m = re.search(r'^[ \t]*' + member + 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]*' + member + r'[ \t]*(?=\r?\n)', text) - if m: - return text[:m.start()] + text[m.end():], 1 - return text, 0 - - -def insert_filament_id(text, new_id): - """Insert a `"filament_id"` line before `instantiation`, else after `name`.""" - return insert_key_line(text, "filament_id", new_id, - before=("instantiation",), after=("name",)) - - -def replace_filament_id_value(text, old_id, new_id): - """Swap the value on the `"filament_id"` line; it must carry old_id.""" - return replace_key_value(text, "filament_id", new_id, old_value=old_id) - - -def insert_setting_id(text, new_id): - """Insert a `"setting_id"` line before `filament_id`, else `instantiation`. - - Falls back to `name` — the one key every preset has — so the anchor does not - depend on whether filament_id has been written yet: a dry run, which does not - write it, must reach the same verdict as the real run that does. - """ - return insert_key_line(text, "setting_id", new_id, - before=("filament_id", "instantiation"), after=("name",)) - - -def _edit_profile(path, edit, dry_run=False, what="edit"): - """Apply `edit(text) -> (text, n)` to the profile at path, byte-preserving. - - The result is re-parsed and returned so the caller can verify the outcome — - in a dry run too, where only the write itself is skipped. Raises when the - edit found no anchor or produced invalid 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 = edit(text) - if n == 0: - raise RuntimeError(f"could not apply {what} to {path}") - try: - data = json.loads(text) # fail loudly if the edit broke the JSON - except ValueError as e: - raise RuntimeError(f"{what} broke the JSON in {path}: {e}") from None - if not dry_run: - 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, dry_run=False): - """Insert new_id into the profile at path, byte-preserving everything else.""" - _edit_profile(path, lambda text: insert_filament_id(text, new_id), - dry_run, "filament_id insert") - - -def rewrite_filament_id(path, old_id, new_id, dry_run=False): - """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), - dry_run, "filament_id rewrite") - 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") - - -# --------------------------------------------------------------------------- -# --generate -# --------------------------------------------------------------------------- - -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, 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 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). - 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 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) - errors = 0 - for msg in analysis["read_errors"]: - print_error(msg) - errors += 1 - wanted = None - if vendors is not None: - wanted = set(vendors) - # A vendor directory without a bundle index simply has no filaments to - # process; only a name that is no directory at all is an error. - unknown = sorted(wanted - set(list_profile_dirs(profiles_dir))) - if unknown: - for v in unknown: - print_error(f'unknown vendor "{v}" in {profiles_dir}') - return 0, errors + len(unknown) - - 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 - - # 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"])): - 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: - print_error( - f'cannot re-mint "{rec["file"]}" (filament_id "{fid}"): resolves empty ' - f'{missing}; the mint key needs both (generic materials use ' - f'filament_vendor "Generic")') - errors += 1 - continue - try: - rewrite_filament_id(rec["path"], fid, want, dry_run) - except (OSError, RuntimeError, ValueError) as e: - print_error(str(e)) - errors += 1 - continue - files_changed += 1 - reminted += 1 - 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 - # or one file touched by both passes counts as two. - changed_paths.add(os.path.normpath(rec["path"])) - print_info(f'{verb}rewrite {rec["file"]}: "{fid}" -> "{want}" ' - f'(triple "{"/".join(triple)}")') - - # 2. Instantiated filaments that resolve no id at all, grouped by filament. - filaments = {} # (vendor, filament name) -> [rec] - for vendor, name, _file in analysis["missing_effective"]: - if wanted is not None and vendor not in wanted: - continue - 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 - filaments.setdefault((vendor, base_name(name)), []).append(rec) - - ofl_map = analysis["vendors"].get(OFL, {}) - for (vendor, filament_name), members in sorted(filaments.items()): - vendor_map = analysis["vendors"][vendor] - # 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 = {} - 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") - or base_name(root["name"]) != filament_name): - root = rec # root-less member carries the id itself - roots[root["name"]] = root - fields = {(resolve_filament_field(n, "filament_vendor", vendor_map, ofl_map), - resolve_filament_field(n, "filament_type", vendor_map, ofl_map)) - for n in roots} - if len(fields) > 1: - print_error( - 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 - continue - triple = (*next(iter(fields)), filament_name) - if triple in colliding: - continue # reported above - missing = _incomplete_triple(triple) - if missing: - print_error( - 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 = generate_filament_id(*triple) - for name in sorted(roots): - root = roots[name] - try: - write_filament_id(root["path"], new_id, dry_run) - except (OSError, RuntimeError, ValueError) as e: - print_error(str(e)) - errors += 1 - continue - files_changed += 1 - inserted += 1 - 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"]}') - - print_info(f"filament_ids inserted : {inserted}") - print_info(f"filament_ids re-minted : {reminted}") - return files_changed, errors - - -def generate_setting_ids(profiles_dir=PROFILES_DIR, vendors=None, dry_run=False, - changed_paths=None): - """Make every preset carry the setting_id its identity mints. - - One walk over filament/, process/ and machine/ of every vendor bundle, and - one composite edit per file: drop the misspelled "settings_id" key (the app - never reads it), strip setting_id from base profiles (only instantiated - presets carry one), and set generate_preset_setting_id(vendor, type, name) on - instantiated presets — except BBL's, which keep their authoritative "G*" - cloud ids. `changed_paths`, when a set is passed, collects the files that - changed. Returns (files_changed, errors). - """ - _utf8_console() - profiles_dir = str(profiles_dir) - errors = 0 - names = list_profile_dirs(profiles_dir) - if vendors is not None: - wanted = set(vendors) - unknown = sorted(wanted - set(names)) - if unknown: - for v in unknown: - print_error(f'unknown vendor "{v}" in {profiles_dir}') - return 0, len(unknown) - names = [v for v in names if v in wanted] - for v in sorted(wanted & RESERVED_VENDORS): - print_info(f'{v} keeps its authoritative "G*" setting_ids; only its base ' - f"declarations are stripped") - - verb = "would " if dry_run else "" - files_changed = 0 - counts = {"typos": 0, "stripped": 0, "assigned": 0} - for vendor in names: - for path, type_name in iter_profile_files(os.path.join(profiles_dir, vendor)): - try: - with open(path, "rb") as f: - data = json.loads(f.read().decode("utf-8-sig")) - if not isinstance(data, dict): - raise ValueError("top level is not a JSON object") - except (OSError, ValueError) as e: - print_error(f"unreadable profile {path}: {e}") - errors += 1 - continue - - sid = data.get("setting_id") - # Strictly "true", exactly as orca_extra_profile_check.py tests it: - # a preset the validator calls a base profile must not be given an id - # here, or the two would fight over it forever. - instantiated = data.get("instantiation") == "true" - edits = [] # (counter key, description, edit function) - if "settings_id" in data: - edits.append(("typos", 'drop the misspelled "settings_id"', - lambda text: delete_key_line(text, "settings_id"))) - typo = data["settings_id"] - if (vendor in RESERVED_VENDORS and instantiated and sid is None - and isinstance(typo, str) and typo): - # A reserved vendor's ids are authoritative, so there is no - # formula to fall back on: correct the key and keep the - # value, or the drop would leave an instantiated preset with - # no setting_id and nothing able to give it one. - edits.append(("assigned", 'restore its value as "setting_id"', - lambda text, new=typo: insert_setting_id(text, new))) - if not instantiated: - if sid is not None: - edits.append(("stripped", "strip the base profile's setting_id", - lambda text, old=sid: delete_key_line( - text, "setting_id", old))) - elif vendor not in RESERVED_VENDORS: - name = data.get("name") - if not name: - # Report and carry on: an edit already queued for this file - # (a misspelled key) is still worth applying. - print_error(f'instantiated preset has no "name": {path}') - errors += 1 - else: - new_id = generate_preset_setting_id(vendor, type_name, name) - if sid is None: - edits.append(("assigned", "insert the setting_id", - lambda text, new=new_id: insert_setting_id(text, new))) - elif sid != new_id: - edits.append(("assigned", "replace the setting_id", - lambda text, new=new_id, old=sid: replace_key_value( - text, "setting_id", new, old))) - if not edits: - continue - - def apply(text, _edits=edits, _path=path): - for _key, what, edit in _edits: - text, n = edit(text) - if n == 0: - raise RuntimeError(f"could not {what} in {_path}") - return text, len(_edits) - - try: - _edit_profile(path, apply, dry_run) - except (OSError, RuntimeError, ValueError) as e: - print_error(str(e)) - errors += 1 - continue - files_changed += 1 - if changed_paths is not None: - changed_paths.add(os.path.normpath(path)) - for key, _what, _edit in edits: - counts[key] += 1 - rel = os.path.relpath(path, profiles_dir).replace(os.sep, "/") - print_info(f"{verb}update {rel}: " - f"{', '.join(what for _key, what, _edit in edits)}") - - print_info(f'misspelled "settings_id" dropped : {counts["typos"]}') - print_info(f'base setting_ids stripped : {counts["stripped"]}') - print_info(f'setting_ids assigned : {counts["assigned"]}') - return files_changed, errors - - -# --------------------------------------------------------------------------- -# CLI -# --------------------------------------------------------------------------- - -EXAMPLES = """\ -examples: - orca_id_tool.py --generate - give every profile the id its identity mints, in every vendor bundle - orca_id_tool.py --dry-run - preview exactly that; writes nothing - orca_id_tool.py --generate --setting-id - setting_id only (filament, process and machine presets) - orca_id_tool.py --generate --filament-id --vendor Creality --vendor Elegoo - filament_id only, and only in those two bundles - orca_id_tool.py --check - validate filament_id state against the snapshot (the filament_id half - of scripts/orca_extra_profile_check.py, which is what CI runs) - orca_id_tool.py --update-snapshot - re-record the sanctioned filament_id state after a --generate run - -a maintenance round: - --dry-run -> --generate -> --update-snapshot -> --check -> commit the diff -""" - - -def build_parser(): - parser = argparse.ArgumentParser( - prog="orca_id_tool.py", allow_abbrev=False, - formatter_class=argparse.RawDescriptionHelpFormatter, - description="Assign and validate the deterministic ids of OrcaSlicer system\n" - "profiles: the per-product filament_id and the per-preset setting_id.\n" - "\n" - "Both are pure functions of the profile's own identity, so this tool\n" - "never invents an id: it writes the one the rules already imply, and\n" - "leaves a conforming tree alone.", - epilog=EXAMPLES) - modes = parser.add_argument_group("modes (pick one; no mode prints this help)") - modes.add_argument("--generate", action="store_true", - help="write the id every profile should carry: filament_id from " - "each filament's (filament_vendor, filament_type, name) " - "triple, setting_id from each preset's (vendor, type, name). " - "Idempotent and byte-preserving") - modes.add_argument("--check", action="store_true", - help="validate filament_id state against " - "scripts/filament_id_snapshot.json; exit nonzero on errors") - modes.add_argument("--update-snapshot", action="store_true", - help="re-record the sanctioned filament_id state in " - "scripts/filament_id_snapshot.json; commit the diff for " - "maintainer review") - narrow = parser.add_argument_group("narrowing --generate") - narrow.add_argument("--filament-id", action="store_true", - help="write filament_id only, skipping setting_id") - 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 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") - parser.add_argument("--profiles", default=PROFILES_DIR, - help="profiles directory (default: resources/profiles)") - parser.add_argument("--snapshot", default=None, metavar="PATH", - help="the sanctioned filament_id state of that tree (default: " - "scripts/filament_id_snapshot.json, which describes " - "resources/profiles and no other tree)") - return parser - - -def main(argv=None): - _utf8_console() - argv = sys.argv[1:] if argv is None else list(argv) - parser = build_parser() - if not argv: - parser.print_help() - return 0 - args = parser.parse_args(argv) - - modes = [flag for flag, on in (("--generate", args.generate), - ("--check", args.check), - ("--update-snapshot", args.update_snapshot)) if on] - if len(modes) > 1: - parser.error(f"{' and '.join(modes)} cannot be combined; pick one mode") - if args.filament_id and args.setting_id: - parser.error("--filament-id and --setting-id each exclude the other; " - "pass neither to write both") - narrowing = [flag for flag, on in (("--filament-id", args.filament_id), - ("--setting-id", args.setting_id), - ("--vendor", bool(args.vendor))) if on] - if not modes: - if args.dry_run: - mode = "--generate" # --dry-run previews the writing mode - elif narrowing: - parser.error(f"{', '.join(narrowing)} narrows --generate; " - f"add --generate (or --dry-run to preview it)") - else: - parser.print_help() - return 0 - else: - mode = modes[0] - if narrowing and mode != "--generate": - parser.error(f"{', '.join(narrowing)} applies to --generate, not {mode}") - - snapshot_path = args.snapshot or SNAPSHOT_PATH - if (args.snapshot is None and mode in ("--check", "--update-snapshot") - and os.path.abspath(args.profiles) != os.path.abspath(PROFILES_DIR)): - # The repo snapshot is the sanctioned state of resources/profiles alone: - # checking another tree against it is meaningless, and re-recording one - # into it would overwrite the tracked file with a foreign tree's state. - parser.error(f"{mode} reads and writes the sanctioned state of the tree it is " - f"given, so --profiles needs --snapshot PATH for that tree too") - - if mode == "--check": - 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 - - if mode == "--update-snapshot": - return update_snapshot(args.profiles, snapshot_path, dry_run=args.dry_run) - - vendors = sorted(set(args.vendor)) or None - if vendors: - unknown = sorted(set(vendors) - set(list_profile_dirs(args.profiles))) - if unknown: - for v in unknown: - print_error(f'unknown vendor "{v}" in {args.profiles}') - return 1 - - # Both by default. filament_id runs first so its keys are in place before the - # setting_id pass reads the files back. - do_filament = args.filament_id or not args.setting_id - do_setting = args.setting_id or not args.filament_id - changed = set() # one file the two passes both touch is still one file - filament_files = errors = 0 - if do_filament: - filament_files, e = generate_filament_ids( - args.profiles, vendors, args.dry_run, changed) - errors += e - if do_setting: - _n, e = generate_setting_ids(args.profiles, vendors, args.dry_run, changed) - errors += e - - summary = (f"dry run: {len(changed)} file(s) would change; nothing written" - if args.dry_run else f"{len(changed)} file(s) changed") - if errors: - print_error(f"{summary}; {errors} error(s)") - else: - print_success(summary) - if filament_files and not args.dry_run: - # A filament_id write may or may not move the sanctioned state (an id - # repaired back to the value the snapshot already records does not), so - # regenerate and let the diff — empty or not — say. - print_warning('now run "python scripts/orca_id_tool.py --update-snapshot" ' - "and commit any resulting diff for maintainer review") - return 1 if errors else 0 - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/scripts/orca_profile_tool.py b/scripts/orca_profile_tool.py new file mode 100755 index 0000000000..8c2b4c1854 --- /dev/null +++ b/scripts/orca_profile_tool.py @@ -0,0 +1,2618 @@ +#!/usr/bin/env python3 +""" +Every maintenance job for the OrcaSlicer system profile tree, in one tool. + +usage: python scripts/orca_profile_tool.py [options] + +commands: + check validate the whole tree -- what CI runs + generate-id write the filament_id / setting_id each profile's identity implies + normalize rewrite profile files into their canonical shape + trim delete profile files no .json list references + update-index regenerate the *_list sections of .json + update-snapshot re-record scripts/filament_id_snapshot.json + +options shared by several commands: + --vendor VENDOR act on one vendor bundle only; repeatable, empty means all + (every command but update-snapshot) + --profile-type TYPE one of machine_model/process/filament/machine; repeatable + (normalize, trim, update-index) + --dry-run report what would change and write nothing (every command + that writes) + --profiles DIR act on another profile tree (default: resources/profiles); + check and update-snapshot then need --snapshot PATH too, + since the snapshot describes resources/profiles alone + +After adding, renaming or deleting profile files, run: + normalize -> trim -> update-index -> generate-id -> update-snapshot -> check +Each step feeds the next: normalize writes the "type" update-index files a +profile by, and trim judges against the index update-index is about to rebuild. + +Run from anywhere; "python scripts/orca_profile_tool.py --help" repeats this list +and "... --help" documents one command in full. + +The two id rules are the heart of it. Both ids are pure functions of the thing +they name, so nothing here is ever invented: the tool only writes the id the +rules below already imply, and a tree that already satisfies them is left +untouched. + +filament_id policy (see docs/HLSD/filament_id.md): + * 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///") ) + 8 chars total, which satisfies the AMS length limit. Nobody invents ids by + 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. + * EVERY filament profile carries a minted id, with no exceptions and no + spellings held back for anyone. Ids that other systems compose for their own + purposes are simply not mints, so no system profile can carry one and there + is nothing to reserve: Bambu's GF* catalog ids (the generated + resources/printers/bambu_filament_ids.json records the correspondence, which + the app applies at the printer boundary), the QD_* ids a Qidi box composes at + runtime, and the P+7-hex ids CreatePresetsDialog.cpp gives user-created + filaments all fail the format rule like any other stray value. + * 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. + +setting_id policy (see AGENTS.md "Critical Constraints"): + * setting_id is a PRESET id, a pure function of the preset's identity: + setting_id = base62_16( uuid5(NAMESPACE, "//") ) + The same value is recomputed on the fly by the C++ app + (Slic3r::generate_preset_setting_id); the two MUST stay byte-identical. + Uniqueness is therefore automatic: two presets collide only if they share + vendor + type + name, which "check" flags. + * Only instantiated presets (instantiation == "true") carry a setting_id; + base / template profiles do not. + * Bambu (BBL) owns the authoritative "G*" setting_id space and is the only + reserved vendor: its setting_ids are never rewritten, which keeps + Bambu-synced presets backward compatible. That exemption is setting_id's + alone — BBL's filament_ids are minted like every other vendor's. + +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. filament_vendor / filament_type resolve the same way. +""" + +import argparse +import json +import os +import posixpath +import re +import sys +import uuid +from collections import Counter, defaultdict +from pathlib import Path + +# The id namespace baked into both Python and C++ (Slic3r::generate_preset_setting_id). +# Dedicated, distinct from the cloud namespace (f47ac10b-...) so the two id spaces never +# coincide; it is the root of BOTH id rules below — never change it. +NAMESPACE = uuid.UUID("c1f4d9e2-7a3b-5c8d-9e0f-1a2b3c4d5e6f") +ALPHABET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" +SETTING_ID_LENGTH = 16 + +# Dedicated namespace for filament_id, derived from the setting_id namespace above. +# 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") +# 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")) + +OFL = "OrcaFilamentLibrary" + +# Bambu (BBL) is the only vendor exempt from the setting_id rule: it keeps its +# authoritative "G*" cloud ids. No vendor is exempt from the filament_id rule. +RESERVED_VENDORS = {"BBL"} + +# The profile types that carry a setting_id; the subdir name is also the type +# name, matching Preset::get_type_string() on the C++ side. +PROFILE_SUBDIRS = ("filament", "process", "machine") + +# The profile kinds a .json indexes, each under its "_list" section. +# NOT the same thing as PROFILE_SUBDIRS above, and deliberately not merged with it: +# machine_model is an index section whose files live in the machine/ directory, and +# this order is the order the sections are rebuilt (and therefore written) in. +PROFILE_TYPES = ("machine_model", "process", "filament", "machine") + +# Data files that sit under a vendor bundle but are not presets: no name, no type. +NON_PROFILE_FILES = {"filaments_color_codes.json", "cli_config.json"} + +# Settings dropped from PrintConfig.cpp. Reported by "check --obsolete-keys". +OBSOLETE_KEYS = { + "acceleration", "scale", "rotate", "duplicate", "duplicate_grid", + "bed_size", "print_center", "g0", "wipe_tower_per_color_wipe", + "support_sharp_tails", "support_remove_small_overhangs", "support_with_sheath", + "tree_support_collision_resolution", "tree_support_with_infill", + "max_volumetric_speed", "max_print_speed", "support_closing_radius", + "remove_freq_sweep", "remove_bed_leveling", "remove_extrusion_calibration", + "support_transition_line_width", "support_transition_speed", "bed_temperature", + "bed_temperature_initial_layer", "can_switch_nozzle_type", "can_add_auxiliary_fan", + "extra_flush_volume", "spaghetti_detector", "adaptive_layer_height", + "z_hop_type", "z_lift_type", "bed_temperature_difference", "long_retraction_when_cut", + "retraction_distance_when_cut", "extruder_type", "internal_bridge_support_thickness", + "extruder_clearance_max_radius", "top_area_threshold", "reduce_wall_solid_infill", + "filament_load_time", "filament_unload_time", "smooth_coefficient", + "overhang_totally_speed", "silent_mode", "overhang_speed_classic" +} + +# Keys renamed at some point, whose old and new spellings must never co-exist: +# the loader would pick one arbitrarily. extruder_clearance_radius vs +# extruder_clearance_max_radius decides toolhead collision avoidance. +CONFLICT_KEYS = [ + ["extruder_clearance_radius", "extruder_clearance_max_radius"], +] + +# Options the config system stores as vectors; a scalar there is a silent misload. +VECTOR_KEYS = { + "filament_type", +} + +OF_ID_RE = re.compile(r"^OF[0-9A-Za-z]{6}$") +# 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?@.*$") +# A JSON string literal, for the byte-preserving key edits. +_JSON_STR = r'"(?:[^"\\]|\\.)*"' + +GENERATE_CMD = "python scripts/orca_profile_tool.py generate-id" +SETTING_ID_CMD = '"python scripts/orca_profile_tool.py generate-id --setting-id"' +UPDATE_HINT = 'run "python scripts/orca_profile_tool.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' +NORMALIZE_HINT = 'try "python scripts/orca_profile_tool.py normalize" to fix common issues automatically' + +# What to do about a defect check found, keyed by defect. check prints each of these +# ONCE for the whole run, after the files themselves: a bundle that forgot to index +# twenty presets needs the remedy spelled out once, not twenty times over the one list +# a maintainer has to read. +REMEDY_HINTS = { + "unindexed": 'unreferenced file(s) above: delete them, or run "python scripts/' + 'orca_profile_tool.py update-index" to add them to their .json', + "unindexable": 'unreferenced file(s) above declare no profile type: run "python ' + 'scripts/orca_profile_tool.py normalize" to write one so ' + "update-index can place them, or delete them", + "unnormalized": 'profile file(s) above are not what "python scripts/' + 'orca_profile_tool.py normalize" writes: run it and commit the result', + "stale_index": 'vendor index(es) above are not what "python scripts/' + 'orca_profile_tool.py update-index" writes: run it and commit the ' + "result", +} + + +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 _base62_tail(n, length): + """The low `length` base62 digits of n, most-significant first. + + The shared tail of both id rules. Its output bytes are pinned by the C++ + golden vectors (tests/libslic3r/test_preset_setting_id.cpp) and by the + filament_id snapshot — never change it. + """ + digits = [] + for _ in range(length): + digits.append(ALPHABET[n % 62]) + n //= 62 + return "".join(reversed(digits)) + + +def generate_preset_setting_id(vendor, type_name, name): + """Deterministic 16-char base62 setting_id for a preset. + + input = f"{vendor}/{type_name}/{name}"; u = uuid5(NAMESPACE, input); + id = the low SETTING_ID_LENGTH base62 digits of int(u.bytes, "big"), + most-significant first. Kept byte-identical to the C++ + Slic3r::generate_preset_setting_id. + """ + u = uuid.uuid5(NAMESPACE, f"{vendor}/{type_name}/{name}") + return _base62_tail(int.from_bytes(u.bytes, "big"), SETTING_ID_LENGTH) + + +def base_name(name): + """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, filament_name): + """Deterministic "OF" + 6-char base62 filament_id for a filament product. + + 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}" + u = uuid.uuid5(FILAMENT_ID_NAMESPACE, key) + return "OF" + _base62_tail(int.from_bytes(u.bytes, "big"), FILAMENT_ID_LENGTH) + + +# --------------------------------------------------------------------------- +# Tree loading + loader-faithful effective-id resolution +# --------------------------------------------------------------------------- + +class DuplicateKeyError(ValueError): + """A profile declares one key twice; json would silently keep the last.""" + + +def _no_duplicates_hook(pairs): + seen = {} + for key, value in pairs: + if key in seen: + raise DuplicateKeyError(f"Duplicate key detected: {key}") + seen[key] = value + return seen + + +def load_json(path, detect_duplicates=False): + """Parse a profile file. BOM-tolerant, because some vendors ship one. + + detect_duplicates is opt-in rather than always on: only the checks that have + always had it use it, since switching it on everywhere would newly reject files + the tree has always accepted, and switching it off would lose real coverage. + """ + with open(path, "r", encoding="utf-8-sig") as f: + return json.load(f, object_pairs_hook=_no_duplicates_hook if detect_duplicates + else None) + + +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 list_profile_dirs(profiles_dir): + """Every vendor directory under the tree, index or not. + + What the setting_id pass and the per-vendor checks walk: setting_id is a + per-file property, so a bundle whose index has not landed yet must still be + assignable — otherwise check flags files generate-id refuses to touch. + (filament_id is driven by each bundle's filament_list instead, hence + list_vendor_names above.) + """ + profiles_dir = str(profiles_dir) + return sorted(d for d in os.listdir(profiles_dir) + if os.path.isdir(os.path.join(profiles_dir, d))) + + +def iter_profile_files(vendor_dir): + """Yield (json path, type) under a vendor bundle, in a deterministic order.""" + for sub in PROFILE_SUBDIRS: + base = os.path.join(vendor_dir, sub) + if not os.path.isdir(base): + continue + for root, dirs, files in os.walk(base): + dirs.sort() # deterministic traversal across filesystems + for name in sorted(files): + if name.endswith(".json"): + yield os.path.join(root, name), sub + + +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 [], + "filament_vendor": data.get("filament_vendor"), + "filament_type": data.get("filament_type"), + "renamed_from": data.get("renamed_from"), + } + return presets, errors + + +def resolve_filament_id(name, filaments, ofl_filaments, seen=None, in_ofl=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. + + 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"): + 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 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, filament name).""" + return (resolve_filament_field(name, "filament_vendor", filaments, ofl_filaments), + resolve_filament_field(name, "filament_type", filaments, ofl_filaments), + base_name(name)) + + +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/Filament" 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, _entry = resolve_filament_id(rec["name"], filaments, ofl_filaments) + rec["eff_filament_id"] = eff + rec["id_source"] = src + vendors[vendor] = filaments + + # 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 + # 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 + missing_effective = [] # (vendor, name, file) instantiated presets resolving no id + 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 + 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) + declared_ids.setdefault(vendor, set()).add(fid) + ids.setdefault(fid, set()) + declarer_triples.append((vendor, rec, fid, triple)) + triples.setdefault(fid, set()).add(triple) + filament_triples.setdefault( + (vendor, base_name(rec["name"])), {}).setdefault( + triple, []).append(rec["name"]) + 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 not rec.get("filament_id") and OF_ID_RE.match(eff): + inherited.append((vendor, rec, eff, triple)) + + # Cross-bundle triple divergence (check 4, 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, filament_name), tmap in filament_triples.items(): + name_bundles.setdefault(filament_name, {})[vendor] = frozenset(tmap) + cross_bundle_triples = [ + (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 + ] + + 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, + "missing_effective": sorted(missing_effective), + "inherited": inherited, + "triples": {fid: sorted(list(t) for t in ts) for fid, ts in triples.items()}, + "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}, + } + + +# --------------------------------------------------------------------------- +# Snapshot IO +# --------------------------------------------------------------------------- + +def snapshot_from_analysis(analysis): + """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): + """Return the snapshot dict, or None when the file does not exist.""" + if not os.path.exists(path): + return None + data = load_json(path) + data.setdefault("ids", {}) + return data + + +def write_snapshot(path, obj): + """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) + f.write("\n") + + +# --------------------------------------------------------------------------- +# filament_id validation +# --------------------------------------------------------------------------- + +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 + match ^OF[0-9A-Za-z]{6}$. No exceptions: not the snapshot, not BBL. + 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, 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. 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. + 5. 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 + 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 + 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 OF_ID_RE.match(fid): + continue + print_error( + f'filament_id "{fid}" ({vendor}) is not a minted "OF" id; new ' + f'filament ids must come from "{GENERATE_CMD}"') + errors += 1 + + # -- 2. snapshot equality (both directions) ----------------------------- + tree_triples = analysis["triples"] + for fid in sorted(tree_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 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( + f'filament_id stability: snapshot id "{fid}" vanished from the tree; ' + f"{UPDATE_HINT}") + errors += 1 + continue + 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 + + # -- 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"])): + 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'"{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["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 "{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 + ofl_map = analysis["vendors"].get(OFL, {}) + for vendor, name, file in analysis["missing_effective"]: + 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; " + f'run "{GENERATE_CMD}" (expected id for filament ' + 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. 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 + 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'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 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'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") + + # -- 6. 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 + 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") + # 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): + 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 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}') + 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 + + +# --------------------------------------------------------------------------- +# setting_id validation +# --------------------------------------------------------------------------- + +def check_setting_id_uniqueness(profiles_dir): + """Validate setting_id across every vendor. Returns the error count. + + 1. Every instantiated preset must HAVE a setting_id. (all vendors) + 2. A stored setting_id must equal generate_preset_setting_id(vendor, type, + name); a stale value means the JSON was edited without rerunning + generate-id. (all vendors EXCEPT the reserved ones, i.e. BBL) + 3. Base profiles (instantiation != "true") must not carry a setting_id. + 4. setting_id must be globally unique - no two files may share one. + 5. No profile may use the misspelled key "settings_id". + + Cross-vendor by nature (rule 4), so it always runs over the whole tree, never + narrowed by --vendor. BBL keeps its authoritative "G*" cloud ids, which the + formula does not produce, so only rule 2 is skipped for it; it is still held to + presence, uniqueness, base-no-id and the typo check. + """ + errors = 0 + owners = {} # setting_id -> [relative path], every vendor + for vendor in list_profile_dirs(profiles_dir): + formula_exempt = vendor in RESERVED_VENDORS + for path, sub in iter_profile_files(os.path.join(profiles_dir, vendor)): + try: + data = load_json(path) + except (ValueError, OSError): + # Parse failures are reported by the per-vendor checks, which walk + # the same files; reporting them here too would double-count. + continue + if not isinstance(data, dict): + continue + rel = os.path.relpath(path, profiles_dir).replace(os.sep, "/") + # Rule 5: catch the misspelled "settings_id" key. + if "settings_id" in data: + errors += 1 + print_error( + f'profile {rel} uses the misspelled key "settings_id" ' + f'(should be "setting_id"); run {SETTING_ID_CMD}') + sid = data.get("setting_id") + if data.get("instantiation") != "true": + # Rule 3: base/template profiles must not carry a setting_id. + if sid: + errors += 1 + print_error( + f'base profile {rel} (instantiation != "true") must not have a ' + f'setting_id ("{sid}"); run {SETTING_ID_CMD}') + continue + # Rule 1: every instantiated preset must have a setting_id. + if not sid: + errors += 1 + print_error(f"instantiated preset {rel} is missing a setting_id; " + f"run {SETTING_ID_CMD}") + continue + # Rule 2: the stored id must match the deterministic rule. + if not formula_exempt: + expected = generate_preset_setting_id(vendor, sub, data.get("name", "")) + if sid != expected: + errors += 1 + print_error( + f'setting_id "{sid}" in {rel} does not match the expected ' + f'"{expected}" for {vendor}/{sub}/{data.get("name", "")}; ' + f"run {SETTING_ID_CMD}") + continue + owners.setdefault(sid, []).append(rel) + + # Rule 4: a setting_id shared by two files is an error. For managed vendors that + # means a duplicate vendor/type/name; for BBL a copy-pasted id. + for sid, locs in sorted(owners.items()): + if len(locs) < 2: + continue + errors += 1 + print_error(f'setting_id "{sid}" is shared by {len(locs)} files ({sorted(locs)}); ' + f"setting_id must be globally unique") + return errors + + +# --------------------------------------------------------------------------- +# Per-vendor validation +# --------------------------------------------------------------------------- +# These walk one vendor bundle each and are what --vendor narrows. They use +# pathlib where the originals did; the check driver converts at the boundary. + +def _vendor_json_files(vendor_path): + """Every .json under a vendor bundle, deepest-last, in a stable order.""" + return sorted(vendor_path.rglob("*.json")) + + +def check_preset_name_uniqueness(profiles_dir, vendor): + """No two profiles in a bundle may share a type and a name, indexed or not. + + The loader resolves "inherits" through a per-type map of the bundle's profiles + (PresetBundle.cpp load_subfiles), and std::map::emplace keeps the first + insertion: a second file claiming the name is silently dropped, and which one + wins is nothing but index order. An unindexed twin counts too - it is one + sub_path edit away from deciding that silently. + + Names are per bundle, never global: base profiles reuse them across vendors by + design (fdm_process_common exists in 61 of them). Returns the error count. + """ + errors = 0 + vendor_dir = os.path.join(profiles_dir, vendor) + claimed = defaultdict(list) # (type, name) -> [sub_path] + for path, _sub in iter_profile_files(vendor_dir): + if os.path.basename(path) in NON_PROFILE_FILES: + continue + try: + data = load_json(path) + except (ValueError, OSError): + # Parse failures are reported by the checks that walk the same files; + # reporting them here too would double-count. + continue + if not isinstance(data, dict) or data.get("type") not in PROFILE_TYPES: + continue + if not data.get("name"): + continue # a nameless profile is check_filament_compatible_printers' + claimed[(data["type"], data["name"])].append( + posixpath.normpath(os.path.relpath(path, vendor_dir).replace(os.sep, "/"))) + + for (profile_type, name), sub_paths in sorted(claimed.items()): + if len(sub_paths) < 2: + continue + errors += 1 + print_error(f"{vendor} has {len(sub_paths)} {profile_type} profiles named " + f'"{name}" ({", ".join(sorted(sub_paths))}); a bundle holds one ' + f"profile per name, so the loader keeps whichever it reaches first " + f"and silently drops the rest") + return errors + + +def check_filament_compatible_printers(profiles_dir, vendor): + """Every instantiated filament preset must declare a non-empty compatible_printers. + + Orca resolves compatible_printers from the preset itself; inheriting it is not + supported on the Profile page. In the OrcaFilamentLibrary it is optional instead: + a profile without it is generic and offered on every printer, while one that + lists printers supersedes the generic profile there. + + Returns the error count. + """ + error = 0 + vendor_path = Path(profiles_dir) / vendor / "filament" + if not vendor_path.exists(): + return 0 + + profiles = [] + for file_path in _vendor_json_files(vendor_path): + if file_path.name in NON_PROFILE_FILES: + continue + rel = file_path.relative_to(profiles_dir) + try: + data = load_json(file_path, detect_duplicates=True) + except DuplicateKeyError as e: + print_error(f"Duplicate key error in {rel}: {e}") + error += 1 + continue + except (ValueError, OSError) as e: + print_error(f"Error processing {rel}: {e}") + error += 1 + continue + + profile_name = data.get("name") + if not profile_name: + print_error(f"'name' missing in {rel}") + error += 1 + continue + # Two files claiming this name is check_preset_name_uniqueness' to report, + # over the whole bundle rather than the filament/ directory alone. + profiles.append((rel, data)) + + if vendor == OFL: + return error + + for rel, data in profiles: + if str(data.get("instantiation", "")).lower() != "true": + continue + compatible_printers = data.get("compatible_printers") + if not compatible_printers: + print_error(f"'compatible_printers' missing in {rel}") + error += 1 + return error + + +def load_available_filament_profiles(profiles_dir, vendor): + """The set of filament preset names a vendor bundle offers.""" + profiles = set() + vendor_path = Path(profiles_dir) / vendor / "filament" + if not vendor_path.exists(): + return profiles + + for file_path in _vendor_json_files(vendor_path): + try: + data = load_json(file_path) + except (ValueError, OSError) as e: + print_error(f"Error loading filament profile " + f"{file_path.relative_to(profiles_dir)}: {e}") + continue + if isinstance(data, dict) and "name" in data: + profiles.add(data["name"]) + return profiles + + +def check_machine_default_materials(profiles_dir, vendor): + """Every default material a machine names must exist, in the bundle or in OFL. + + Returns (errors, warnings); the warning is the bundle having no machine/ at all. + """ + error_count = 0 + machine_dir = Path(profiles_dir) / vendor / "machine" + if not machine_dir.exists(): + print_warning(f"No machine profiles found for vendor: {vendor}") + return 0, 1 + + available = (load_available_filament_profiles(profiles_dir, vendor) + | load_available_filament_profiles(profiles_dir, OFL)) + + for file_path in _vendor_json_files(machine_dir): + rel = file_path.relative_to(profiles_dir) + try: + data = load_json(file_path) + except (ValueError, OSError) as e: + print_error(f"Error processing machine profile {rel}: {e}") + error_count += 1 + continue + + default_materials = data.get("default_materials") or data.get( + "default_filament_profile") + if not default_materials: + continue + if isinstance(default_materials, list): + materials = default_materials + elif ";" in default_materials: + # A ";"-separated list; a trailing separator leaves an empty segment, + # which is formatting noise rather than a missing profile. + materials = [m.strip() for m in default_materials.split(";") if m.strip()] + else: + materials = [default_materials] + for material in materials: + if material not in available: + print_error(f"Missing filament profile: '{material}' referenced in {rel}") + error_count += 1 + return error_count, 0 + + +def check_name_consistency(profiles_dir, vendor): + """Each .json entry must name the preset its sub_path file declares. + + A preset loads only if the two agree, so a mismatch silently drops it. + Returns (errors, warnings); the warning is the bundle having no index at all. + """ + error_count = 0 + profiles_path = Path(profiles_dir) + vendor_dir = profiles_path / vendor + vendor_file = profiles_path / (vendor + ".json") + if not vendor_file.exists(): + print_warning(f"No profiles found for vendor: {vendor} at {vendor_file}") + return 0, 1 + + try: + data = load_json(vendor_file) + except (ValueError, OSError) as e: + print_error(f"Error loading vendor profile {vendor_file.name}: {e}") + return 1, 0 + + for section in ("filament_list", "machine_model_list", "machine_list", "process_list"): + for child in data.get(section, []): + name_in_vendor = child.get("name") + sub_path = child.get("sub_path") + if not name_in_vendor or not sub_path: + print_error(f"{section} entry without a name/sub_path in {vendor}.json: " + f"{child}") + error_count += 1 + continue + sub_file = vendor_dir / sub_path + if not sub_file.exists(): + print_error(f"Missing sub profile: '{sub_path}' declared in {vendor}.json") + error_count += 1 + continue + try: + sub_data = load_json(sub_file) + except (ValueError, OSError) as e: + print_error(f"Error loading profile {sub_file.relative_to(profiles_path)}: {e}") + error_count += 1 + continue + + name_in_sub = sub_data.get("name") + if name_in_sub == name_in_vendor: + continue + print_error(f"{section} name mismatch: required '{name_in_vendor}' in " + f"{vendor}.json but found '{name_in_sub}' in " + f"{sub_file.relative_to(profiles_path)}") + error_count += 1 + return error_count, 0 + + +def check_index_coverage(profiles_dir, vendor): + """Every profile file in a bundle must be listed in its .json. + + The mirror of check_name_consistency, which walks the index and looks for the + files: this walks the files and looks for them in the index. The loader reads the + sub_paths listed there and nothing else, so a file no list names is dead weight + that looks live - it sits in the bundle, gets edited and reviewed, and never + reaches a single user. + + Returns (errors, gaps), gaps counting the files per REMEDY_HINTS category so + the caller can print each remedy once for the whole run instead of once per file. + """ + errors = 0 + gaps = Counter() + vendor_dir = os.path.join(profiles_dir, vendor) + try: + library = load_json(os.path.join(profiles_dir, vendor + ".json")) + except (ValueError, OSError): + # A bundle with no readable index at all is check_name_consistency's to + # report; calling every file in it unindexed would only bury that. + return 0, gaps + + listed = set() + for section in PROFILE_TYPES: + for entry in library.get(section + "_list", []): + if entry.get("sub_path"): + # Index entries are hand-written; "filament/./X.json" names the same + # file as "filament/X.json" and must not read as unlisted. + listed.add(posixpath.normpath(entry["sub_path"].replace("\\", "/"))) + + for path, _sub in iter_profile_files(vendor_dir): + if os.path.basename(path) in NON_PROFILE_FILES: + continue # data files carry no name or type and are never indexed + sub_path = posixpath.normpath( + os.path.relpath(path, vendor_dir).replace(os.sep, "/")) + if sub_path in listed: + continue + try: + data = load_json(path) + except (ValueError, OSError): + data = None + errors += 1 + if isinstance(data, dict) and data.get("type") in PROFILE_TYPES: + gaps["unindexed"] += 1 + print_error(f"{vendor}/{sub_path}: no {vendor}.json list references it, so " + f"it never loads") + else: + gaps["unindexable"] += 1 + print_error(f"{vendor}/{sub_path}: no {vendor}.json list references it and " + f"it declares no profile type") + return errors, gaps + + +def check_filament_id_length(profiles_dir, vendor): + """No indexed filament preset may declare a filament_id longer than 8 chars. + + Longer ids break the AMS. Runs for every vendor alike (BBL included: the id + format is what matters, not the vendor). Every .json under the bundle's + filament directory is still parsed through the duplicate-key hook, so that + coverage is unchanged; only the length rule itself is scoped to presets the + index (.json filament_list) actually references. A file the index does + not reference never loads, so its filament_id cannot break anything -- and some + vendors (e.g. SeeMeCNC) ship such orphaned files pre-dating this check. + + Returns the error count. + """ + error = 0 + profiles_path = Path(profiles_dir) + vendor_path = profiles_path / vendor / "filament" + if not vendor_path.exists(): + return 0 + + referenced = set() + vendor_file = profiles_path / (vendor + ".json") + if vendor_file.exists(): + try: + index = load_json(vendor_file) + for entry in index.get("filament_list", []): + sub_path = entry.get("sub_path") + if sub_path: + referenced.add((profiles_path / vendor / sub_path).resolve()) + except (ValueError, OSError) as e: + print_error(f"Error loading vendor profile {vendor_file.name}: {e}") + error += 1 + + for file_path in _vendor_json_files(vendor_path): + rel = file_path.relative_to(profiles_path) + try: + data = load_json(file_path, detect_duplicates=True) + except DuplicateKeyError as e: + print_error(f"Duplicate key error in {rel}: {e}") + error += 1 + continue + except (ValueError, OSError) as e: + print_error(f"Error processing {rel}: {e}") + error += 1 + continue + + filament_id = data.get("filament_id") + if filament_id and len(filament_id) > 8 and file_path.resolve() in referenced: + print_error(f'Filament id too long "{filament_id}": {rel}') + error += 1 + return error + + +def check_obsolete_keys(profiles_dir, vendor): + """Warn about settings PrintConfig.cpp no longer defines. Returns the count.""" + warn_count = 0 + profiles_path = Path(profiles_dir) + vendor_path = profiles_path / vendor / "filament" + if not vendor_path.exists(): + return 0 + + for file_path in _vendor_json_files(vendor_path): + rel = file_path.relative_to(profiles_path) + try: + data = load_json(file_path) + except (ValueError, OSError) as e: + print_warning(f"Error reading profile {rel}: {e}") + warn_count += 1 + continue + for key in data: + if key in OBSOLETE_KEYS: + print_warning(f"Obsolete key: '{key}' found in {rel}") + warn_count += 1 + return warn_count + + +def check_vector_type_keys(profiles_dir, vendor): + """Options the config system stores as vectors must be JSON arrays. + + `filament_type` must be ["PA-CF"], not "PA-CF". Returns the error count. + """ + error_count = 0 + profiles_path = Path(profiles_dir) + vendor_path = profiles_path / vendor + if not vendor_path.exists(): + return 0 + + for file_path in _vendor_json_files(vendor_path): + rel = file_path.relative_to(profiles_path) + try: + data = load_json(file_path) + except (ValueError, OSError) as e: + print_error(f"Error processing {rel}: {e}") + error_count += 1 + continue + if not isinstance(data, dict): + continue + for key in VECTOR_KEYS: + if key in data and not isinstance(data[key], list): + print_error(f"'{key}' must be an array in {rel}, " + f"got {type(data[key]).__name__}: {data[key]!r}") + error_count += 1 + return error_count + + +def check_conflict_keys(profiles_dir, vendor): + """A renamed option and its old spelling must not co-exist in one profile. + + The loader would pick one arbitrarily, and for extruder_clearance_radius vs + extruder_clearance_max_radius the wrong pick means a toolhead collision. + Returns (errors, warnings). + """ + error_count = 0 + profiles_path = Path(profiles_dir) + vendor_path = profiles_path / vendor + if not vendor_path.exists(): + print_warning(f"No profile directory for vendor: {vendor}") + return 0, 1 + + for file_path in _vendor_json_files(vendor_path): + rel = file_path.relative_to(profiles_path) + try: + data = load_json(file_path, detect_duplicates=True) + except DuplicateKeyError as e: + print_error(f"Duplicate key error in {rel}: {e}") + error_count += 1 + continue + except (ValueError, OSError) as e: + print_error(f"Error processing {rel}: {e}") + error_count += 1 + continue + if not isinstance(data, dict): + continue + for key_set in CONFLICT_KEYS: + if sum(1 for k in key_set if k in data) > 1: + print_error(f"Conflict keys {key_set} co-exist in {rel}") + error_count += 1 + return error_count, 0 + + +def check_normalized(profiles_dir, vendor): + """A bundle must already be what normalize and update-index write. + + Those two commands define a profile file's canonical shape - identifying keys + first, keys the slicer no longer reads gone, filament options that are vectors + written as vectors - and a .json's canonical lists, ordered parents-first + so the loader resolves every "inherits" in one pass. Running them over a + contributed bundle has to be a no-op; where it would not be, the file that was + reviewed is not the file that ships, and the next maintainer to run normalize + carries an unrelated diff into their own change. + + It asks the normalize and update-index sections below rather than restating what + they do, because a second definition of normal is free to drift from the one that + writes. + + The index half is skipped when the bundle has a file update-index cannot place, or + a preset name two files claim: the index is then unbuildable for a reason + check_index_coverage and check_preset_name_uniqueness already report on their own, + and "would be rebuilt" stacked on top of that is noise. + + Returns (errors, gaps), gaps counting per REMEDY_HINTS category. + """ + errors = 0 + gaps = Counter() + vendor_dir = os.path.join(profiles_dir, vendor) + + for path, sub in iter_profile_files(vendor_dir): + if os.path.basename(path) in NON_PROFILE_FILES: + continue # data files carry no name or type; normalize skips them too + try: + data = load_json(path) + except (ValueError, OSError): + continue # an unreadable file is check_name_consistency's to report + if not isinstance(data, dict): + continue + changes = _normalize_profile(data, sub) + if not changes: + continue + sub_path = os.path.relpath(path, vendor_dir).replace(os.sep, "/") + print_error(f"{vendor}/{sub_path}: normalize would {'; '.join(changes)}") + errors += 1 + gaps["unnormalized"] += 1 + + try: + library = load_json(os.path.join(profiles_dir, vendor + ".json")) + except (ValueError, OSError): + # A bundle with no readable index has nothing to compare against, and saying so + # again here would only bury check_name_consistency's report of it. + return errors, gaps + + sections, problems = build_index_sections(profiles_dir, vendor) + if sections is None or problems: + return errors, gaps + stale = sorted(s for s, entries in sections.items() if library.get(s) != entries) + if stale: + print_error(f"{vendor}.json: update-index would rebuild {', '.join(stale)}") + errors += 1 + gaps["stale_index"] += 1 + return errors, gaps + + +# --------------------------------------------------------------------------- +# check +# --------------------------------------------------------------------------- + +def check_profiles(profiles_dir=PROFILES_DIR, vendors=None, snapshot_path=SNAPSHOT_PATH, + materials=False, obsolete_keys=False): + """Validate the whole profile tree. Returns the error count. + + The per-vendor checks honour `vendors`; the setting_id and filament_id checks are + cross-vendor properties a narrowed run cannot answer, so they always cover the + whole tree. With no `vendors`, OrcaFilamentLibrary is left out of the per-vendor + pass: it is the shared base bundle, its filaments are generic by design, and they + are checked through the vendors that inherit them. Naming it explicitly checks it. + The normalization pass covers it either way - see the comment on that loop. + """ + print_info("Checking profiles ...") + errors_found = 0 + warnings_found = 0 + remedies = Counter() + + if vendors: + checked = list(vendors) + else: + checked = [v for v in list_profile_dirs(profiles_dir) if v != OFL] + + for vendor in checked: + errors_found += check_preset_name_uniqueness(profiles_dir, vendor) + errors_found += check_filament_compatible_printers(profiles_dir, vendor) + + if materials: + new_errors, new_warnings = check_machine_default_materials(profiles_dir, vendor) + errors_found += new_errors + warnings_found += new_warnings + + if obsolete_keys: + warnings_found += check_obsolete_keys(profiles_dir, vendor) + + new_errors, new_warnings = check_name_consistency(profiles_dir, vendor) + errors_found += new_errors + warnings_found += new_warnings + + new_errors, new_warnings = check_conflict_keys(profiles_dir, vendor) + errors_found += new_errors + warnings_found += new_warnings + + errors_found += check_vector_type_keys(profiles_dir, vendor) + errors_found += check_filament_id_length(profiles_dir, vendor) + + new_errors, gaps = check_index_coverage(profiles_dir, vendor) + errors_found += new_errors + remedies.update(gaps) + + # normalize and update-index know nothing of the OrcaFilamentLibrary exemption + # above - that bundle sits out the per-vendor pass because its filaments are + # generic by design, which says nothing about the shape of its files - so this pass + # takes its own vendor list. Unscoped that is the bundles with an index, exactly + # what those two commands take; a --vendor is passed through as given, so a bundle + # whose index has not landed yet still has its files held to what normalize writes. + for vendor in (vendors or list_vendor_names(profiles_dir)): + new_errors, gaps = check_normalized(profiles_dir, vendor) + errors_found += new_errors + remedies.update(gaps) + + for category, hint in REMEDY_HINTS.items(): + if remedies[category]: + print_warning(f"{remedies[category]} {hint}") + + # Cross-vendor checks: setting_id uniqueness and the whole filament_id state, + # both validated over the entire tree regardless of --vendor. + errors_found += check_setting_id_uniqueness(profiles_dir) + errors_found += check_filament_ids(profiles_dir, snapshot_path) + + print("\n==================== SUMMARY ====================") + print_info(f"Checked vendors : {len(checked)}") + if errors_found > 0: + print_error(f"Files with errors : {errors_found}") + else: + print_success("Files with errors : 0") + if warnings_found > 0: + print_warning(f"Files with warnings : {warnings_found}") + else: + print_success("Files with warnings : 0") + print("=================================================") + if errors_found > 0 or warnings_found > 0: + print_warning(f"Issue(s) found, {NORMALIZE_HINT}") + return errors_found + + +# --------------------------------------------------------------------------- +# update-snapshot +# --------------------------------------------------------------------------- + +def update_snapshot(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, dry_run=False): + """Regenerate the snapshot from the tree. + + Refuses to sanction a tree it could not read whole, and an id declared under + more than one triple: neither state can be recorded truthfully, so writing it + would only hide the mistake until CI. It does not judge the ids themselves — + the snapshot records state and check judges it, so an id that is not a mint + lands in the diff and fails check 1. + Idempotent: a second run over an unchanged tree changes nothing. Returns 0 + on success. + """ + analysis = analyze_tree(profiles_dir) + # A tree that could not be read whole cannot be sanctioned: the snapshot + # would silently drop the unreadable bundle's ids and claims, and the diff + # would read as a deliberate removal. + refusals = len(analysis["read_errors"]) + for msg in analysis["read_errors"]: + print_error(msg) + + 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 {} + + # 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(entry["filaments"]) - set(old_ids.get(fid, {}).get("filaments", []))) + for fid, entry in new_snap["ids"].items()) + removed_claims = sum( + 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 and not dry_run: + 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}") + if changed and dry_run: + print_success(f"dry run: {snapshot_path} would be rewritten; nothing written") + elif changed: + print_success(f"snapshot written to {snapshot_path}") + else: + print_success("snapshot already up to date; nothing changed") + return 0 + + +# --------------------------------------------------------------------------- +# Byte-preserving profile edits +# --------------------------------------------------------------------------- +# Binary IO throughout: a profile keeps its original line endings (LF or CRLF), +# its BOM and its exact formatting apart from the one line being touched. + +def insert_key_line(text, key, value, before=(), after=()): + """Insert a `"key": value` line into a preset that lacks one. + + Placed just before the first `before` anchor the file has (matching the + canonical key order), else just after the first `after` anchor, reusing that + anchor line's indentation and line ending. Returns (text, insertions made). + """ + def line(m): + return (f'{m.group(1)}"{key}": {json.dumps(value, ensure_ascii=False)},' + f'{m.group(2)}') + + for anchors, at_start in ((before, True), (after, False)): + for anchor in anchors: + m = re.search(r'^([ \t]*)"' + re.escape(anchor) + r'"[ \t]*:.*?(\r?\n)', + text, re.MULTILINE) + if m: + cut = m.start() if at_start else m.end() + return text[:cut] + line(m) + text[cut:], 1 + return text, 0 + + +def replace_key_value(text, key, new_value, old_value=None): + """Swap the JSON string VALUE on the `"key"` line, byte-preserving the rest. + + When old_value is given the line must carry exactly that value, so a stale + rewrite fails loudly instead of clobbering an unexpected id. + Returns (text, replacements made). + """ + value = (re.escape(json.dumps(old_value, ensure_ascii=False)) + if old_value is not None else _JSON_STR) + pattern = re.compile( + r'(^[ \t]*"' + re.escape(key) + r'"[ \t]*:[ \t]*)' + value, re.MULTILINE) + return pattern.subn( + lambda m: m.group(1) + json.dumps(new_value, ensure_ascii=False), text, count=1) + + +def delete_key_line(text, key, old_value=None): + """Delete the `"key"` line, byte-preserving the rest. + + Handles both the canonical layout (trailing comma) and a last-property + layout (comma on the preceding line, consumed so no dangling comma is left). + Returns (text, deletions made). + """ + value = (re.escape(json.dumps(old_value, ensure_ascii=False)) + if old_value is not None else _JSON_STR) + member = r'"' + re.escape(key) + r'"[ \t]*:[ \t]*' + value + m = re.search(r'^[ \t]*' + member + 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]*' + member + r'[ \t]*(?=\r?\n)', text) + if m: + return text[:m.start()] + text[m.end():], 1 + return text, 0 + + +def insert_filament_id(text, new_id): + """Insert a `"filament_id"` line before `instantiation`, else after `name`.""" + return insert_key_line(text, "filament_id", new_id, + before=("instantiation",), after=("name",)) + + +def replace_filament_id_value(text, old_id, new_id): + """Swap the value on the `"filament_id"` line; it must carry old_id.""" + return replace_key_value(text, "filament_id", new_id, old_value=old_id) + + +def insert_setting_id(text, new_id): + """Insert a `"setting_id"` line before `filament_id`, else `instantiation`. + + Falls back to `name` — the one key every preset has — so the anchor does not + depend on whether filament_id has been written yet: a dry run, which does not + write it, must reach the same verdict as the real run that does. + """ + return insert_key_line(text, "setting_id", new_id, + before=("filament_id", "instantiation"), after=("name",)) + + +def _edit_profile(path, edit, dry_run=False, what="edit"): + """Apply `edit(text) -> (text, n)` to the profile at path, byte-preserving. + + The result is re-parsed and returned so the caller can verify the outcome — + in a dry run too, where only the write itself is skipped. Raises when the + edit found no anchor or produced invalid 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 = edit(text) + if n == 0: + raise RuntimeError(f"could not apply {what} to {path}") + try: + data = json.loads(text) # fail loudly if the edit broke the JSON + except ValueError as e: + raise RuntimeError(f"{what} broke the JSON in {path}: {e}") from None + if not dry_run: + 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, dry_run=False): + """Insert new_id into the profile at path, byte-preserving everything else.""" + _edit_profile(path, lambda text: insert_filament_id(text, new_id), + dry_run, "filament_id insert") + + +def rewrite_filament_id(path, old_id, new_id, dry_run=False): + """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), + dry_run, "filament_id rewrite") + 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") + + +# --------------------------------------------------------------------------- +# generate-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, 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 the one its own triple mints — a wrong OF id, + or a foreign one such as a Bambu catalog id 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). + 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 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) + errors = 0 + for msg in analysis["read_errors"]: + print_error(msg) + errors += 1 + wanted = None + if vendors is not None: + wanted = set(vendors) + # A vendor directory without a bundle index simply has no filaments to + # process; only a name that is no directory at all is an error. + unknown = sorted(wanted - set(list_profile_dirs(profiles_dir))) + if unknown: + for v in unknown: + print_error(f'unknown vendor "{v}" in {profiles_dir}') + return 0, errors + len(unknown) + + 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 + + # 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"])): + 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: + print_error( + f'cannot re-mint "{rec["file"]}" (filament_id "{fid}"): resolves empty ' + f'{missing}; the mint key needs both (generic materials use ' + f'filament_vendor "Generic")') + errors += 1 + continue + try: + rewrite_filament_id(rec["path"], fid, want, dry_run) + except (OSError, RuntimeError, ValueError) as e: + print_error(str(e)) + errors += 1 + continue + files_changed += 1 + reminted += 1 + 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 + # or one file touched by both passes counts as two. + changed_paths.add(os.path.normpath(rec["path"])) + print_info(f'{verb}rewrite {rec["file"]}: "{fid}" -> "{want}" ' + f'(triple "{"/".join(triple)}")') + + # 2. Instantiated filaments that resolve no id at all, grouped by filament. + filaments = {} # (vendor, filament name) -> [rec] + for vendor, name, _file in analysis["missing_effective"]: + if wanted is not None and vendor not in wanted: + continue + 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 + filaments.setdefault((vendor, base_name(name)), []).append(rec) + + ofl_map = analysis["vendors"].get(OFL, {}) + for (vendor, filament_name), members in sorted(filaments.items()): + vendor_map = analysis["vendors"][vendor] + # 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 = {} + 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") + or base_name(root["name"]) != filament_name): + root = rec # root-less member carries the id itself + roots[root["name"]] = root + fields = {(resolve_filament_field(n, "filament_vendor", vendor_map, ofl_map), + resolve_filament_field(n, "filament_type", vendor_map, ofl_map)) + for n in roots} + if len(fields) > 1: + print_error( + 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 + continue + triple = (*next(iter(fields)), filament_name) + if triple in colliding: + continue # reported above + missing = _incomplete_triple(triple) + if missing: + print_error( + 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 = generate_filament_id(*triple) + for name in sorted(roots): + root = roots[name] + try: + write_filament_id(root["path"], new_id, dry_run) + except (OSError, RuntimeError, ValueError) as e: + print_error(str(e)) + errors += 1 + continue + files_changed += 1 + inserted += 1 + 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"]}') + + print_info(f"filament_ids inserted : {inserted}") + print_info(f"filament_ids re-minted : {reminted}") + return files_changed, errors + + +def generate_setting_ids(profiles_dir=PROFILES_DIR, vendors=None, dry_run=False, + changed_paths=None): + """Make every preset carry the setting_id its identity mints. + + One walk over filament/, process/ and machine/ of every vendor bundle, and + one composite edit per file: drop the misspelled "settings_id" key (the app + never reads it), strip setting_id from base profiles (only instantiated + presets carry one), and set generate_preset_setting_id(vendor, type, name) on + instantiated presets — except BBL's, which keep their authoritative "G*" + cloud ids. `changed_paths`, when a set is passed, collects the files that + changed. Returns (files_changed, errors). + """ + _utf8_console() + profiles_dir = str(profiles_dir) + errors = 0 + names = list_profile_dirs(profiles_dir) + if vendors is not None: + wanted = set(vendors) + unknown = sorted(wanted - set(names)) + if unknown: + for v in unknown: + print_error(f'unknown vendor "{v}" in {profiles_dir}') + return 0, len(unknown) + names = [v for v in names if v in wanted] + for v in sorted(wanted & RESERVED_VENDORS): + print_info(f'{v} keeps its authoritative "G*" setting_ids; only its base ' + f"declarations are stripped") + + verb = "would " if dry_run else "" + files_changed = 0 + counts = {"typos": 0, "stripped": 0, "assigned": 0} + for vendor in names: + for path, type_name in iter_profile_files(os.path.join(profiles_dir, vendor)): + try: + with open(path, "rb") as f: + data = json.loads(f.read().decode("utf-8-sig")) + if not isinstance(data, dict): + raise ValueError("top level is not a JSON object") + except (OSError, ValueError) as e: + print_error(f"unreadable profile {path}: {e}") + errors += 1 + continue + + sid = data.get("setting_id") + # Strictly "true", exactly as check_setting_id_uniqueness tests it: + # a preset the validator calls a base profile must not be given an id + # here, or the two would fight over it forever. + instantiated = data.get("instantiation") == "true" + edits = [] # (counter key, description, edit function) + if "settings_id" in data: + edits.append(("typos", 'drop the misspelled "settings_id"', + lambda text: delete_key_line(text, "settings_id"))) + typo = data["settings_id"] + if (vendor in RESERVED_VENDORS and instantiated and sid is None + and isinstance(typo, str) and typo): + # A reserved vendor's ids are authoritative, so there is no + # formula to fall back on: correct the key and keep the + # value, or the drop would leave an instantiated preset with + # no setting_id and nothing able to give it one. + edits.append(("assigned", 'restore its value as "setting_id"', + lambda text, new=typo: insert_setting_id(text, new))) + if not instantiated: + if sid is not None: + edits.append(("stripped", "strip the base profile's setting_id", + lambda text, old=sid: delete_key_line( + text, "setting_id", old))) + elif vendor not in RESERVED_VENDORS: + name = data.get("name") + if not name: + # Report and carry on: an edit already queued for this file + # (a misspelled key) is still worth applying. + print_error(f'instantiated preset has no "name": {path}') + errors += 1 + else: + new_id = generate_preset_setting_id(vendor, type_name, name) + if sid is None: + edits.append(("assigned", "insert the setting_id", + lambda text, new=new_id: insert_setting_id(text, new))) + elif sid != new_id: + edits.append(("assigned", "replace the setting_id", + lambda text, new=new_id, old=sid: replace_key_value( + text, "setting_id", new, old))) + if not edits: + continue + + def apply(text, _edits=edits, _path=path): + for _key, what, edit in _edits: + text, n = edit(text) + if n == 0: + raise RuntimeError(f"could not {what} in {_path}") + return text, len(_edits) + + try: + _edit_profile(path, apply, dry_run) + except (OSError, RuntimeError, ValueError) as e: + print_error(str(e)) + errors += 1 + continue + files_changed += 1 + if changed_paths is not None: + changed_paths.add(os.path.normpath(path)) + for key, _what, _edit in edits: + counts[key] += 1 + rel = os.path.relpath(path, profiles_dir).replace(os.sep, "/") + print_info(f"{verb}update {rel}: " + f"{', '.join(what for _key, what, _edit in edits)}") + + print_info(f'misspelled "settings_id" dropped : {counts["typos"]}') + print_info(f'base setting_ids stripped : {counts["stripped"]}') + print_info(f'setting_ids assigned : {counts["assigned"]}') + return files_changed, errors + + +def run_generate_id(profiles_dir, vendors, filament_id, setting_id, dry_run): + """The generate-id command: write the ids the tree's identities imply. + + Returns the process exit code. + """ + # Both by default. filament_id runs first so its keys are in place before the + # setting_id pass reads the files back. + do_filament = filament_id or not setting_id + do_setting = setting_id or not filament_id + changed = set() # one file the two passes both touch is still one file + filament_files = errors = 0 + if do_filament: + filament_files, e = generate_filament_ids(profiles_dir, vendors, dry_run, changed) + errors += e + if do_setting: + _n, e = generate_setting_ids(profiles_dir, vendors, dry_run, changed) + errors += e + + summary = (f"dry run: {len(changed)} file(s) would change; nothing written" + if dry_run else f"{len(changed)} file(s) changed") + if errors: + print_error(f"{summary}; {errors} error(s)") + else: + print_success(summary) + if filament_files and not dry_run: + # A filament_id write may or may not move the sanctioned state (an id repaired + # back to the value the snapshot already records does not), so regenerate and + # let the diff - empty or not - say. + print_warning(f"now {UPDATE_HINT}") + return 1 if errors else 0 + + + +# --------------------------------------------------------------------------- +# Whole-file profile writes (normalize / update-index) +# --------------------------------------------------------------------------- +# Unlike the byte-preserving id edits above, these reserialise a whole file: they +# reorder keys and normalize formatting by design. + +def _rel(path, profiles_dir): + """Tree-relative, forward-slashed path - what every message below prints.""" + return os.path.relpath(path, profiles_dir).replace(os.sep, "/") + + +def _walk_json(directory): + """Every .json file under a directory, in a deterministic order.""" + for root, dirs, files in os.walk(directory): + dirs.sort() + for name in sorted(files): + if name.lower().endswith(".json"): + yield os.path.join(root, name) + + +def _profile_subdir(profile_type): + """The directory a profile type lives in: Orca keeps machine models in machine/.""" + return "machine" if profile_type == "machine_model" else profile_type + + +def write_profile_json(path, data): + """Reserialise a profile file: tab-indented, LF endings, trailing newline. + + newline="\\n" is not cosmetic: without it Python translates to os.linesep, so a + normalize run on Windows would rewrite every file it touches with CRLF endings. + """ + with open(path, "w", encoding="utf-8", newline="\n") as f: + json.dump(data, f, indent="\t", ensure_ascii=False) + f.write("\n") + + +def create_ordered_profile(profile, priority_fields): + """`profile` with priority_fields hoisted to the front, in that order.""" + ordered = {k: profile[k] for k in priority_fields if k in profile} + ordered.update((k, v) for k, v in profile.items() if k not in priority_fields) + return ordered + + +# --------------------------------------------------------------------------- +# normalize +# --------------------------------------------------------------------------- + +# The keys that identify a preset, hoisted to the top of every rewritten file. +NORMALIZE_FIELD_ORDER = ("type", "name", "renamed_from", "inherits", "from", + "setting_id", "filament_id", "instantiation") +# Settings a filament profile must not pin: they belong to the process. +FILAMENT_DROP_FIELDS = ("initial_layer_print_speed", "outer_wall_speed", + "inner_wall_speed", "infill_speed", "top_surface_speed", + "travel_speed") +# Filament options the config system stores as vectors, written as scalars by hand. +FILAMENT_ARRAY_FIELDS = ("filament_cost", "filament_density", "filament_type", + "temperature_vitrification", "filament_max_volumetric_speed", + "filament_vendor") + + +def _normalize_profile(data, sub): + """Normalize one loaded profile in place. Returns what it changed, one line each. + + It reports rather than prints because check asks this function the same question + normalize does - would this file be rewritten? - and has to render the answer as + errors rather than as the running commentary of a write. + """ + changes = [] + + if not data.get("type"): + if sub == "machine": + # The machine folder holds both machine models and the nozzle variants + # that are machines; the name is what tells them apart. + name = data.get("name") or "" + data["type"] = "machine" if "nozzle" in name.lower() else "machine_model" + else: + data["type"] = sub + changes.append(f'add type "{data["type"]}"') + + for field in ("version", "is_custom_defined"): + if data.get(field): + del data[field] + changes.append(f"remove {field}") + + # BBS renamed extruder_clearance_radius to extruder_clearance_max_radius, but some + # profiles carry both with different values, and the slicer cannot tell which one + # to obey - a toolhead collision waiting to happen. Keep the larger one only. + if "extruder_clearance_radius" in data and "extruder_clearance_max_radius" in data: + drop = ("extruder_clearance_radius" + if float(data["extruder_clearance_max_radius"]) + > float(data["extruder_clearance_radius"]) + else "extruder_clearance_max_radius") + del data[drop] + changes.append(f"drop conflicting {drop}") + + if sub == "filament": + for field in FILAMENT_ARRAY_FIELDS: + if field in data and not isinstance(data[field], list): + data[field] = [data[field]] + changes.append(f"convert {field} to an array") + for field in FILAMENT_DROP_FIELDS: + if field in data: + del data[field] + changes.append(f"remove {field}") + + return changes + + +def normalize_profiles(profiles_dir=PROFILES_DIR, vendors=None, profile_types=None, + force=False, dry_run=False): + """Normalize profile files in place. Returns (files changed, errors). + + Adds a missing "type", drops keys the slicer no longer reads, resolves the + extruder_clearance_* conflict, arrayifies the filament options that are vectors, + and rewrites the file with its identifying keys first. + """ + vendors = vendors or list_vendor_names(profiles_dir) + # Both machine_model and machine live in machine/, so the same directory is never + # walked twice; what a file becomes is decided per file, from its name. + subs = list(dict.fromkeys(_profile_subdir(t) for t in (profile_types or PROFILE_TYPES))) + changed_files = errors = 0 + for vendor in vendors: + for sub in subs: + for path in _walk_json(os.path.join(profiles_dir, vendor, sub)): + if os.path.basename(path) in NON_PROFILE_FILES: + continue + rel = _rel(path, profiles_dir) + try: + data = load_json(path) + except (ValueError, OSError) as e: + print_error(f"{rel}: {e}") + errors += 1 + continue + if not isinstance(data, dict): + continue + changes = _normalize_profile(data, sub) + for change in changes: + print_info(f"{rel}: {change}") + if not changes and not force: + continue + changed_files += 1 + if dry_run: + print_info(f"{rel}: would be rewritten") + continue + try: + write_profile_json( + path, create_ordered_profile(data, NORMALIZE_FIELD_ORDER)) + except OSError as e: + print_error(f"{rel}: {e}") + errors += 1 + continue + print_info(f"{rel}: rewritten") + + verb = "would be normalized" if dry_run else "normalized" + print_success(f"{changed_files} profile(s) {verb}") + return changed_files, errors + + +# --------------------------------------------------------------------------- +# trim +# --------------------------------------------------------------------------- + +def trim_profiles(profiles_dir=PROFILES_DIR, vendors=None, profile_types=None, + dry_run=False): + """Delete profile files that a vendor's .json does not index. + + The loader only ever reads the sub_paths listed in .json, so a profile + file missing from every *_list never loads. Only recognisable presets are + considered: assets (cover images, bed models, bed textures) are referenced from + inside machine profiles rather than from the index, and data files such as + cli_config.json carry no "type" - all of them stay. A file that cannot be parsed + is reported and kept: never delete what could not be read. + + An unindexed file that some surviving profile names in "inherits" is kept too, + and reported, UNLESS an indexed profile already carries that name: "inherits" is + resolved by preset name, so the indexed one is the parent every child actually + gets, and the unindexed file is a stale copy the loader never reaches. Where no + indexed profile provides the name the inheriting preset really is broken, and + deleting the file would destroy the only record of the settings it was written + against - a repair job for a maintainer, not for this. + + Returns (files removed, errors). + """ + vendors = vendors or list_vendor_names(profiles_dir) + subs = list(dict.fromkeys(_profile_subdir(t) for t in (profile_types or PROFILE_TYPES))) + + total = errors = 0 + for vendor in vendors: + vendor_dir = os.path.join(profiles_dir, vendor) + try: + library = load_json(os.path.join(profiles_dir, vendor + ".json")) + except (ValueError, OSError) as e: + print_error(f"{vendor}.json: {e}") + errors += 1 + continue + + # A profile may be indexed under any of the lists whichever folder it sits + # in, so the whole index is collected before anything is judged unreferenced. + listed = set() + for section in PROFILE_TYPES: + for entry in library.get(section + "_list", []): + sub_path = entry.get("sub_path") + if sub_path: + # Index entries are hand-written; "filament/./X.json" names the + # same file as "filament/X.json" and must not read as an orphan. + listed.add(posixpath.normpath(sub_path.replace("\\", "/"))) + + candidates = {} # path -> profile, for every unindexed preset + inherited = set() # every name the files that stay claim as a parent + provided = {} # name -> sub_path, for the profiles the loader can see + for sub in subs: + for path in _walk_json(os.path.join(vendor_dir, sub)): + rel = _rel(path, profiles_dir) + sub_path = posixpath.normpath( + os.path.relpath(path, vendor_dir).replace(os.sep, "/")) + try: + profile = load_json(path) + except (ValueError, OSError) as e: + print_warning(f"{rel}: {e}; keeping it") + continue + if not isinstance(profile, dict): + continue + if sub_path in listed or profile.get("type") not in PROFILE_TYPES: + if profile.get("inherits"): + inherited.add(profile["inherits"]) + if sub_path in listed and profile.get("name"): + provided[profile["name"]] = sub_path + continue + candidates[path] = profile + + # An orphan kept for being inherited can itself keep its own parent alive, so + # the survivors are grown to a fixpoint before anything is deleted. A kept + # orphan never enters "provided": it does not load, so it cannot be the parent + # a child resolves to, and its own parent needs rescuing on the same terms. + kept = {} + while True: + rescued = {p: d for p, d in candidates.items() + if d.get("name") in inherited and d.get("name") not in provided} + if not rescued: + break + for path, profile in rescued.items(): + del candidates[path] + kept[path] = profile + if profile.get("inherits"): + inherited.add(profile["inherits"]) + + for path in sorted(kept): + print_warning(f"{_rel(path, profiles_dir)}: not indexed by {vendor}.json but " + f'inherited from; keeping it (neither loads - fix the index)') + + removed = 0 + for path in sorted(candidates): + rel = _rel(path, profiles_dir) + twin = provided.get(candidates[path].get("name")) + why = f", not indexed by {vendor}.json" + if twin: + why += f' ({twin} is the profile named "{candidates[path]["name"]}")' + if dry_run: + print_info(f"{rel}: would be removed{why}") + else: + try: + os.remove(path) + except OSError as e: + print_error(f"{rel}: {e}") + errors += 1 + continue + print_info(f"{rel}: removed{why}") + removed += 1 + if removed: + print_info(f"{vendor}: {removed} unreferenced profile(s)") + total += removed + + verb = "would be removed" if dry_run else "removed" + print_success(f"{total} unreferenced profile(s) {verb}") + return total, errors + + +# --------------------------------------------------------------------------- +# update-index +# --------------------------------------------------------------------------- + +def topological_sort(profiles): + """Order index entries parents-first, so the loader resolves inherits in one pass. + + Entries whose parent is not in the same section keep their own (sorted) order at + the end; the loader finds those parents through the base bundle instead. + """ + graph = defaultdict(list) + in_degree = defaultdict(int) + by_name = {p["name"]: p for p in profiles} + all_names = set(by_name) + + placed = set() + for profile in profiles: + parent = profile.get("inherits") + child = profile["name"] + if parent in all_names: + graph[parent].append(child) + in_degree[child] += 1 + in_degree.setdefault(parent, 0) + placed.add(child) + placed.add(parent) + + queue = sorted(name for name, degree in in_degree.items() if degree == 0) + result = [] + while queue: + current = queue.pop(0) + result.append(by_name[current]) + placed.add(current) + for child in sorted(graph[current]): + in_degree[child] -= 1 + if in_degree[child] == 0: + queue.append(child) + + result.extend(by_name[name] for name in sorted(all_names - placed)) + return result + + +def build_index_sections(profiles_dir, vendor, profile_types=None): + """The *_list sections update-index would write for one bundle, from its own files. + + A profile is indexed under the section its own "type" names, so a file whose type + is missing or unrecognised cannot be placed - run normalize first, which is what + writes the type. + + Returns (sections, problems). `problems` names every file that could not be placed, + one message each, for the caller to report. `sections` is None when two files claim + one preset name: the bundle can only hold one profile under a name, so rebuilding + would pick a winner by directory order and quietly drop the other, and the index has + to be left alone instead. Deleting the stale copy is trim's job, which is why it + runs before this. + """ + vendor_dir = os.path.join(profiles_dir, vendor) + sections = {} + problems = [] + unplaceable = {} + by_name = defaultdict(list) + for profile_type in (profile_types or PROFILE_TYPES): + entries = [] + for path in _walk_json(os.path.join(vendor_dir, _profile_subdir(profile_type))): + if os.path.basename(path) in NON_PROFILE_FILES: + continue + rel = _rel(path, profiles_dir) + try: + profile = load_json(path) + except (ValueError, OSError) as e: + problems.append(f"{rel}: {e}") + continue + if not isinstance(profile, dict): + continue + if profile.get("type") not in PROFILE_TYPES: + unplaceable[rel] = profile.get("type") + continue + if profile.get("type") != profile_type: + continue + name = profile.get("name") + if not name: + problems.append(f"{rel}: no name, cannot be indexed") + continue + entry = { + "name": name, + "sub_path": os.path.relpath(path, vendor_dir).replace(os.sep, "/"), + } + if profile.get("inherits"): + entry["inherits"] = profile["inherits"] + by_name[name].append(entry["sub_path"]) + entries.append(entry) + + sorted_entries = topological_sort(entries) + for entry in sorted_entries: + entry.pop("inherits", None) # ordering input only, not part of the index + sections[profile_type + "_list"] = sorted_entries + + for rel, found in sorted(unplaceable.items()): + problems.append(f'{rel}: type {found!r} is not one of {list(PROFILE_TYPES)}, so it ' + f"cannot be indexed; run " + f'"python scripts/orca_profile_tool.py normalize" first') + + clashes = {name: subs for name, subs in by_name.items() if len(subs) > 1} + for name, subs in sorted(clashes.items()): + problems.append(f'{vendor}.json: {len(subs)} profiles are named "{name}" ' + f'({", ".join(sorted(subs))}); only one can be indexed under ' + f"that name, so delete or rename the others - " + f'"python scripts/orca_profile_tool.py trim" removes an ' + f"unindexed copy") + + return (None if clashes else sections), problems + + +def update_profile_indexes(profiles_dir=PROFILES_DIR, vendors=None, profile_types=None, + dry_run=False): + """Rebuild the *_list sections of each .json from the files on disk. + + Returns (indexes changed, errors). See build_index_sections for what a file has to + carry to be placed, and for when a bundle is left alone instead. + """ + vendors = vendors or list_vendor_names(profiles_dir) + changed = errors = 0 + for vendor in vendors: + lib_path = os.path.join(profiles_dir, vendor + ".json") + try: + library = load_json(lib_path) + except (ValueError, OSError) as e: + print_error(f"{vendor}.json: {e}") + errors += 1 + continue + + sections, problems = build_index_sections(profiles_dir, vendor, profile_types) + for problem in problems: + print_error(problem) + errors += len(problems) + if sections is None: + print_error(f"{vendor}.json: left unchanged, it would have dropped a profile") + continue + + if all(library.get(section) == entries for section, entries in sections.items()): + continue + changed += 1 + if dry_run: + print_info(f"{vendor}.json: {', '.join(sorted(sections))} would be rebuilt") + continue + library.update(sections) + try: + write_profile_json(lib_path, library) + except OSError as e: + print_error(f"{vendor}.json: {e}") + errors += 1 + continue + print_info(f"{vendor}.json: {', '.join(sorted(sections))} rebuilt") + + verb = "would be rebuilt" if dry_run else "rebuilt" + print_success(f"{changed} vendor index(es) {verb}") + return changed, errors + + +# --------------------------------------------------------------------------- +# CLI +# --------------------------------------------------------------------------- + +EXAMPLES = """\ +examples: + orca_profile_tool.py check + validate the whole tree, exactly as CI does + orca_profile_tool.py check --vendor Creality + the per-vendor checks for one bundle; setting_id and filament_id are + cross-vendor properties, so those two always cover the whole tree + orca_profile_tool.py generate-id + give every profile the id its identity mints, in every vendor bundle + orca_profile_tool.py generate-id --dry-run + preview exactly that; writes nothing + orca_profile_tool.py generate-id --setting-id --vendor Elegoo + setting_id only, and only in that bundle + orca_profile_tool.py update-snapshot + re-record the sanctioned filament_id state after a generate-id run + +after adding, renaming or deleting profile files, run in this order: + normalize -> trim -> update-index -> generate-id -> update-snapshot -> check +each step feeds the next: normalize writes the "type" update-index files a +profile by, and trim judges against the index update-index is about to rebuild. +""" + + +def build_parser(): + # Shared options, attached with parents=[...] so every command spells them the + # same way and documents them once. + profiles_opt = argparse.ArgumentParser(add_help=False) + profiles_opt.add_argument("--profiles", default=PROFILES_DIR, metavar="DIR", + help="profiles directory (default: resources/profiles)") + + vendor_opt = argparse.ArgumentParser(add_help=False) + vendor_opt.add_argument("--vendor", metavar="VENDOR", action="append", default=[], + help="act on this vendor bundle only; repeatable. " + "An empty value means every vendor") + + type_opt = argparse.ArgumentParser(add_help=False) + type_opt.add_argument("--profile-type", metavar="TYPE", action="append", default=[], + choices=PROFILE_TYPES, dest="profile_type", + help="act on this profile type only; repeatable. One of: " + + ", ".join(PROFILE_TYPES)) + + dry_run_opt = argparse.ArgumentParser(add_help=False) + dry_run_opt.add_argument("--dry-run", "--dryrun", dest="dry_run", action="store_true", + help="report what would change and write nothing") + + snapshot_opt = argparse.ArgumentParser(add_help=False) + snapshot_opt.add_argument("--snapshot", default=None, metavar="PATH", + help="the sanctioned filament_id state of that tree " + "(default: scripts/filament_id_snapshot.json, which " + "describes resources/profiles and no other tree)") + + parser = argparse.ArgumentParser( + prog="orca_profile_tool.py", allow_abbrev=False, + formatter_class=argparse.RawDescriptionHelpFormatter, + description="Every maintenance job for the OrcaSlicer system profile tree.\n" + "\n" + "The ids it writes are pure functions of the profile's own\n" + "identity, so it never invents one: it writes the id the rules\n" + "already imply, and leaves a conforming tree alone.", + epilog=EXAMPLES) + commands = parser.add_subparsers(dest="command", metavar="") + + def add(name, parents, help_text, description): + return commands.add_parser( + name, parents=parents, help=help_text, description=description, + allow_abbrev=False, formatter_class=argparse.RawDescriptionHelpFormatter) + + check_cmd = add( + "check", [vendor_opt, snapshot_opt, profiles_opt], + "validate the whole profile tree -- what CI runs", + "Validate the whole profile tree: preset name uniqueness, index coverage\n" + "both ways, compatible_printers, conflicting and vector-typed keys,\n" + "filament_id length, that normalize and update-index would leave every\n" + "bundle alone, and the tree-wide setting_id and filament_id state.\n" + "Exits nonzero on errors.\n" + "\n" + "--vendor narrows the per-vendor checks only: setting_id uniqueness and the\n" + "filament_id state are cross-vendor properties a narrowed run cannot answer,\n" + "so they always cover the whole tree.") + check_cmd.add_argument("--materials", action="store_true", + help="also check that every default material a machine names " + "exists") + check_cmd.add_argument("--obsolete-keys", action="store_true", dest="obsolete_keys", + help="also warn about settings the slicer no longer defines") + + generate_cmd = add( + "generate-id", [vendor_opt, dry_run_opt, profiles_opt], + "write the id each profile's identity implies", + "Write the id every profile should carry: filament_id from each filament's\n" + "(filament_vendor, filament_type, name) triple, setting_id from each preset's\n" + "(vendor, type, name). Idempotent and byte-preserving.\n" + "\n" + "The id is a function of the triple alone, so a narrowed run writes exactly\n" + "what a full one would; check reports whatever it left outside.") + which = generate_cmd.add_mutually_exclusive_group() + which.add_argument("--filament-id", action="store_true", dest="filament_id", + help="write filament_id only, skipping setting_id") + which.add_argument("--setting-id", action="store_true", dest="setting_id", + help="write setting_id only, skipping filament_id") + + normalize_cmd = add( + "normalize", [vendor_opt, type_opt, dry_run_opt, profiles_opt], + "rewrite profile files into their canonical shape", + "Add a missing \"type\", drop keys the slicer no longer reads, resolve the\n" + "extruder_clearance_* conflict, arrayify the filament options that are\n" + "vectors, and rewrite each file with its identifying keys first.\n" + "\n" + "Rewrites whole files, so it normalizes their formatting and key order too.") + normalize_cmd.add_argument("--force", action="store_true", + help="rewrite every profile, not only the ones that changed") + + add("trim", [vendor_opt, type_opt, dry_run_opt, profiles_opt], + "delete profile files no .json list references", + "Delete profile files that a vendor's .json does not index. The\n" + "loader only ever reads the sub_paths listed there, so an unindexed preset\n" + "never loads.\n" + "\n" + "Assets and data files are kept, a file that cannot be parsed is kept and\n" + "reported, and so is one a surviving profile inherits from that no indexed\n" + "profile provides -- but a stale copy of an indexed profile goes, since\n" + "inherits resolves by name and the indexed one is what children get.") + + add("update-index", [vendor_opt, type_opt, dry_run_opt, profiles_opt], + "regenerate the *_list sections of .json", + "Rebuild the *_list sections of each .json from the files on disk,\n" + "ordered parents-first so the loader resolves inherits in one pass.\n" + "\n" + "A profile is indexed under the section its own \"type\" names, so run\n" + "normalize first: it is what writes a missing type. Two files claiming one\n" + "preset name leave that index alone, because a rebuild could only keep one\n" + "of them; run trim first, which is what clears a stale copy.") + + add("update-snapshot", [dry_run_opt, snapshot_opt, profiles_opt], + "re-record scripts/filament_id_snapshot.json", + "Re-record the sanctioned filament_id state after a generate-id run, and\n" + "commit the diff for maintainer review.") + + return parser + + +def main(argv=None): + _utf8_console() + argv = sys.argv[1:] if argv is None else list(argv) + parser = build_parser() + args = parser.parse_args(argv) + if args.command is None: + parser.print_help() + return 0 + + profiles_dir = args.profiles + # check_profile.sh passes --vendor "${VENDOR}" unconditionally (bash 3.2 cannot + # expand an empty array under set -u), and an empty value has always meant + # "every vendor" -- so drop empties rather than looking up a vendor named "". + vendors = sorted({v for v in getattr(args, "vendor", []) if v}) or None + if vendors: + unknown = sorted(set(vendors) - set(list_profile_dirs(profiles_dir))) + if unknown: + for vendor in unknown: + print_error(f'unknown vendor "{vendor}" in {profiles_dir}') + return 1 + profile_types = tuple(getattr(args, "profile_type", []) or ()) or None + + snapshot_path = getattr(args, "snapshot", None) + if snapshot_path is None: + if (args.command in ("check", "update-snapshot") + and os.path.abspath(profiles_dir) != os.path.abspath(PROFILES_DIR)): + # The repo snapshot is the sanctioned state of resources/profiles alone: + # checking another tree against it is meaningless, and re-recording one + # into it would overwrite the tracked file with a foreign tree's state. + parser.error(f"{args.command} reads and writes the sanctioned state of the " + f"tree it is given, so --profiles needs --snapshot PATH for " + f"that tree too") + snapshot_path = SNAPSHOT_PATH + + if args.command == "check": + errors = check_profiles(profiles_dir, vendors, snapshot_path, + materials=args.materials, obsolete_keys=args.obsolete_keys) + return 1 if errors else 0 + + if args.command == "generate-id": + return run_generate_id(profiles_dir, vendors, args.filament_id, args.setting_id, + args.dry_run) + + if args.command == "update-snapshot": + return update_snapshot(profiles_dir, snapshot_path, dry_run=args.dry_run) + + if args.command == "normalize": + _changed, errors = normalize_profiles(profiles_dir, vendors, profile_types, + force=args.force, dry_run=args.dry_run) + elif args.command == "trim": + _removed, errors = trim_profiles(profiles_dir, vendors, profile_types, + dry_run=args.dry_run) + else: # update-index + _changed, errors = update_profile_indexes(profiles_dir, vendors, profile_types, + dry_run=args.dry_run) + return 1 if errors else 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/tests/test_filament_id.py b/scripts/tests/test_filament_id.py index 3e7a6d2aec..80afd78a6b 100644 --- a/scripts/tests/test_filament_id.py +++ b/scripts/tests/test_filament_id.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -"""Tests for scripts/orca_id_tool.py (stdlib unittest, no external deps). +"""Tests for scripts/orca_profile_tool.py (stdlib unittest, no external deps). Run from the repo root: python -m unittest discover -s scripts/tests -v """ @@ -17,7 +17,7 @@ import uuid sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) -import orca_id_tool as afi # noqa: E402 +import orca_profile_tool 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__), "..", "..")) @@ -164,12 +164,14 @@ class SyntheticTree: changed, errors = afi.generate_filament_ids(self.profiles, vendors, dry_run) return changed, errors, buf.getvalue() - def cli(self, *flags): + def cli(self, *argv): """Run main() against this tree, capturing stdout.""" + flags = [*argv, "--profiles", self.profiles] + if argv and argv[0] in ("check", "update-snapshot"): + flags += ["--snapshot", self.snapshot] buf = io.StringIO() with contextlib.redirect_stdout(buf): - rc = afi.main([*flags, "--profiles", self.profiles, - "--snapshot", self.snapshot]) + rc = afi.main(flags) return rc, buf.getvalue() @@ -426,26 +428,6 @@ class TestTripleResolution(unittest.TestCase): ("MyVendor", "PLA", "MyPLA")) -# --------------------------------------------------------------------------- -# reserved namespaces -# --------------------------------------------------------------------------- - -class TestReservedSpaces(unittest.TestCase): - def test_owners(self): - # 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)) - 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("OF5CgdDq"), (False, None)) - self.assertEqual(afi.reserved_space_owner("P1234abcd"), (False, None)) # 8 hex chars: not the user space - - def test_gf_is_reserved_and_ownerless(self): - self.assertEqual(afi.reserved_space_owner("GFA00"), (True, None)) - - # --------------------------------------------------------------------------- # checks on synthetic trees # --------------------------------------------------------------------------- @@ -474,7 +456,7 @@ class TestChecks(OfCleanTreeCase): errors, out = self.t.check() self.assertGreater(errors, 0) self.assertIn('claim "VendorA/ANEW" is not sanctioned', out) - self.assertIn("--update-snapshot", out) + self.assertIn("update-snapshot", out) def test_check2_vanished_claim_is_stability_error(self): self.t.remove_preset("VendorA", "APLA @P1") @@ -669,11 +651,12 @@ class TestChecks(OfCleanTreeCase): self.assertGreater(errors, 0) self.assertIn("does not match the mint of its triple", out) - 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"), - ("null", "user-custom")]: + def test_check1_an_id_another_system_composed_is_not_a_mint(self): + # Nothing is reserved because nothing is exempt: an id some other system + # composes for its own purposes - Bambu's catalog, a Qidi box, the dialog + # that creates a user filament - is simply not the mint of a triple, and + # check 1 rejects it for that and nothing else. + for fid in ("GFX99", "QD_X_PLA", "P1a2b3c4", "null"): with self.subTest(fid=fid): name = f"R{fid} @base" self.t.write_preset("VendorA", preset(name, filament_id=fid, @@ -684,8 +667,8 @@ class TestChecks(OfCleanTreeCase): compatible_printers=["P1"])) errors, out = self.t.check() self.assertGreater(errors, 0) - self.assertIn("reserved id space", out) - self.assertIn(marker, out) + self.assertIn(f'filament_id "{fid}"', out) + self.assertIn('is not a minted "OF" id', out) def test_check3c_unresolvable_instantiated_filament(self): self.t.write_preset("VendorA", preset("DNEW @P1", compatible_printers=["P1"])) @@ -713,7 +696,7 @@ class TestCheck5(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 5a. + # No grandfathering: sanctioning the tree does not silence check 4a. rc, _out = self.t.update_snapshot() self.assertEqual(rc, 0) errors, out = self.t.check() @@ -736,7 +719,7 @@ class TestCheck5(OfCleanTreeCase): self.assertIn("divergent triples", out) self.assertIn("MV/PLA/MPLA", out) self.assertIn("MV/PETG/MPLA", out) - # No grandfathering: sanctioning the tree does not silence check 5b. + # No grandfathering: sanctioning the tree does not silence check 4b. rc, _out = self.t.update_snapshot() self.assertEqual(rc, 0) errors, out = self.t.check() @@ -922,20 +905,23 @@ class TestUpdateSnapshot(SyntheticTreeCase): with open(self.t.snapshot, "rb") as f: self.assertEqual(f.read(), before) # nothing written on refusal - def test_refuses_reserved_namespace_ids(self): + def test_records_an_id_it_cannot_defend_and_lets_check_reject_it(self): + # update-snapshot records state, it does not judge ids: a foreign id + # lands in the diff a maintainer reviews, and fails check 1 straight + # after. Sanctioning it does not grandfather it. self.t.write_preset("VendorA", preset("CNEW @base", filament_id="GFX99", 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: - 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 + self.assertEqual(rc, 0, out) + with open(self.t.snapshot, encoding="utf-8") as f: + self.assertIn("GFX99", json.load(f)["ids"]) + errors, out = self.t.check() + self.assertGreater(errors, 0) + self.assertIn('is not a minted "OF" id', out) def test_dry_run_reports_without_writing(self): self.t.write_preset("VendorA", preset("ANEW @P2", inherits="APLA @base", @@ -1536,7 +1522,7 @@ class TestRemint(SyntheticTreeCase): class TestCli(unittest.TestCase): """main(argv) over a synthetic tree. The clean tree's baseline ids are - deliberately non-conformant ("AX01"/"OGFL99"), so a --generate run always + deliberately non-conformant ("AX01"/"OGFL99"), so a generate-id run always has both a filament_id rewrite and setting_id inserts to do.""" def setUp(self): @@ -1544,17 +1530,17 @@ class TestCli(unittest.TestCase): self.addCleanup(self.t.cleanup) def test_bare_invocation_prints_help(self): + # Naming no command is not an error: it is how you find out what the + # commands are, and it must never be mistaken for a run that did work. + before = self.t.bytes_map() buf = io.StringIO() with contextlib.redirect_stdout(buf): rc = afi.main([]) self.assertEqual(rc, 0) self.assertIn("usage:", buf.getvalue()) - self.assertIn("--generate", buf.getvalue()) - # ... and so does any invocation naming no mode: help, and no work - before = self.t.bytes_map() - rc, out = self.t.cli() - self.assertEqual(rc, 0) - self.assertIn("usage:", out) + for command in ("check", "generate-id", "normalize", "trim", "update-index", + "update-snapshot"): + self.assertIn(command, buf.getvalue()) self.assertEqual(self.t.bytes_map(), before) def test_another_tree_needs_its_own_snapshot(self): @@ -1563,20 +1549,20 @@ class TestCli(unittest.TestCase): # re-recording into it would overwrite the tracked file. with open(afi.SNAPSHOT_PATH, "rb") as f: repo_snapshot = f.read() - for mode in ("--check", "--update-snapshot"): + for command in ("check", "update-snapshot"): with self.assertRaises(SystemExit) as caught: with contextlib.redirect_stderr(io.StringIO()): - afi.main([mode, "--profiles", self.t.profiles]) - self.assertEqual(caught.exception.code, 2, mode) + afi.main([command, "--profiles", self.t.profiles]) + self.assertEqual(caught.exception.code, 2, command) with open(afi.SNAPSHOT_PATH, "rb") as f: self.assertEqual(f.read(), repo_snapshot) - # Named explicitly, both modes run against that tree. - rc, out = self.t.cli("--update-snapshot") + # Named explicitly, both commands run against that tree. + rc, out = self.t.cli("update-snapshot") self.assertEqual(rc, 0, out) - # --generate never reads the snapshot, so it keeps working without one. + # generate-id 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]) + rc = afi.main(["generate-id", "--dry-run", "--profiles", self.t.profiles]) self.assertEqual(rc, 0, buf.getvalue()) def test_filament_id_and_setting_id_together_are_rejected(self): @@ -1584,7 +1570,7 @@ class TestCli(unittest.TestCase): # quietly mean "both". with self.assertRaises(SystemExit) as caught: with contextlib.redirect_stderr(io.StringIO()): - afi.main(["--generate", "--filament-id", "--setting-id", + afi.main(["generate-id", "--filament-id", "--setting-id", "--profiles", self.t.profiles]) self.assertEqual(caught.exception.code, 2) @@ -1593,14 +1579,14 @@ class TestCli(unittest.TestCase): path = self.t.preset_path("VendorA", "APLA @base") with open(path, "w", encoding="utf-8") as f: f.write("{ not json") - rc, out = self.t.cli("--generate") + rc, out = self.t.cli("generate-id") self.assertEqual(rc, 1, out) self.assertIn("error(s)", out) self.assertNotIn("SUCCESS", out) - def test_dry_run_alone_previews_generate(self): + def test_dry_run_previews_generate_id(self): before = self.t.bytes_map() - rc, out = self.t.cli("--dry-run") + rc, out = self.t.cli("generate-id", "--dry-run") self.assertEqual(rc, 0, out) self.assertIn("would ", out) self.assertIn("nothing written", out) @@ -1615,7 +1601,7 @@ class TestCli(unittest.TestCase): filament_type="PLA", compatible_printers=["P1"])) before = self.t.bytes_map() - rc, out = self.t.cli("--generate") + rc, out = self.t.cli("generate-id") self.assertEqual(rc, 0, out) after = self.t.bytes_map() @@ -1629,7 +1615,7 @@ class TestCli(unittest.TestCase): def test_dryrun_is_the_same_flag(self): before = self.t.bytes_map() - rc, out = self.t.cli("--dryrun") + rc, out = self.t.cli("generate-id", "--dryrun") self.assertEqual(rc, 0, out) self.assertIn("would ", out) # the same preview, not a silent no-op self.assertIn("nothing written", out) @@ -1637,7 +1623,7 @@ class TestCli(unittest.TestCase): def test_generate_vendor_writes_only_in_that_bundle(self): before = self.t.bytes_map() - rc, out = self.t.cli("--generate", "--vendor", "VendorA") + rc, out = self.t.cli("generate-id", "--vendor", "VendorA") self.assertEqual(rc, 0, out) after = self.t.bytes_map() changed = sorted(rel for rel in before if after[rel] != before[rel]) @@ -1646,7 +1632,7 @@ class TestCli(unittest.TestCase): self.assertTrue(rel.startswith("VendorA" + os.sep), rel) # The bundles it spared were not simply already conformant: the # un-narrowed run goes on to write in them too. - rc, out = self.t.cli("--generate") + rc, out = self.t.cli("generate-id") self.assertEqual(rc, 0, out) final = self.t.bytes_map() self.assertTrue(any(final[rel] != after[rel] for rel in after @@ -1654,13 +1640,13 @@ class TestCli(unittest.TestCase): def test_generate_unknown_vendor_returns_1(self): before = self.t.bytes_map() - rc, out = self.t.cli("--generate", "--vendor", "Nope") + rc, out = self.t.cli("generate-id", "--vendor", "Nope") self.assertEqual(rc, 1) self.assertIn("unknown vendor", out) self.assertEqual(self.t.bytes_map(), before) def test_setting_id_only_leaves_filament_ids_alone(self): - rc, out = self.t.cli("--generate", "--setting-id") + rc, out = self.t.cli("generate-id", "--setting-id") self.assertEqual(rc, 0, out) root = load_json_file(self.t.preset_path("VendorA", "APLA @base")) self.assertEqual(root["filament_id"], "AX01") # not re-minted @@ -1671,7 +1657,7 @@ class TestCli(unittest.TestCase): "APLA @P1")) def test_filament_id_only_inserts_no_setting_id(self): - rc, out = self.t.cli("--generate", "--filament-id") + rc, out = self.t.cli("generate-id", "--filament-id") self.assertEqual(rc, 0, out) root = load_json_file(self.t.preset_path("VendorA", "APLA @base")) self.assertEqual(root["filament_id"], @@ -1680,24 +1666,40 @@ class TestCli(unittest.TestCase): self.assertNotIn( "setting_id", load_json_file(self.t.preset_path("VendorA", name))) - def test_check_mode_returns_1_on_errors(self): - # What CI keys off: --check exits nonzero when the tree does not match - # the snapshot it is validated against. + def test_check_returns_1_on_errors(self): + # What CI keys off: check exits nonzero when the tree does not match the + # snapshot it is validated against. before = self.t.bytes_map() - rc, out = self.t.cli("--check") + rc, out = self.t.cli("check") self.assertEqual(rc, 1) - self.assertIn("error(s)", out) - self.assertEqual(self.t.bytes_map(), before) # --check never writes + self.assertIn("Files with errors", out) + self.assertEqual(self.t.bytes_map(), before) # check never writes + + def test_check_vendor_narrows_the_per_vendor_pass(self): + # check_profile.sh passes --vendor to this command, so it has to be + # accepted -- and it must narrow only the per-vendor half. + rc, out = self.t.cli("check", "--vendor", "VendorA") + self.assertEqual(rc, 1, out) # the tree-wide checks still ran + self.assertIn("Checked vendors : 1", out) + + def test_an_empty_vendor_means_every_vendor(self): + # check_profile.sh cannot expand an empty array under set -u, so it + # passes --vendor "" to mean "all of them". + _rc, scoped = self.t.cli("check", "--vendor", "") + _rc, unscoped = self.t.cli("check") + self.assertEqual(scoped, unscoped) def test_removed_and_conflicting_flags_are_rejected(self): - for argv in (["--remint", "VendorA"], # removed mode - ["--mint", "A/B/C"], # removed mode - ["--drop-redundant-ids", "VendorA"], # removed mode - ["--assign"], # removed mode - ["--generate", "--check"], # two modes - ["--vendor", "VendorA"], # narrowing without a mode - ["--filament-id"], # narrowing without a mode - ["--check", "--vendor", "VendorA"]): # narrowing on --check + for argv in (["--remint", "VendorA"], # removed mode + ["--generate"], # the pre-subcommand flag + ["--check"], # the pre-subcommand flag + ["--update-snapshot"], # the pre-subcommand flag + ["nonsense"], # not a command + ["generate-id", "--filament-id", "--setting-id"], + ["generate-id", "--materials"], # check's option + ["check", "--filament-id"], # generate-id's option + ["normalize", "--snapshot", "x"], # not a snapshot command + ["normalize", "--profile-type", "nozzle"]): # not a profile type with self.subTest(argv=argv): with self.assertRaises(SystemExit) as cm, \ contextlib.redirect_stdout(io.StringIO()), \ @@ -1722,7 +1724,7 @@ class TestRealTree(unittest.TestCase): # The exact CI invocation, return code included. buf = io.StringIO() with contextlib.redirect_stdout(buf): - rc = afi.main(["--check"]) + rc = afi.main(["check"]) self.assertEqual(rc, 0, buf.getvalue()) def test_every_instantiated_filament_resolves_an_id(self): diff --git a/scripts/tests/test_profile_tool.py b/scripts/tests/test_profile_tool.py new file mode 100644 index 0000000000..b96ea44e49 --- /dev/null +++ b/scripts/tests/test_profile_tool.py @@ -0,0 +1,854 @@ +#!/usr/bin/env python3 +"""Tests for the tree-maintenance half of scripts/orca_profile_tool.py: the +normalize, trim, update-index and check commands, and the subcommand dispatch that +reaches them (stdlib unittest, no external deps). + +The id halves are covered by test_filament_id.py and test_setting_id.py. + +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 + +sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) + +import orca_profile_tool as apt # noqa: E402 + +REPO_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..")) +REAL_PROFILES = os.path.join(REPO_ROOT, "resources", "profiles") + + +class Tree: + """A throwaway resources/profiles-shaped directory built one file at a time. + + Nothing is written implicitly: index entries are added by index(), so a test + can produce exactly the mismatch it is about (a file no list references, a + list naming a file that is not there, a preset whose name disagrees with the + index). + """ + + def __init__(self): + self.dir = tempfile.mkdtemp(prefix="profile_tool_test_") + self.profiles = os.path.join(self.dir, "profiles") + os.makedirs(self.profiles) + + def cleanup(self): + shutil.rmtree(self.dir, ignore_errors=True) + + def index_path(self, vendor): + return os.path.join(self.profiles, vendor + ".json") + + def add_vendor(self, vendor): + for sub in apt.PROFILE_SUBDIRS: + os.makedirs(os.path.join(self.profiles, vendor, sub), exist_ok=True) + if not os.path.exists(self.index_path(vendor)): + self.write_index(vendor, {"name": vendor, "version": "01.00.00.00"}) + return self + + def write_index(self, vendor, index): + with open(self.index_path(vendor), "w", encoding="utf-8", newline="\n") as f: + json.dump(index, f, indent=4, ensure_ascii=False) + f.write("\n") + + def read_index(self, vendor): + with open(self.index_path(vendor), encoding="utf-8-sig") as f: + return json.load(f) + + def index(self, vendor, section, name, sub_path): + index = self.read_index(vendor) + index.setdefault(section + "_list", []).append( + {"name": name, "sub_path": sub_path}) + self.write_index(vendor, index) + + def path(self, vendor, rel): + return os.path.join(self.profiles, vendor, rel.replace("/", os.sep)) + + def write(self, vendor, rel, data): + """Write a preset at /; returns its path.""" + self.add_vendor(vendor) + path = self.path(vendor, rel) + os.makedirs(os.path.dirname(path), exist_ok=True) + with open(path, "w", encoding="utf-8", newline="\n") as f: + json.dump(data, f, indent=4, ensure_ascii=False) + f.write("\n") + return path + + def write_raw(self, vendor, rel, raw): + self.add_vendor(vendor) + path = self.path(vendor, rel) + os.makedirs(os.path.dirname(path), exist_ok=True) + with open(path, "wb") as f: + f.write(raw) + return path + + def read(self, vendor, rel): + with open(self.path(vendor, rel), encoding="utf-8-sig") as f: + return json.load(f) + + def raw(self, vendor, rel): + with open(self.path(vendor, rel), "rb") as f: + return f.read() + + def bytes_map(self): + """Every file in the tree -> its bytes, for "nothing was written" asserts.""" + out = {} + for root, dirs, files in os.walk(self.profiles): + dirs.sort() + for name in sorted(files): + path = os.path.join(root, name) + with open(path, "rb") as f: + out[os.path.relpath(path, self.profiles)] = f.read() + return out + + +class TreeCase(unittest.TestCase): + def setUp(self): + self.t = Tree() + self.addCleanup(self.t.cleanup) + + def run_command(self, *argv): + """main() against this tree, capturing stdout.""" + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + rc = apt.main([*argv, "--profiles", self.t.profiles]) + return rc, buf.getvalue() + + +# --------------------------------------------------------------------------- +# normalize +# --------------------------------------------------------------------------- + +class TestNormalize(TreeCase): + def test_a_missing_type_is_filled_in_from_the_directory(self): + self.t.write("V", "filament/A.json", {"name": "A"}) + self.t.write("V", "process/B.json", {"name": "B"}) + rc, out = self.run_command("normalize") + self.assertEqual(rc, 0, out) + self.assertEqual(self.t.read("V", "filament/A.json")["type"], "filament") + self.assertEqual(self.t.read("V", "process/B.json")["type"], "process") + + def test_the_machine_folder_splits_on_the_preset_name(self): + # Orca keeps machine models in machine/ next to the nozzle variants that + # are machines; only the name tells them apart. + self.t.write("V", "machine/M.json", {"name": "V Printer"}) + self.t.write("V", "machine/N.json", {"name": "V Printer 0.4 nozzle"}) + rc, out = self.run_command("normalize") + self.assertEqual(rc, 0, out) + self.assertEqual(self.t.read("V", "machine/M.json")["type"], "machine_model") + self.assertEqual(self.t.read("V", "machine/N.json")["type"], "machine") + + def test_dropped_keys_go_and_filament_vectors_are_arrayified(self): + self.t.write("V", "filament/A.json", { + "type": "filament", "name": "A", "version": "1.2.3", + "is_custom_defined": "1", "filament_type": "PLA", + "filament_vendor": "AV", "travel_speed": 200}) + rc, out = self.run_command("normalize") + self.assertEqual(rc, 0, out) + data = self.t.read("V", "filament/A.json") + self.assertNotIn("version", data) + self.assertNotIn("is_custom_defined", data) + self.assertNotIn("travel_speed", data) # a process setting, not a filament one + self.assertEqual(data["filament_type"], ["PLA"]) + self.assertEqual(data["filament_vendor"], ["AV"]) + + def test_the_larger_extruder_clearance_wins(self): + # Keeping the smaller one would licence a toolhead collision. + self.t.write("V", "machine/M.json", { + "type": "machine", "name": "M 0.4 nozzle", + "extruder_clearance_radius": "45", "extruder_clearance_max_radius": "68"}) + self.t.write("V", "machine/N.json", { + "type": "machine", "name": "N 0.4 nozzle", + "extruder_clearance_radius": "68", "extruder_clearance_max_radius": "45"}) + rc, out = self.run_command("normalize") + self.assertEqual(rc, 0, out) + kept = self.t.read("V", "machine/M.json") + self.assertNotIn("extruder_clearance_radius", kept) + self.assertEqual(kept["extruder_clearance_max_radius"], "68") + kept = self.t.read("V", "machine/N.json") + self.assertNotIn("extruder_clearance_max_radius", kept) + self.assertEqual(kept["extruder_clearance_radius"], "68") + + def test_a_rewritten_file_leads_with_its_identifying_keys(self): + self.t.write("V", "filament/A.json", { + "filament_cost": [20], "name": "A", "instantiation": "true", + "inherits": "base", "version": "1"}) + rc, out = self.run_command("normalize") + self.assertEqual(rc, 0, out) + keys = list(self.t.read("V", "filament/A.json")) + self.assertEqual(keys[:4], ["type", "name", "inherits", "instantiation"]) + + def test_a_conforming_tree_is_left_byte_identical(self): + self.t.write("V", "filament/A.json", {"type": "filament", "name": "A"}) + before = self.t.bytes_map() + rc, out = self.run_command("normalize") + self.assertEqual(rc, 0, out) + self.assertEqual(self.t.bytes_map(), before) + + def test_force_rewrites_even_a_conforming_file(self): + self.t.write_raw("V", "filament/A.json", + b'{"name":"A","type":"filament"}') + rc, out = self.run_command("normalize", "--force") + self.assertEqual(rc, 0, out) + self.assertEqual(self.t.raw("V", "filament/A.json"), + b'{\n\t"type": "filament",\n\t"name": "A"\n}\n') + + def test_dry_run_writes_nothing(self): + self.t.write("V", "filament/A.json", {"name": "A"}) + before = self.t.bytes_map() + rc, out = self.run_command("normalize", "--dry-run") + self.assertEqual(rc, 0, out) + self.assertIn("would be", out) + self.assertEqual(self.t.bytes_map(), before) + + def test_profile_type_confines_the_run(self): + self.t.write("V", "filament/A.json", {"name": "A"}) + self.t.write("V", "process/B.json", {"name": "B"}) + rc, out = self.run_command("normalize", "--profile-type", "filament") + self.assertEqual(rc, 0, out) + self.assertEqual(self.t.read("V", "filament/A.json")["type"], "filament") + self.assertNotIn("type", self.t.read("V", "process/B.json")) + + def test_an_unreadable_profile_is_reported_not_swallowed(self): + self.t.write_raw("V", "filament/A.json", b"{ not json") + rc, out = self.run_command("normalize") + self.assertEqual(rc, 1, out) + self.assertIn("ERROR", out) + self.assertEqual(self.t.raw("V", "filament/A.json"), b"{ not json") + + def test_a_directory_without_an_index_is_not_a_bundle(self): + # resources/profiles also holds non-bundle entries (blacklist.json, the + # untracked user/ directory); only a directory WITH an index is a vendor. + stray = os.path.join(self.t.profiles, "user", "filament") + os.makedirs(stray) + with open(os.path.join(stray, "A.json"), "wb") as f: + f.write(b'{"name": "A"}') + self.t.write("V", "filament/A.json", {"name": "A"}) + rc, out = self.run_command("normalize") + self.assertEqual(rc, 0, out) + self.assertFalse(os.path.exists(os.path.join(self.t.profiles, "user.json"))) + with open(os.path.join(stray, "A.json"), "rb") as f: + self.assertEqual(f.read(), b'{"name": "A"}') + + +# --------------------------------------------------------------------------- +# trim +# --------------------------------------------------------------------------- + +class TestTrim(TreeCase): + def bundle(self): + self.t.write("V", "filament/Listed.json", + {"type": "filament", "name": "Listed"}) + self.t.index("V", "filament", "Listed", "filament/Listed.json") + return self.t + + def test_an_unindexed_preset_is_removed(self): + self.bundle().write("V", "filament/Orphan.json", + {"type": "filament", "name": "Orphan"}) + rc, out = self.run_command("trim") + self.assertEqual(rc, 0, out) + self.assertTrue(os.path.exists(self.t.path("V", "filament/Listed.json"))) + self.assertFalse(os.path.exists(self.t.path("V", "filament/Orphan.json"))) + + def test_a_dotted_sub_path_still_names_its_file(self): + # Index entries are hand-written; "filament/./X.json" is the same file. + self.bundle() + self.t.write("V", "filament/Dotted.json", + {"type": "filament", "name": "Dotted"}) + self.t.index("V", "filament", "Dotted", "filament/./Dotted.json") + rc, out = self.run_command("trim") + self.assertEqual(rc, 0, out) + self.assertTrue(os.path.exists(self.t.path("V", "filament/Dotted.json"))) + + def test_an_unparsable_file_is_kept_and_reported(self): + self.bundle().write_raw("V", "filament/Broken.json", b"{ not json") + rc, out = self.run_command("trim") + self.assertEqual(rc, 0, out) + self.assertIn("WARNING", out) + self.assertTrue(os.path.exists(self.t.path("V", "filament/Broken.json"))) + + def test_a_data_file_is_not_a_preset(self): + self.bundle().write("V", "filament/filaments_color_codes.json", + {"data": [], "total": 0}) + rc, out = self.run_command("trim") + self.assertEqual(rc, 0, out) + self.assertTrue(os.path.exists( + self.t.path("V", "filament/filaments_color_codes.json"))) + + def test_an_inherited_base_is_kept_and_reported(self): + # Neither file loads -- the loader only reads indexed sub_paths -- but + # deleting the parent destroys the only record of what the indexed child + # was written against, so that is a maintainer's call, not trim's. + self.bundle() + self.t.write("V", "machine/base.json", + {"type": "machine", "name": "V base"}) + self.t.write("V", "machine/mid.json", + {"type": "machine", "name": "V mid", "inherits": "V base"}) + self.t.write("V", "machine/M.json", + {"type": "machine", "name": "M 0.4 nozzle", "inherits": "V mid"}) + self.t.index("V", "machine", "M 0.4 nozzle", "machine/M.json") + rc, out = self.run_command("trim") + self.assertEqual(rc, 0, out) + # ... and the chain is followed: mid rescues base in a second pass. + self.assertTrue(os.path.exists(self.t.path("V", "machine/mid.json"))) + self.assertTrue(os.path.exists(self.t.path("V", "machine/base.json"))) + self.assertIn("inherited from", out) + + def test_a_stale_copy_of_an_indexed_profile_is_removed(self): + # "inherits" resolves by preset name, so the indexed base is the parent the + # child actually gets; the unindexed twin is a leftover the loader never + # reaches, and being named in an inherits does not earn it a reprieve. + self.bundle() + self.t.write("V", "machine/HSN/base.json", + {"type": "machine", "name": "V base"}) + self.t.index("V", "machine", "V base", "machine/HSN/base.json") + self.t.write("V", "machine/base.json", + {"type": "machine", "name": "V base"}) + self.t.write("V", "machine/M.json", + {"type": "machine", "name": "M 0.4 nozzle", "inherits": "V base"}) + self.t.index("V", "machine", "M 0.4 nozzle", "machine/M.json") + rc, out = self.run_command("trim") + self.assertEqual(rc, 0, out) + self.assertTrue(os.path.exists(self.t.path("V", "machine/HSN/base.json"))) + self.assertFalse(os.path.exists(self.t.path("V", "machine/base.json"))) + self.assertNotIn("WARNING", out) + self.assertIn('machine/HSN/base.json is the profile named "V base"', out) + + def test_dry_run_deletes_nothing(self): + self.bundle().write("V", "filament/Orphan.json", + {"type": "filament", "name": "Orphan"}) + before = self.t.bytes_map() + rc, out = self.run_command("trim", "--dry-run") + self.assertEqual(rc, 0, out) + self.assertIn("would be removed", out) + self.assertEqual(self.t.bytes_map(), before) + + +# --------------------------------------------------------------------------- +# update-index +# --------------------------------------------------------------------------- + +class TestUpdateIndex(TreeCase): + def test_every_profile_on_disk_lands_in_its_own_section(self): + self.t.write("V", "filament/A.json", {"type": "filament", "name": "A"}) + self.t.write("V", "process/B.json", {"type": "process", "name": "B"}) + self.t.write("V", "machine/M.json", {"type": "machine", "name": "M"}) + self.t.write("V", "machine/MM.json", {"type": "machine_model", "name": "MM"}) + rc, out = self.run_command("update-index") + self.assertEqual(rc, 0, out) + index = self.t.read_index("V") + self.assertEqual(index["filament_list"], + [{"name": "A", "sub_path": "filament/A.json"}]) + self.assertEqual(index["process_list"], + [{"name": "B", "sub_path": "process/B.json"}]) + self.assertEqual(index["machine_list"], + [{"name": "M", "sub_path": "machine/M.json"}]) + self.assertEqual(index["machine_model_list"], + [{"name": "MM", "sub_path": "machine/MM.json"}]) + + def test_parents_are_listed_before_their_children(self): + # The loader resolves inherits in one pass over the list. + for name, parent in (("C", "B"), ("A", None), ("B", "A")): + data = {"type": "filament", "name": name} + if parent: + data["inherits"] = parent + self.t.write("V", f"filament/{name}.json", data) + rc, out = self.run_command("update-index") + self.assertEqual(rc, 0, out) + self.assertEqual([e["name"] for e in self.t.read_index("V")["filament_list"]], + ["A", "B", "C"]) + # inherits is ordering input only; it never lands in the index. + for entry in self.t.read_index("V")["filament_list"]: + self.assertEqual(sorted(entry), ["name", "sub_path"]) + + def test_a_profile_with_no_usable_type_is_reported_not_dropped(self): + self.t.write("V", "filament/A.json", {"type": "filament", "name": "A"}) + self.t.write("V", "filament/B.json", {"name": "B"}) + rc, out = self.run_command("update-index") + self.assertEqual(rc, 1, out) + self.assertIn("cannot be indexed", out) + self.assertIn("filament/B.json", out) + + def test_two_profiles_claiming_one_name_leave_the_index_alone(self): + # The bundle holds one profile per name, so a rebuild would pick a winner by + # directory order and drop the other without a word. + self.t.write("V", "machine/base.json", {"type": "machine", "name": "base"}) + self.t.write("V", "machine/HSN/base.json", {"type": "machine", "name": "base"}) + self.t.index("V", "machine", "base", "machine/HSN/base.json") + before = self.t.bytes_map() + rc, out = self.run_command("update-index") + self.assertEqual(rc, 1, out) + self.assertIn('2 profiles are named "base"', out) + self.assertIn("machine/base.json", out) + self.assertIn("machine/HSN/base.json", out) + self.assertEqual(self.t.bytes_map(), before) + + def test_profile_type_rebuilds_only_that_section(self): + self.t.write("V", "filament/A.json", {"type": "filament", "name": "A"}) + self.t.write("V", "process/B.json", {"type": "process", "name": "B"}) + rc, out = self.run_command("update-index", "--profile-type", "filament") + self.assertEqual(rc, 0, out) + index = self.t.read_index("V") + self.assertEqual([e["name"] for e in index["filament_list"]], ["A"]) + self.assertNotIn("process_list", index) + + def test_an_up_to_date_index_is_left_byte_identical(self): + self.t.write("V", "filament/A.json", {"type": "filament", "name": "A"}) + self.run_command("update-index") + before = self.t.bytes_map() + rc, out = self.run_command("update-index") + self.assertEqual(rc, 0, out) + self.assertEqual(self.t.bytes_map(), before) + + def test_dry_run_writes_nothing(self): + self.t.write("V", "filament/A.json", {"type": "filament", "name": "A"}) + before = self.t.bytes_map() + rc, out = self.run_command("update-index", "--dry-run") + self.assertEqual(rc, 0, out) + self.assertIn("would be rebuilt", out) + self.assertEqual(self.t.bytes_map(), before) + + def test_a_json_file_with_no_bundle_is_never_touched(self): + # resources/profiles/blacklist.json is a .json with no directory beside + # it. Enumerating vendors by stem once wrote four empty *_list keys into it. + self.t.write("V", "filament/A.json", {"type": "filament", "name": "A"}) + stray = os.path.join(self.t.profiles, "blacklist.json") + with open(stray, "wb") as f: + f.write(b'{"filament": ["GFSA03"]}') + rc, out = self.run_command("update-index") + self.assertEqual(rc, 0, out) + with open(stray, "rb") as f: + self.assertEqual(f.read(), b'{"filament": ["GFSA03"]}') + + +# --------------------------------------------------------------------------- +# check +# --------------------------------------------------------------------------- + +class TestCheck(TreeCase): + def bundle(self): + """A bundle that passes every per-vendor check.""" + self.t.write("V", "filament/A.json", { + "type": "filament", "name": "A", "instantiation": "true", + "filament_id": "OFaaaaaa", "filament_type": ["PLA"], + "filament_vendor": ["AV"], "compatible_printers": ["M 0.4 nozzle"], + "setting_id": apt.generate_preset_setting_id("V", "filament", "A")}) + self.t.index("V", "filament", "A", "filament/A.json") + return self.t + + def per_vendor_errors(self, *argv): + """Run the per-vendor checks alone, which is what --vendor narrows.""" + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + errors = apt.check_filament_compatible_printers(self.t.profiles, "V") + name_errors, _warn = apt.check_name_consistency(self.t.profiles, "V") + errors += name_errors + errors += apt.check_vector_type_keys(self.t.profiles, "V") + errors += apt.check_filament_id_length(self.t.profiles, "V") + conflict, _warn = apt.check_conflict_keys(self.t.profiles, "V") + errors += conflict + return errors, buf.getvalue() + + def test_a_clean_bundle_reports_nothing(self): + self.bundle() + errors, out = self.per_vendor_errors() + self.assertEqual(errors, 0, out) + + def test_an_instantiated_filament_needs_compatible_printers(self): + self.bundle().write("V", "filament/B.json", { + "type": "filament", "name": "B", "instantiation": "true"}) + errors, out = self.per_vendor_errors() + self.assertGreater(errors, 0) + self.assertIn("'compatible_printers' missing", out) + + def test_a_duplicate_key_is_an_error(self): + self.bundle().write_raw("V", "filament/B.json", + b'{"type":"filament","name":"B","name":"B2"}') + errors, out = self.per_vendor_errors() + self.assertGreater(errors, 0) + self.assertIn("Duplicate key", out) + + def test_the_index_and_the_file_must_agree_on_the_name(self): + self.bundle() + self.t.write("V", "filament/C.json", {"type": "filament", "name": "Other"}) + self.t.index("V", "filament", "C", "filament/C.json") + errors, out = self.per_vendor_errors() + self.assertGreater(errors, 0) + self.assertIn("name mismatch", out) + + def test_an_index_entry_with_no_file_is_an_error(self): + self.bundle() + self.t.index("V", "filament", "Gone", "filament/Gone.json") + errors, out = self.per_vendor_errors() + self.assertGreater(errors, 0) + self.assertIn("Missing sub profile", out) + + def test_a_vector_option_may_not_be_a_scalar(self): + self.bundle().write("V", "filament/B.json", { + "type": "filament", "name": "B", "filament_type": "PLA"}) + errors, out = self.per_vendor_errors() + self.assertGreater(errors, 0) + self.assertIn("must be an array", out) + + def test_renamed_and_old_option_may_not_co_exist(self): + self.bundle().write("V", "machine/M.json", { + "type": "machine", "name": "M 0.4 nozzle", + "extruder_clearance_radius": "45", "extruder_clearance_max_radius": "68"}) + errors, out = self.per_vendor_errors() + self.assertGreater(errors, 0) + self.assertIn("Conflict keys", out) + + def test_the_length_rule_only_binds_indexed_presets(self): + # A file the index never loads cannot break AMS matching, and some + # bundles ship such orphans from before the rule existed. + self.bundle().write("V", "filament/Long.json", { + "type": "filament", "name": "Long", "filament_id": "OFtoolongforams"}) + errors, out = self.per_vendor_errors() + self.assertEqual(errors, 0, out) + self.t.index("V", "filament", "Long", "filament/Long.json") + errors, out = self.per_vendor_errors() + self.assertGreater(errors, 0) + self.assertIn("Filament id too long", out) + + def test_obsolete_keys_are_opt_in_warnings(self): + self.bundle().write("V", "filament/B.json", { + "type": "filament", "name": "B", "silent_mode": True}) + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + warnings = apt.check_obsolete_keys(self.t.profiles, "V") + self.assertEqual(warnings, 1) + self.assertIn("Obsolete key", buf.getvalue()) + + def test_a_default_material_must_exist_somewhere(self): + self.bundle().write("V", "machine/M.json", { + "type": "machine", "name": "M 0.4 nozzle", + "default_materials": "A;Nope"}) + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + errors, _warn = apt.check_machine_default_materials(self.t.profiles, "V") + self.assertEqual(errors, 1) + self.assertIn("'Nope'", buf.getvalue()) + + def names(self, vendor="V"): + """The preset name check for one bundle, which is what --vendor narrows.""" + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + errors = apt.check_preset_name_uniqueness(self.t.profiles, vendor) + return errors, buf.getvalue() + + def test_one_bundle_may_not_hold_two_profiles_of_a_name(self): + self.bundle().write("V", "filament/dup.json", { + "type": "filament", "name": "A", "instantiation": "false"}) + errors, out = self.names() + self.assertEqual(errors, 1, out) + self.assertIn('V has 2 filament profiles named "A"', out) + + def test_an_unindexed_twin_counts_as_a_duplicate(self): + # The case this check was written for: a stale copy of a base profile in + # machine/, which no per-vendor check walked, one index edit away from + # silently deciding which of the two a whole bundle inherits from. + self.bundle() + self.t.write("V", "machine/HSN/base.json", + {"type": "machine", "name": "V base"}) + self.t.index("V", "machine", "V base", "machine/HSN/base.json") + self.t.write("V", "machine/base.json", {"type": "machine", "name": "V base"}) + errors, out = self.names() + self.assertEqual(errors, 1, out) + self.assertIn("machine/HSN/base.json", out) + self.assertIn("machine/base.json", out) + + def test_one_name_in_two_types_is_not_a_clash(self): + self.bundle() + self.t.write("V", "process/same.json", {"type": "process", "name": "A"}) + errors, out = self.names() + self.assertEqual(errors, 0, out) + + def test_a_name_is_per_bundle_not_global(self): + # fdm_machine_common exists in 60 shipped bundles; the name is scoped to the + # bundle that resolves it, so sharing one across vendors is not a clash. + for vendor in ("V", "W"): + self.t.write(vendor, "machine/common.json", + {"type": "machine", "name": "fdm_machine_common"}) + self.t.index(vendor, "machine", "fdm_machine_common", "machine/common.json") + for vendor in ("V", "W"): + errors, out = self.names(vendor) + self.assertEqual(errors, 0, out) + + def coverage(self, vendor="V"): + """The index-coverage check for one bundle: (errors, gaps, output).""" + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + errors, gaps = apt.check_index_coverage(self.t.profiles, vendor) + return errors, gaps, buf.getvalue() + + def test_a_file_no_list_references_is_an_error(self): + self.bundle().write("V", "filament/Stray.json", + {"type": "filament", "name": "Stray"}) + errors, gaps, out = self.coverage() + self.assertEqual(errors, 1, out) + self.assertEqual(gaps["unindexed"], 1) + self.assertIn("no V.json list references it", out) + + def test_a_file_with_no_type_is_its_own_category(self): + # update-index cannot place it, so "add it to the index" is not the remedy. + self.bundle().write("V", "filament/Stray.json", {"name": "Stray"}) + errors, gaps, out = self.coverage() + self.assertEqual(errors, 1, out) + self.assertEqual(gaps["unindexable"], 1) + self.assertIn("declares no profile type", out) + + def test_an_unparsable_unlisted_file_is_reported_too(self): + self.bundle().write_raw("V", "filament/Broken.json", b"{ not json") + errors, gaps, out = self.coverage() + self.assertEqual(errors, 1, out) + self.assertEqual(gaps["unindexable"], 1) + + def test_a_dotted_sub_path_still_counts_as_listed(self): + self.bundle() + self.t.write("V", "filament/Dotted.json", + {"type": "filament", "name": "Dotted"}) + self.t.index("V", "filament", "Dotted", "filament/./Dotted.json") + errors, _gaps, out = self.coverage() + self.assertEqual(errors, 0, out) + + def test_a_data_file_is_not_expected_in_the_index(self): + self.bundle().write("V", "filament/filaments_color_codes.json", + {"data": [], "total": 0}) + errors, _gaps, out = self.coverage() + self.assertEqual(errors, 0, out) + + def test_a_bundle_with_no_index_is_left_to_the_name_check(self): + # Every file unlisted because there is no list at all is one problem, not + # one per file; check_name_consistency reports the missing index. + self.t.write("W", "filament/A.json", {"type": "filament", "name": "A"}) + os.remove(self.t.index_path("W")) + errors, _gaps, out = self.coverage("W") + self.assertEqual(errors, 0, out) + + def test_the_remedy_is_printed_once_not_once_per_file(self): + self.bundle() + for n in range(5): + self.t.write("V", f"filament/Stray{n}.json", + {"type": "filament", "name": f"Stray{n}"}) + self.t.write("V", "filament/NoType.json", {"name": "NoType"}) + snapshot = os.path.join(self.t.dir, "snapshot.json") + self.run_command("update-snapshot", "--snapshot", snapshot) + rc, out = self.run_command("check", "--snapshot", snapshot) + self.assertEqual(rc, 1, out) + self.assertEqual(out.count("update-index\" to add them"), 1, out) + self.assertEqual(out.count("or delete them"), 1, out) + self.assertIn("5 unreferenced file(s)", out) + self.assertIn("1 unreferenced file(s)", out) + + def test_setting_id_uniqueness_is_tree_wide(self): + # Two presets sharing vendor/type/name mint one id, so the collision + # only shows up in a pass that has seen the whole tree. + shared = apt.generate_preset_setting_id("V", "filament", "A") + for rel in ("filament/A.json", "filament/nested/A.json"): + self.t.write("V", rel, {"type": "filament", "name": "A", + "instantiation": "true", "setting_id": shared}) + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + errors = apt.check_setting_id_uniqueness(self.t.profiles) + self.assertGreater(errors, 0) + self.assertIn("globally unique", buf.getvalue()) + + def test_a_base_profile_must_not_carry_a_setting_id(self): + self.t.write("V", "filament/base.json", { + "type": "filament", "name": "base", "instantiation": "false", + "setting_id": apt.generate_preset_setting_id("V", "filament", "base")}) + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + errors = apt.check_setting_id_uniqueness(self.t.profiles) + self.assertEqual(errors, 1) + self.assertIn("must not have a", buf.getvalue()) + + +# --------------------------------------------------------------------------- +# check: normalize and update-index would change nothing +# --------------------------------------------------------------------------- + +class TestNormalized(TreeCase): + """The pass that holds a bundle to the shape normalize and update-index write.""" + + def normalize(self): + """Put the tree in that shape, the way a contributor is told to.""" + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + apt.main(["normalize", "--profiles", self.t.profiles]) + apt.main(["update-index", "--profiles", self.t.profiles]) + return buf.getvalue() + + def normalized(self, vendor="V"): + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + errors, gaps = apt.check_normalized(self.t.profiles, vendor) + return errors, gaps, buf.getvalue() + + def snapshot(self): + path = os.path.join(self.t.dir, "snapshot.json") + self.run_command("update-snapshot", "--snapshot", path) + return path + + def test_a_bundle_the_two_commands_just_wrote_reports_nothing(self): + self.t.write("V", "filament/A.json", {"type": "filament", "name": "A"}) + self.t.write("V", "process/B.json", {"type": "process", "name": "B"}) + self.normalize() + errors, _gaps, out = self.normalized() + self.assertEqual(errors, 0, out) + + def test_a_profile_fix_would_rewrite_is_an_error(self): + self.t.write("V", "filament/A.json", {"type": "filament", "name": "A"}) + self.normalize() + # version belongs to the bundle, in .json, never to a preset. + data = self.t.read("V", "filament/A.json") + data["version"] = "01.00.00.00" + self.t.write("V", "filament/A.json", data) + errors, gaps, out = self.normalized() + self.assertEqual(errors, 1, out) + self.assertEqual(gaps["unnormalized"], 1, out) + self.assertIn("V/filament/A.json: normalize would remove version", out) + + def test_an_index_update_index_would_rebuild_is_an_error(self): + for name, parent in (("B", "A"), ("A", None)): + data = {"type": "filament", "name": name} + if parent: + data["inherits"] = parent + self.t.write("V", f"filament/{name}.json", data) + self.normalize() + # Parents-first is what lets the loader resolve inherits in one pass; a + # hand-edited list that puts the child first still names every file. + index = self.t.read_index("V") + index["filament_list"].reverse() + self.t.write_index("V", index) + errors, gaps, out = self.normalized() + self.assertEqual(errors, 1, out) + self.assertEqual(gaps["stale_index"], 1, out) + self.assertIn("V.json: update-index would rebuild filament_list", out) + + def test_an_unbuildable_index_is_left_to_the_checks_that_name_it(self): + # update-index refuses to rebuild a bundle where two files claim one name, + # so "would be rebuilt" on top of the duplicate-name error would be noise. + self.t.write("V", "machine/base.json", {"type": "machine", "name": "base"}) + self.normalize() + self.t.write("V", "machine/HSN/base.json", {"type": "machine", "name": "base"}) + errors, gaps, out = self.normalized() + self.assertEqual(errors, 0, out) + self.assertEqual(gaps["stale_index"], 0, out) + + def test_a_bundle_with_no_index_still_has_its_files_checked(self): + self.t.write("V", "filament/A.json", + {"type": "filament", "name": "A", "is_custom_defined": "0"}) + os.remove(self.t.index_path("V")) + errors, gaps, out = self.normalized() + self.assertEqual(errors, 1, out) + self.assertEqual(gaps["unnormalized"], 1, out) + self.assertEqual(gaps["stale_index"], 0, out) + + def test_the_shared_base_bundle_is_covered_too(self): + # The per-vendor pass leaves OrcaFilamentLibrary out because its filaments are + # generic by design. That says nothing about the shape of its files, and + # normalize and update-index rewrite that bundle like any other. + self.t.write(apt.OFL, "filament/A.json", + {"type": "filament", "name": "A", "version": "01.00.00.00"}) + rc, out = self.run_command("check", "--snapshot", self.snapshot()) + self.assertEqual(rc, 1, out) + self.assertIn(f"{apt.OFL}/filament/A.json: normalize would remove version", out) + + def test_each_remedy_is_printed_once_for_the_whole_run(self): + for n in range(3): + self.t.write("V", f"filament/A{n}.json", + {"type": "filament", "name": f"A{n}", + "version": "01.00.00.00"}) + self.t.write("W", "filament/B.json", {"type": "filament", "name": "B"}) + rc, out = self.run_command("check", "--snapshot", self.snapshot()) + self.assertEqual(rc, 1, out) + self.assertIn("3 profile file(s) above are not what", out) + self.assertEqual(out.count('normalize" writes: run it and commit'), 1, out) + self.assertIn("2 vendor index(es) above are not what", out) + self.assertEqual(out.count('update-index" writes: run it and commit'), 1, out) + + +# --------------------------------------------------------------------------- +# CLI dispatch +# --------------------------------------------------------------------------- + +class TestDispatch(TreeCase): + def test_each_command_reaches_its_own_writer(self): + self.t.write("V", "filament/A.json", {"type": "filament", "name": "A"}) + for command, expected in (("normalize", "normalized"), + ("trim", "unreferenced"), + ("update-index", "vendor index")): + with self.subTest(command=command): + rc, out = self.run_command(command, "--dry-run") + self.assertEqual(rc, 0, out) + self.assertIn(expected, out) + + def test_an_option_belongs_to_one_command_only(self): + for argv in (["normalize", "--materials"], + ["trim", "--force"], + ["update-index", "--filament-id"], + ["check", "--profile-type", "filament"], + ["update-snapshot", "--vendor", "V"]): + with self.subTest(argv=argv): + with self.assertRaises(SystemExit) as cm, \ + contextlib.redirect_stdout(io.StringIO()), \ + contextlib.redirect_stderr(io.StringIO()): + apt.main([*argv, "--profiles", self.t.profiles]) + self.assertEqual(cm.exception.code, 2) + + def test_an_unknown_vendor_stops_the_run(self): + self.t.write("V", "filament/A.json", {"name": "A"}) + before = self.t.bytes_map() + rc, out = self.run_command("normalize", "--vendor", "Nope") + self.assertEqual(rc, 1) + self.assertIn("unknown vendor", out) + self.assertEqual(self.t.bytes_map(), before) + + def test_an_empty_vendor_means_every_vendor(self): + self.t.write("V", "filament/A.json", {"name": "A"}) + rc, out = self.run_command("normalize", "--vendor", "") + self.assertEqual(rc, 0, out) + self.assertEqual(self.t.read("V", "filament/A.json")["type"], "filament") + + +# --------------------------------------------------------------------------- +# the real tree +# --------------------------------------------------------------------------- + +@unittest.skipUnless(os.path.isdir(REAL_PROFILES), "resources/profiles not present") +class TestRealTree(unittest.TestCase): + def test_check_passes(self): + # The exact CI invocation, return code included. + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + rc = apt.main(["check"]) + self.assertEqual(rc, 0, buf.getvalue()) + + def test_the_shipped_tree_needs_no_fix(self): + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + changed, errors = apt.normalize_profiles(REAL_PROFILES, dry_run=True) + self.assertEqual(errors, 0, buf.getvalue()) + self.assertEqual(changed, 0, buf.getvalue()) + + def test_the_shipped_indexes_need_no_rebuild(self): + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + changed, errors = apt.update_profile_indexes(REAL_PROFILES, dry_run=True) + self.assertEqual(errors, 0, buf.getvalue()) + self.assertEqual(changed, 0, buf.getvalue()) + + def test_no_shipped_bundle_is_a_stray_json_file(self): + # blacklist.json has no directory beside it, so it is not a vendor. + self.assertNotIn("blacklist", apt.list_vendor_names(REAL_PROFILES)) + + +if __name__ == "__main__": + unittest.main() diff --git a/scripts/tests/test_setting_id.py b/scripts/tests/test_setting_id.py index 95e447d03c..f27438788f 100644 --- a/scripts/tests/test_setting_id.py +++ b/scripts/tests/test_setting_id.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -"""Tests for the setting_id half of scripts/orca_id_tool.py (stdlib unittest, no +"""Tests for the setting_id half of scripts/orca_profile_tool.py (stdlib unittest, no external deps). Run from the repo root: python -m unittest discover -s scripts/tests -v @@ -17,7 +17,7 @@ import uuid sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) -import orca_id_tool as afi # noqa: E402 +import orca_profile_tool 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") @@ -246,7 +246,7 @@ class TestBase62Tail(unittest.TestCase): class TestAssignment(SettingTreeCase): def test_instantiation_is_read_exactly_as_the_validator_reads_it(self): - # orca_extra_profile_check.py tests `instantiation == "true"` strictly. + # check_setting_id_uniqueness tests `instantiation == "true"` strictly. # Anything looser here would hand an id to a preset the validator calls # a base profile, and the two would fight over it on every run. for name, value in [("Boolean", True), ("Capitalised", "True"), @@ -852,7 +852,7 @@ class TestCli(SettingTreeCase): self.t.write("VendorA", "machine", preset("P1 0.4 nozzle", type_name="machine")) - rc, out = self.main(["--generate", "--setting-id", + rc, out = self.main(["generate-id", "--setting-id", "--profiles", self.t.profiles]) self.assertEqual(rc, 0, out) @@ -874,13 +874,13 @@ class TestCli(SettingTreeCase): def test_dry_run_setting_id_writes_nothing(self): self.t.write("VendorA", "filament", preset("A PLA @P1")) before = self.t.bytes_map() - rc, out = self.main(["--generate", "--setting-id", "--dry-run", + rc, out = self.main(["generate-id", "--setting-id", "--dry-run", "--profiles", self.t.profiles]) self.assertEqual(rc, 0, out) self.assertIn("1 file(s) would change", out) # there WAS one to write self.assertEqual(self.t.bytes_map(), before) # the real run then writes exactly it - rc, out = self.main(["--generate", "--setting-id", + rc, out = self.main(["generate-id", "--setting-id", "--profiles", self.t.profiles]) self.assertEqual(rc, 0, out) self.assertIn("1 file(s) changed", out) @@ -888,7 +888,7 @@ class TestCli(SettingTreeCase): afi.generate_preset_setting_id("VendorA", "filament", "A PLA @P1")) - def test_setting_id_without_generate_is_a_usage_error(self): + def test_setting_id_without_a_command_is_a_usage_error(self): with contextlib.redirect_stderr(io.StringIO()), \ self.assertRaises(SystemExit) as cm: afi.main(["--setting-id", "--profiles", self.t.profiles]) diff --git a/scripts/update_bambu_filament_ids.py b/scripts/update_bambu_filament_ids.py index 539376599e..457a0347aa 100644 --- a/scripts/update_bambu_filament_ids.py +++ b/scripts/update_bambu_filament_ids.py @@ -1,7 +1,7 @@ #!/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 orca_id_tool.py) +content-addressed filament_id ("OF" + 6 base62 chars, see orca_profile_tool.py) to Bambu Lab's own AMS/RFID catalog id ("GF..." etc.) for the subset of filament products Bambu ships. @@ -54,7 +54,7 @@ import tempfile import datetime sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) -from orca_id_tool import ( # noqa: E402 +from orca_profile_tool import ( # noqa: E402 BAMBU_MAP_PATH, OFL, PROFILES_DIR, diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index d4209abe1f..2358680fbc 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -545,7 +545,7 @@ std::string generate_preset_setting_id(const std::string& vendor, const std::str return ""; // Dedicated namespace for preset setting_ids, distinct from the cloud per-user - // namespace (OrcaCloudServiceAgent). Keep in sync with scripts/orca_id_tool.py; + // namespace (OrcaCloudServiceAgent). Keep in sync with scripts/orca_profile_tool.py; // never change this constant. static const boost::uuids::uuid vendor_namespace = boost::uuids::string_generator()("c1f4d9e2-7a3b-5c8d-9e0f-1a2b3c4d5e6f"); diff --git a/src/libslic3r/Preset.hpp b/src/libslic3r/Preset.hpp index 73052678e8..c66518e29d 100644 --- a/src/libslic3r/Preset.hpp +++ b/src/libslic3r/Preset.hpp @@ -93,8 +93,8 @@ class PresetBundle; // Deterministic preset setting_id: uuid5(vendor/type/name) -> 16 base62 chars. // Pure function of a system preset's identity, so the value can be assigned by -// scripts/orca_id_tool.py and recomputed here when a profile ships without it. -// MUST stay byte-identical to scripts/orca_id_tool.py. +// scripts/orca_profile_tool.py and recomputed here when a profile ships without it. +// MUST stay byte-identical to scripts/orca_profile_tool.py. // This is NOT the per-user cloud-sync setting_id // (OrcaCloudServiceAgent::generate_uuid_for_setting_id) - do not conflate them. std::string generate_preset_setting_id(const std::string& vendor, diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 54e5db27e4..746856906c 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -6783,7 +6783,7 @@ std::string PresetBundle::load_vendor_preset( loaded.description = entry.description; loaded.setting_id = entry.setting_id; // Derive the preset setting_id on the fly when a profile ships without one, - // matching scripts/orca_id_tool.py. Only instantiated presets carry an id; + // matching scripts/orca_profile_tool.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") diff --git a/tests/libslic3r/test_preset_setting_id.cpp b/tests/libslic3r/test_preset_setting_id.cpp index 8347fa7089..5c06335381 100644 --- a/tests/libslic3r/test_preset_setting_id.cpp +++ b/tests/libslic3r/test_preset_setting_id.cpp @@ -5,10 +5,10 @@ using namespace Slic3r; // Golden vectors from the Python reference generate_preset_setting_id (defined in -// scripts/orca_id_tool.py). The C++ generate_preset_setting_id() MUST stay byte-identical +// scripts/orca_profile_tool.py). The C++ generate_preset_setting_id() MUST stay byte-identical // to it, otherwise app-side on-the-fly ids would diverge from the // script-assigned ones in the profiles. Regenerate a vector with: -// python3 -c "import sys; sys.path.insert(0, 'scripts'); from orca_id_tool import generate_preset_setting_id as g; print(g('Afinia','filament','Afinia ABS @Afinia H400'))" +// python3 -c "import sys; sys.path.insert(0, 'scripts'); from orca_profile_tool import generate_preset_setting_id as g; print(g('Afinia','filament','Afinia ABS @Afinia H400'))" TEST_CASE("preset setting_id matches the Python reference", "[Preset][setting_id]") { struct Vec { const char* vendor; const char* type; const char* name; const char* expected; }; const Vec vectors[] = {