Compare commits

...
Author SHA1 Message Date
Ian Chua b29f06a0ab fix: clang-tidy 2026-10-12 18:49:28 +08:00
Ian Chua 9ec0d39592 Merge branch 'main' into fix/isolate-plugin-browser-session 2026-10-12 18:35:44 +08:00
HanifKoh c55f9c2251 Add a /bot fix-tidy Command That Suggests clang-tidy's Missing Includes (#16398)
* Add a /bot fix-tidy Command That Pushes clang-tidy's Missing Includes

A maintainer comments /bot fix-tidy on a PR. A read-only job runs
scripts/run_clang_tidy.sh --fix on the PR's merge commit and returns the
patch; a second job, which never runs the PR's code, accepts it only when
it adds nothing but #include lines to C++ files the PR already changes,
then commits it on the PR head and pushes with CLANG_TIDY_BOT_TOKEN.

* Post clang-tidy's Fix as Review Suggestions Instead of Pushing It

A failed clang-tidy check now runs once more with --fix and uploads the
patch as the clang-tidy-fix artifact; the check still fails. /bot
fix-tidy downloads that patch for the PR's latest commit, checks it adds
only includes to C++ files the PR changes, and posts one review: a
one-click suggestion for each include on a line the PR's diff shows, and
the whole patch with a git apply command. Nothing is pushed and no PR
code runs in the bot, so the PR's author can run it too and no token is
needed.

* Make the clang-tidy Fix in Its Own PR-Scoped Workflow on Request

clang_tidy.yml is back to main's version. clang_tidy_fix.yml runs on
every PR push but skips its job on the first attempt; /bot fix-tidy
re-runs it, so run_clang_tidy.sh --fix runs in the PR's own context
with a read-only token and the PR's cache, never main's, and the PR's
author can ask for it. When that re-run finishes, the bot posts the
patch as review suggestions as before. When the clang-tidy step fails,
the bot also comments asking the author to run the script or the
command, edits that comment on later failures, and deletes it once the
check passes.

* Give the clang-tidy Bot Write Access to PRs It Answers

* Tell /bot fix-tidy Users How to Start a Fix Run When There Is None to Re-Run
2026-10-12 18:31:03 +08:00
SoftFever d2675f15d1 Fix Qidi start G-code ignoring the selected plate type (#16372)
# Description

With "Support multi bed types" enabled on a Qidi printer, the
first-layer bed temperature was always taken from the Smooth PEI / High
Temp Plate setting, whichever plate type was selected.

The slicer computes the right value (`first_layer_bed_temperature` in
the G-code footer follows the selected plate), but the machine start
G-code of these presets hardcoded `[hot_plate_temp_initial_layer]`:

- `fdm_qidi_x3_common` (base of X-Max 3, X-Plus 3, X-Smart 3, X-Plus 4,
Q1 Pro)
- `Qidi Q1 Pro 0.4 nozzle`
- `Qidi X-CF Pro 0.4 nozzle`

They now use `[bed_temperature_initial_layer_single]`, which follows the
selected plate type, as most other profiles do. The Qidi bundle version
is bumped to `02.04.00.17`.

With "Support multi bed types" disabled, these printers use the default
plate (Smooth PEI / High Temp Plate), so the temperature is unchanged
there.

# Screenshots/Recordings/Graphs

N/A — profile change only.

## Tests

`python3 scripts/orca_profile_tool.py check` passes.

Sliced on Qidi X-Max 3 0.4 nozzle with "Support multi bed types"
enabled, `0.20mm Standard @Qidi XMax3`, `Generic PLA @Qidi`, with a
different bed temperature set for each plate type (first layer / other
layers).

Before, with first layer set to 50–55 °C: `M190 S54` for every plate
type.

After, a two-layer print:

| Plate type | Set (first / other) | `M190` at start | `M140` at layer 2
|
| --- | --- | --- | --- |
| Cool Plate SuperTack | 51 / 61 | 51 | 61 |
| Cool Plate | 52 / 62 | 52 | 62 |
| Textured Cool Plate | 53 / 63 | 53 | 63 |
| Engineering Plate | 54 / 64 | 54 | 64 |
| Smooth PEI / High Temp Plate | 55 / 65 | 55 | 65 |
| Textured PEI Plate | 56 / 66 | 56 | 66 |

🤖 Generated with [Claude Code](https://claude.com/claude-code)4
2026-10-12 17:14:22 +08:00
HanifKoh 5371c85362 Refresh Dark Mode Colours When the System Theme Differs at Startup (#16390)
On Linux and macOS the app follows the system theme: at startup it
overwrites the saved dark_color_mode with the system appearance. The label
colours and the cached dark mode flag were already set from the saved value
by then, and the later "changed" check reads the mode only after the
overwrite, so it never fires. For that session every dialog that maps its
colours through UpdateDlgDarkUI keeps the old mode, e.g. white dialogs on a
dark main window after switching the desktop to dark, or on a fresh install
on a dark desktop.

Refresh the label colours and the flag when the system theme differs from
the saved mode.
2026-10-12 17:09:05 +08:00
Ian Chua 0b9b05ed85 fix: Isolate plugin's webview browser sessions 2026-10-12 16:44:24 +08:00
SoftFever a243941b72 Add favorite filaments to AMS filament dropdown (#13946)
# Description

## Summary:

Adds favorite filament support to the AMS material selection dropdown.

Users can now click a star icon next to a selectable filament in the AMS Materials Setting dialog to mark it as a favorite. Favorited filaments appear in a new `Favorite filaments` section at the top of the dropdown, while all compatible filaments remain available in the `All filaments` section.

This PR also adds generic right-side action icon support to Orca's custom dropdown widget:

- Adds optional action icons to `DropDown::Item`.
- Adds a new `EVT_DROPDOWN_ITEM_ACTION` event for clicks on the action icon.
- Relays the action event through `ComboBox`.
- Adds `ComboBox::RefreshDropdownIfOpen()` so callers can refresh an already-open dropdown without changing normal `ForceDropdownOpen()` behavior.

The AMS favorites implementation:

- Uses existing bundled star assets:
  - `score_star_dark` for non-favorited filaments
  - `score_star_light` for favorited filaments
- Stores favorite filament IDs in app config under `ams_favorite_filament_ids`.
- Stores stable filament IDs instead of display names
- Uses existing C-style string escaping helpers for persistence.
- Keeps Bambu/RFID/read-only slot behavior unchanged

No new external dependencies.

**Note:** `AMSMaterialsSetting` now uses Orca's custom `ComboBox` on macOS as well, because the favorite-star UI depends on the custom `DropDown` item renderer. I was able to test this on Windows, but macOS/Linux smoke testing is still needed and would be appreciated.

# Screenshots/Recordings:

https://github.com/user-attachments/assets/41e881be-d4de-4a7d-8f99-4297567adef2

<img width="494" height="36" alt="Screenshot 2026-05-30 103432" src="https://github.com/user-attachments/assets/e7c34ed3-db7a-4705-a1cd-4bfe7ac1616a" />


## Tests

Tested on Windows:

- Built OrcaSlicer locally
- Opened the Device tab with Bambu Lab printer with AMS
- Opened the AMS Materials Setting dialog from an editable AMS slot
- Confirmed clicking a star toggles favorite state.
- Star clicks do not select the filament row.
- Dropdown remains open after toggling a favorite.
- Confirmed favorited filaments appear under `Favorite filaments`.
- All compatible filaments remain visible under `All filaments`.
- Confirmed Filament still selected as before
- Confirmed favorites persist after closing and reopening the dialog.
- Confirmed favorites persist after restarting OrcaSlicer.
- Confirmed the favorite IDs are saved in `OrcaSlicer.conf` under `ams_favorite_filament_ids`.
- Bambu/RFID/read-only filament slots continue using the existing read-only display behavior.

Not tested:

- macOS
- Linux/Wayland

These should be tested, `ComboBox` behavior not tested on macOS.

[How to Download Pull Requests Artifacts for Testing](https://www.orcaslicer.com/wiki/how_to_download_pr_artifacts)
2026-10-12 16:37:29 +08:00
SoftFever 6a1a5d51e9 Show an outline star for filaments that are not favorites 2026-10-12 16:03:49 +08:00
HanifKoh e625845b34 Keep Snapshot Suppression for the Whole Object List Edit (#16388)
Five Plater::TakeSnapshot guards in GUI_ObjectList were unnamed temporaries, so snapshots were allowed again as soon as the snapshot was taken. Naming them keeps the suppression until the edit is done, as everywhere else.
2026-10-12 16:02:43 +08:00
SoftFever 01b340dee1 Fix regressions in the AMS filament favorites dropdown 2026-10-12 14:54:17 +08:00
HanifKoh 4c2a63e11e Copy Plate Pick and Pattern File Paths When Loading a G-code 3MF (#16387)
The importer assigned pick_file.empty() and pattern_bbox_file.empty(), a bool, to the string fields, storing a one-character string instead of the path.
2026-10-12 14:14:28 +08:00
HanifKoh f8cf34c55b Reset the Fan Mover Instead of Releasing It (#16386)
Clearing per-export state called unique_ptr::release(), which gives up ownership without deleting. Every export uses a new GCode, so the pointer is still empty there today and nothing leaks; reset() states the intent and would free the object if a GCode were ever reused.
2026-10-12 13:42:19 +08:00
SoftFever d007134001 fix: update translation for Assistant(HMS) in Chinese localization 2026-10-12 12:53:16 +08:00
SoftFever 00d11a7ba0 Merge branch 'main' into UI-changes 2026-10-12 12:17:21 +08:00
Šimon 70f518d87a Added new profiles for the FELIX Printers vendor (#16314)
* Added new profiles for the FELIX Printers vendor

* fixed all errors from profiles
2026-10-12 10:02:56 +08:00
Kiss Lorand f4bde2da0a Fix missing plate bed override normalization in Configuration Wizard (#16365) 2026-10-11 20:54:55 -03:00
Kris Austin d5a11eb076 ci: cancel Build all runs of closed pull requests (#16380) 2026-10-11 18:32:32 -03:00
Kris Austin 461275d9bb ci: build pushes that change deps_src or the build scripts (#16378) 2026-10-11 17:41:47 -03:00
HanifKohandraistlin7447 95d3e8eafc Queue Pull Request macOS Builds for a Free Runner (#16343)
* ci: wait for the base branch's macOS deps instead of rebuilding them

* Hold Pull Request macOS Builds Until a Runner Is Free

A pull request's macOS build now waits in one repo-wide line, from a
Linux job, until the macOS runners every active Build all run holds or
still needs leave two free. A run is let in whole: its first arch takes
both runners and its second goes straight through, since letting arches
in one at a time deadlocks with every runner held by a run waiting for
its other arch. Push, nightly and manual runs reserve two runners until
their macOS work is done, and a pull request run keeps its two until its
universal build and tests finish, so jobs that never pass the line are
accounted for. Queued jobs count as busy. API errors and a four-hour
limit let the build in rather than block it.

Co-authored-by: raistlin7447 <kris.austin@gmail.com>

* Count Pending Runs That Hold macOS Runners

Co-authored-by: raistlin7447 <kris.austin@gmail.com>

* Show the macOS Admission Checks Live in the Job Log

Co-authored-by: raistlin7447 <kris.austin@gmail.com>

* Let a Labelled Pull Request Go Ahead of the macOS Line

A pull request labelled macos-priority when its run starts waits in its
own line under the same rule, and the normal line counts every priority
run still waiting as holding two runners, so the next free runners go
to it. It still waits for runners in use and for main's reserve.

Co-authored-by: raistlin7447 <kris.austin@gmail.com>

* Let Each macOS Arch In on Its Own Without Holding an Idle Runner

Letting a pull request run in whole deadlocks when its second arch
reaches the line behind another pull request: the run holds two
runners, the pull request in front waits for them, and the second arch
never gets to check. Each arch now waits on its own. A run with one
arch let in holds a runner only until that arch's app build is done,
and a run with both holds two until its universal build and tests
finish, so whoever is first in line always gets in eventually.

Co-authored-by: raistlin7447 <kris.austin@gmail.com>

* Stop Holding Runners for a Pull Request's Universal Build and Tests

Holding two runners from a pull request's second arch until its
universal build and tests finished kept one idle through the slower
arch's build. Replaying the week of 10-03 against the real queue, that
idle capacity pushed the median pull request from under three hours to
over sixteen. Those jobs take minutes, so they now queue like any other
job, and a pull request holds a runner only for an arch that is still
building. Each arch then always needs exactly one runner.

Co-authored-by: raistlin7447 <kris.austin@gmail.com>

* Count Runs That Move Between Status Lists

A run is listed as pending while any of its jobs waits in a concurrency group, so it moves to in_progress the moment its last gate leaves the line. A check made in those seconds read the in_progress list before the move and the pending list after it, missed the run, and let in a second arch the limit had no room for. Runs created in the last day are now listed by creation time as well, and the run doing the check is read directly.

Co-authored-by: raistlin7447 <kris.austin@gmail.com>

* Log API Calls and the Rate Limit Left on Each macOS Admission Check

The calls per check grow with the number of active runs, and the token's
hourly limit is shared by the whole repository, so each check now logs how
many calls it made and what the last response says is left.

* Give the macOS Admission Jobs Fixed Names

A skipped job is listed under its unevaluated name, so every Linux and
Windows leg showed the label expression. Split the waiting job into a normal
and a priority job with fixed names, sharing their steps through a YAML
anchor.

---------

Co-authored-by: raistlin7447 <kris.austin@gmail.com>
2026-10-12 01:15:47 +08:00
Kiss Lorand 52eeb0f228 Fix arc fitting with overhang fan control (#16297) 2026-10-11 13:09:16 -03:00
HanifKoh 8145b0792f Free macOS Disk Space Only When the Build Might Not Fit (#16364) 2026-10-11 23:55:23 +08:00
Lam Wei Lun 2ccd73759f Show English context for Speed Dial search matches
Display English action names and breadcrumbs for English-only matches
Show English tab titles when tabs match only by their English names
2026-10-11 23:44:21 +08:00
SoftFever cab7a7d75f Translate the web dialogs and pages through the .po catalogs (#16363) 2026-10-11 21:52:41 +08:00
SoftFever bd125d32da Support searching the Speed Dial by English names in any UI language (#16369) 2026-10-11 21:29:06 +08:00
HanifKoh 7369674d8f Add #pragma once to Headers Without an Include Guard (#16362) 2026-10-11 17:26:05 +08:00
HanifKoh 70da7e89bb Release the Slice Button's Mouse Capture When a Press Loses Its Release (#16358) 2026-10-11 15:49:04 +08:00
HanifKoh a671bf605d Dismiss the Slice-Plate Popup on Every Path Into the Filament Grouping Dialog (#16359)
#16284 closed the Slice-plate hover popup only when the Slice button opened
the filament grouping dialog. The dialog also opens from the plate's filament
grouping icon, the preview legend, slicing notification links and the send
dialog, and a popup still shown on those paths keeps the mouse capture on
macOS and starves the modal dialog of clicks. Dismiss it in
FilamentMapDialog::ShowModal() instead, so every path is covered.

The popup could also stay up on its own on macOS: an enter event stopped its
close timer, and when the timer fired with the cursor inside it returned
without re-arming, so without a later leave event the popup never closed. On
macOS the timer now keeps running while the popup is shown and closes it once
the cursor is outside. The popup also stops and frees its timer when destroyed.
2026-10-11 15:48:49 +08:00
SoftFever bae8f64b8b Complete and refine Simplified Chinese translations (#16356)
* Complete Simplified Chinese translations

* Fix Simplified Chinese 3D view, camera and extruder terms

* Use Chinese CAD view names on the navigator cube
2026-10-11 15:35:29 +08:00
HanifKoh 2df07b7ed8 Verify the TLS Certificate When Downloading a Cloud Plugin (#16253) 2026-10-11 14:25:50 +08:00
Klober81andRodrigo Faselli 295094a594 Pack bed texture and model into printer bundles (#15965)
* feat(preset): pack bed texture and model into printer bundles

Export copies bed_custom_texture and bed_custom_model into the .orca_printer zip under bed/. The manifest lists them in printer_asset. Import extracts each file into the bundle folder and rewrites the preset to that path. A missing file is skipped. A path that leaves the bundle directory is rejected. An old bundle with no printer_asset imports as before.

* Add includes flagged by clang-tidy misc-include-cleaner

* Gate bed asset packing on an export checkbox and key printer_asset per printer

The Export Configs checkbox can leave a custom bed out of a shared printer bundle. printer_asset is keyed by each printer_config zip entry, with files under bed/<n>/, so a later multi-printer bundle does not need a second manifest. The unshipped flat printer_asset object is not read.

---------

Co-authored-by: Rodrigo Faselli <162915171+RF47@users.noreply.github.com>
2026-10-11 13:32:07 +08:00
Ian Bassi 210bc927bc Revert "Add Thai Localization (Educational / Hybrid Translation)" (#16349) 2026-10-10 22:39:45 -03:00
SoftFever 00cfb5b259 Refresh translation catalogs and fix xgettext warnings (#16346) 2026-10-11 08:45:44 +08:00
chettasit 2bd105b0ce Add Thai Localization (Educational / Hybrid Translation) (#15940)
Hi OrcaSlicer Team,I have completed the Thai localization for OrcaSlicer (over 7,000 lines).Please note: This is a "Hybrid Translation" designed specifically for educational purposes. Instead of direct literal translations (which often confuse beginners due to technical jargon), I have included brief explanations of the mechanical and physics principles directly within the UI strings.Example: For "TPU is not supported by AMS", the translation briefly explains why (because the material is soft, rubber-like, and will jam the long tubes).This approach was developed for the EDrobot project in Khon Kaen, Thailand to help STEM students and beginners understand 3D printing concepts immediately without a steep language barrier.[cite: 8] We focus on empowering students to learn robotics and 3D design effectively.[cite: 8]   I understand this makes some strings longer than standard localizations, but it has proven incredibly helpful for beginners. I would be honored if you consider adding this to the official release as the Thai language option. I am happy to maintain this file for future updates.Thank you for building such an amazing slicer!Best regards,Chetsit Srichan (EDrobot)
2026-10-11 08:34:19 +08:00
Ian BassiandRodrigo Faselli b81d761605 Refresh plate tab after bed type change (#16344)
Co-authored-by: Rodrigo Faselli <162915171+RF47@users.noreply.github.com>
2026-10-10 21:06:29 -03:00
6922edfc20 Fix Anycubic Vyper start G-code hotend wait (#16216)
* Fix Anycubic Vyper start gcode hotend wait

* Bump Anycubic profile version

---------

Co-authored-by: 陈诗健 <chenshijian@chenshijiandeMacBook-Air.local>
Co-authored-by: SoftFever <softfeverever@gmail.com>
Co-authored-by: SoftFever <103989404+SoftFever@users.noreply.github.com>
2026-10-11 07:34:11 +08:00
Javad Shafique 7ec147603f Default Bambu profiles to 3MF output (#14767) 2026-10-11 06:55:50 +08:00
Boris SamorodovandClaude Opus 5.5 546b9c621d Fix Qidi start G-code ignoring the selected plate type
The start G-code of fdm_qidi_x3_common, Qidi Q1 Pro 0.4 nozzle and
Qidi X-CF Pro 0.4 nozzle heated the bed to hot_plate_temp_initial_layer,
so with "Support multi bed types" enabled every plate type got the
Smooth PEI / High Temp Plate temperature. Use
bed_temperature_initial_layer_single, which follows the selected plate.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 00:49:25 +02:00
jorymorrison 8ee9e5915a Fix Prusa CORE One pressure advance condition in filament profiles (#16093) 2026-10-11 06:39:53 +08:00
SoftFever cd5b786704 Add AnkerMake PLA+ filament profiles (Basic, Matte, Metallic, Silk, Glitter) (#16293)
# Description

Adds Anker's own AnkerMake PLA+ filament line to the Anker vendor
bundle: **Basic, Matte, Metallic, Silk, Glitter**. Until now the bundle
only had `Generic PLA+ @Anker`.

Each filament follows the existing Anker layout. A `@Anker base` profile
(`instantiation: false`, inherits `Generic PLA+ @Anker base`,
`filament_vendor: AnkerMake`) holds the settings. An instantiated
`@Anker` profile holds only `compatible_printers`. `filament_id` and
`setting_id` were minted with `scripts/orca_profile_tool.py
generate-id`, and `Anker.json` was re-indexed with `update-index`. The
Anker vendor version goes from `02.04.00.05` to `02.04.00.06`.

## Source of the values

The values come from the AnkerMake filament profiles bundled with
**eufyMake Studio** (Anker's PrusaSlicer 2.6 fork, AGPL-3.0, source at
https://github.com/eufymake/eufyMake-PrusaSlicer-Release), in
`profiles/Anker-ini/AnkerMake base/base.ini`. OrcaSlicer is also
AGPL-3.0.

Conversion notes:
- PrusaSlicer keys are mapped to their Orca equivalents. For example,
`bed_temperature`/`first_layer_bed_temperature` go to `hot_plate_temp*`
and `textured_plate_temp*`, `fan_below_layer_time` goes to
`fan_cooling_layer_time`, `slowdown_below_layer_time` goes to
`slow_down_layer_time`, and `extrusion_multiplier` goes to
`filament_flow_ratio`. Only keys that differ from the inherited `Generic
PLA+ @Anker base` chain are written.
- Where Studio sets retraction but leaves deretraction unset (Metallic,
Silk), `filament_deretraction_speed` is set equal to the retraction
speed. That matches Prusa's "0 = same as retract" meaning.
- **Max volumetric speed is new.** Studio ships
`filament_max_volumetric_speed = 0` (uncapped) for these filaments, and
Orca has no equivalent. The caps were derived from the peak flow that
Studio's own M5C "Fast" process pushes: Basic/Matte/Glitter 22 mm³/s,
Metallic 20, Silk 13. Please treat these as the least-validated numbers
in the PR.
- Studio has pressure advance disabled for these filaments, so no PA
values are carried over.
- Colour variants are not included because they differ only in colour.
`default_filament_colour` uses each family's base colour.
- `compatible_printers` follows Studio's `compatible_printers_condition`
for each family, limited to the 0.4/0.6 printers that `Generic PLA+
@Anker` covers:
  - Basic, Glitter: M5, M5 All-Metal, M5C at 0.4 and 0.6
- Silk: 0.4 on all three, plus M5C 0.6 and M5 All-Metal 0.6 (Studio
excludes M5 0.6)
  - Matte, Metallic: 0.4 only (Studio restricts these to 0.4)
- Studio also allows Basic on 0.2 nozzles. That variant is not added,
because the 0.2 Generic profiles use a separate low-flow cap.

# Screenshots/Recordings/Graphs

N/A (profile-only change).

## Tests

- `scripts/check_profile.sh` (local twin of the CI job, run against the
full profile tree with the nightly macOS validator) passes all five
checks: `profile_tool`, `validate_system`, `validate_slice`,
`validate_filament_subtypes`, `validate_custom` (fixtures v1.9.0 to
v2.4.2).
- `python3 -m unittest discover -s scripts/tests -t scripts`: OK.
- The submitter printed with these filament settings in eufyMake Studio
on the M5C's stock brass 0.4 nozzle without issues. This Orca conversion
has been loaded and sliced in Orca 2.4.2 (as user presets inheriting the
Anker generic PLA+) but not yet printed on brass. The printer now has a
different nozzle fitted.

[How to Download Pull Requests Artifacts for
Testing](https://www.orcaslicer.com/wiki/how_to_download_pr_artifacts)

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-10-11 06:26:26 +08:00
HanifKoh d715bb760c Let Plugin Windows Be Maximized on X11 (#16335)
wxGTK types every wxDialog as a dialog window, and Mutter offers no
maximize for anything but a normal window, so the maximize button and
shortcut did nothing on GNOME under X11. Modeless plugin windows are now
normal windows, kept off the taskbar as before. Modal ones stay dialogs
so the window manager keeps routing focus from the main window to them.
2026-10-11 04:40:56 +08:00
SoftFever 63918b44a8 Merge branch 'main' into anker-ankermake-pla-plus-filaments 2026-10-10 22:41:16 +08:00
mateuszandClaude Opus 5.5 64d09c9bca Add AnkerMake PLA+ filament profiles for Anker printers
Adds AnkerMake PLA+ Basic, Matte, Metallic, Silk and Glitter, converted from eufyMake Studio's bundled AnkerMake profiles (AGPL-3.0). Bumps the Anker vendor version to 02.04.00.06.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 14:13:00 -05:00
SoftFever a13089d357 Merge branch 'main' into UI-changes 2026-06-02 14:40:05 +08:00
KrishManan fb6c93963d Add AMS filament favorites 2026-05-30 17:45:03 +08:00
KrishManan 7688f7a16c Add dropdown item action icons 2026-05-30 17:45:03 +08:00
411 changed files with 51844 additions and 12234 deletions
+6 -1
View File
@@ -7,6 +7,7 @@ on:
- release/*
paths:
- 'deps/**'
- 'deps_src/**'
- 'src/**'
- '**/CMakeLists.txt'
- 'version.inc'
@@ -14,8 +15,10 @@ on:
- 'resources/**'
- ".github/workflows/build_*.yml"
- ".github/workflows/unit_tests*.yml"
- 'build_linux.sh'
- 'build_win.bat'
- 'scripts/test_build_win.ps1'
- 'build_release_macos.sh'
- 'scripts/build_preset_cache.*'
- 'scripts/flatpak/**'
- 'scripts/msix/**'
@@ -54,7 +57,9 @@ on:
default: false
concurrency:
group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.event.pull_request.number || github.ref }}
# cancel_closed_pr_builds.yml joins this group by name, so update that file
# with any change here.
group: build-all-${{ github.event_name }}-${{ github.event.pull_request.number || github.ref }}
# Pushes don't cancel a running build, because only a finished branch build
# saves caches every pull request can restore.
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
+198 -73
View File
@@ -1,73 +1,198 @@
name: Check Cache
on:
workflow_call:
inputs:
os:
required: true
type: string
arch:
required: false
type: string
compiler:
required: false
type: string
default: msvc
build-deps-only:
required: false
type: boolean
force-build:
required: false
type: boolean
jobs:
check_cache: # determines if there is a cache and outputs variables used in caching process
name: Check Cache
runs-on: ${{ inputs.os }}
outputs:
cache-key: ${{ steps.set_outputs.outputs.cache-key }}
cache-path: ${{ steps.set_outputs.outputs.cache-path }}
valid-cache: ${{ steps.cache_deps.outputs.cache-hit }}
steps:
- name: Checkout
uses: actions/checkout@v7
with:
lfs: 'false'
- name: set outputs
id: set_outputs
env:
# Anything that changes how the tree is built belongs in the key, or a job
# restores one it cannot use. Linux amd64 passes no arch deliberately, so
# 'linux-clang' keeps the cache it already has.
cache-os: ${{ runner.os == 'macOS' && format('{0}-{1}', inputs.os, inputs.arch) || (runner.os == 'Windows' && format('windows-{0}-{1}', inputs.arch, inputs.compiler) || format('linux-clang{0}', inputs.arch && format('-{0}', inputs.arch) || '')) }}
# The Windows ARM64 deps build in build-arm64, all others under build;
# build_deps.yml and build_orca.yml pass the Windows directory to build_win.bat.
dep-folder-name: ${{ runner.os == 'macOS' && format('/{0}', inputs.arch) || (runner.os == 'Windows' && inputs.arch == 'arm64') && '-arm64/OrcaSlicer_dep' || '/OrcaSlicer_dep' }}
output-cmd: ${{ runner.os == 'Windows' && '$env:GITHUB_OUTPUT' || '"$GITHUB_OUTPUT"'}}
run: |
echo cache-key=${{ env.cache-os }}-cache-orcaslicer_deps-build-${{ hashFiles('deps/**') }} >> ${{ env.output-cmd }}
echo cache-path=${{ github.workspace }}/deps/build${{ env.dep-folder-name }} >> ${{ env.output-cmd }}
- name: load cache
id: cache_deps
uses: actions/cache@v6
with:
path: ${{ steps.set_outputs.outputs.cache-path }}
key: ${{ steps.set_outputs.outputs.cache-key }}
lookup-only: true
build_deps: # call next step
name: Build Deps
needs: [check_cache]
uses: ./.github/workflows/build_deps.yml
with:
cache-key: ${{ needs.check_cache.outputs.cache-key }}
cache-path: ${{ needs.check_cache.outputs.cache-path }}
valid-cache: ${{ needs.check_cache.outputs.valid-cache == 'true' }}
os: ${{ inputs.os }}
arch: ${{ inputs.arch }}
compiler: ${{ inputs.compiler }}
build-deps-only: ${{ inputs.build-deps-only }}
force-build: ${{ inputs.force-build }}
secrets: inherit
name: Check Cache
on:
workflow_call:
inputs:
os:
required: true
type: string
arch:
required: false
type: string
compiler:
required: false
type: string
default: msvc
build-deps-only:
required: false
type: boolean
force-build:
required: false
type: boolean
# Read by scripts/ci_deps_cache.sh.
env:
REPO: ${{ github.repository }}
WORKFLOW_REF: ${{ github.workflow_ref }}
BASE_REF: ${{ github.base_ref }}
jobs:
check_cache: # determines if there is a cache and outputs variables used in caching process
name: Check Cache
# Hosted macOS runners are scarce, so their lookup runs on Linux.
runs-on: ${{ startsWith(inputs.os, 'macos-') && 'ubuntu-24.04' || inputs.os }}
outputs:
cache-key: ${{ steps.set_outputs.outputs.cache-key }}
cache-path: ${{ steps.set_outputs.outputs.cache-path }}
valid-cache: ${{ steps.cache_deps.outputs.cache-hit }}
macos-path: ${{ steps.macos_path.outputs.path }}
key-inputs: ${{ steps.wait_check.outputs.key-inputs }}
wait-for: ${{ steps.wait_check.outputs.wait-for }}
wait-since: ${{ steps.wait_check.outputs.wait-since }}
steps:
- name: Checkout
uses: actions/checkout@v7
with:
lfs: 'false'
# The wait check compares the merge commit with its first parent.
fetch-depth: ${{ startsWith(inputs.os, 'macos-') && 2 || 1 }}
# Fetches only deps/, which the key hashes, and the wait script.
sparse-checkout: |
/deps/
/scripts/ci_deps_cache.sh
sparse-checkout-cone-mode: false
- name: set outputs
id: set_outputs
env:
# Anything that changes how the tree is built belongs in the key, or a job
# restores one it cannot use. Linux amd64 passes no arch deliberately, so
# 'linux-clang' keeps the cache it already has.
cache-os: ${{ (runner.os == 'macOS' || startsWith(inputs.os, 'macos-')) && format('{0}-{1}', inputs.os, inputs.arch) || (runner.os == 'Windows' && format('windows-{0}-{1}', inputs.arch, inputs.compiler) || format('linux-clang{0}', inputs.arch && format('-{0}', inputs.arch) || '')) }}
# The Windows ARM64 deps build in build-arm64, all others under build;
# build_deps.yml and build_orca.yml pass the Windows directory to build_win.bat.
dep-folder-name: ${{ (runner.os == 'macOS' || startsWith(inputs.os, 'macos-')) && format('/{0}', inputs.arch) || (runner.os == 'Windows' && inputs.arch == 'arm64') && '-arm64/OrcaSlicer_dep' || '/OrcaSlicer_dep' }}
output-cmd: ${{ runner.os == 'Windows' && '$env:GITHUB_OUTPUT' || '"$GITHUB_OUTPUT"'}}
run: |
echo cache-key=${{ env.cache-os }}-cache-orcaslicer_deps-build-${{ hashFiles('deps/**') }} >> ${{ env.output-cmd }}
# Relative to the workspace, which differs from the build's when this job runs on Linux.
echo cache-path=deps/build${{ env.dep-folder-name }} >> ${{ env.output-cmd }}
# actions/cache matches the path too, so a Linux lookup for macOS uses the
# workspace of a hosted macOS job.
- name: macOS cache path
id: macos_path
if: ${{ startsWith(inputs.os, 'macos-') }}
run: echo "path=/Users/runner/work/${GITHUB_REPOSITORY#*/}/${GITHUB_REPOSITORY#*/}/${{ steps.set_outputs.outputs.cache-path }}" >> "$GITHUB_OUTPUT"
- name: load cache
id: cache_deps
uses: actions/cache@v6
with:
path: ${{ steps.macos_path.outputs.path || format('{0}/{1}', github.workspace, steps.set_outputs.outputs.cache-path) }}
key: ${{ steps.set_outputs.outputs.cache-key }}
lookup-only: true
# A pull request that misses the cache can wait for a base branch build of the same deps.
- name: check for a base branch build to wait for
id: wait_check
if: ${{ startsWith(inputs.os, 'macos-') && github.event_name == 'pull_request' && steps.cache_deps.outputs.cache-hit != 'true' }}
env:
GH_TOKEN: ${{ github.token }}
run: bash scripts/ci_deps_cache.sh check
wait_for_deps:
name: Wait for base branch deps
needs: [check_cache]
if: ${{ needs.check_cache.outputs.wait-for != '' }}
runs-on: ubuntu-24.04
env:
WAIT_MINUTES: 120
# Must exceed WAIT_MINUTES.
timeout-minutes: 130
# Waiting runs queue here, and only the first one holds a runner.
concurrency:
group: deps-wait-${{ github.base_ref }}-${{ needs.check_cache.outputs.cache-key }}
queue: max
outputs:
hit: ${{ steps.lookup.outputs.cache-hit }}
steps:
- name: Checkout
uses: actions/checkout@v7
with:
sparse-checkout: scripts/ci_deps_cache.sh
sparse-checkout-cone-mode: false
- name: wait for the deps cache
env:
GH_TOKEN: ${{ github.token }}
KEY: ${{ needs.check_cache.outputs.cache-key }}
KEY_INPUTS: ${{ needs.check_cache.outputs.key-inputs }}
WAIT_FOR: ${{ needs.check_cache.outputs.wait-for }}
WAIT_SINCE: ${{ needs.check_cache.outputs.wait-since }}
ARCH: ${{ inputs.arch }}
run: bash scripts/ci_deps_cache.sh wait
- name: load cache
id: lookup
uses: actions/cache@v6
with:
path: ${{ needs.check_cache.outputs.macos-path }}
key: ${{ needs.check_cache.outputs.cache-key }}
lookup-only: true
# Hosted macOS runners are scarce, so a pull request's macOS build waits until
# one is free that push and nightly builds do not need. See the script.
macos_admission:
name: Wait for a macOS runner
needs: [check_cache, wait_for_deps]
if: ${{ !cancelled() && needs.check_cache.result == 'success' && startsWith(inputs.os, 'macos-') && github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'macos-priority') }}
runs-on: ubuntu-24.04
env:
WAIT_MINUTES: 240
PRIORITY: false
# Must exceed WAIT_MINUTES.
timeout-minutes: 250
# One line for every arch of every pull request, and only its first job polls.
concurrency:
group: macos-admission
queue: max
steps: &macos_admission_steps
- name: Checkout
uses: actions/checkout@v7
with:
sparse-checkout: scripts/ci_macos_admission.py
sparse-checkout-cone-mode: false
- name: wait for a macOS runner
env:
GH_TOKEN: ${{ github.token }}
MACOS_RUNNER_LIMIT: ${{ vars.MACOS_RUNNER_LIMIT }}
# -u, or the log shows nothing until the wait ends.
run: python3 -u scripts/ci_macos_admission.py
# The macos-priority label, when the run starts, puts a pull request in its own
# line, which the normal one yields to. The names are fixed, because a skipped
# job is listed under its unevaluated name, and the script matches both.
macos_admission_priority:
name: Wait for a macOS runner (priority)
needs: [check_cache, wait_for_deps]
if: ${{ !cancelled() && needs.check_cache.result == 'success' && startsWith(inputs.os, 'macos-') && github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'macos-priority') }}
runs-on: ubuntu-24.04
env:
WAIT_MINUTES: 240
PRIORITY: true
# Must exceed WAIT_MINUTES.
timeout-minutes: 250
concurrency:
group: macos-admission-priority
queue: max
steps: *macos_admission_steps
build_deps: # call next step
name: Build Deps
needs: [check_cache, wait_for_deps, macos_admission, macos_admission_priority]
# A failed wait counts as no cache, so the deps are built here. A failed
# admission still builds rather than skip macOS.
if: ${{ !cancelled() && needs.check_cache.result == 'success' }}
uses: ./.github/workflows/build_deps.yml
with:
cache-key: ${{ needs.check_cache.outputs.cache-key }}
cache-path: ${{ needs.check_cache.outputs.cache-path }}
valid-cache: ${{ needs.check_cache.outputs.valid-cache == 'true' || needs.wait_for_deps.outputs.hit == 'true' }}
os: ${{ inputs.os }}
arch: ${{ inputs.arch }}
compiler: ${{ inputs.compiler }}
build-deps-only: ${{ inputs.build-deps-only }}
force-build: ${{ inputs.force-build }}
secrets: inherit
+2 -2
View File
@@ -45,7 +45,7 @@ jobs:
- name: load cached deps
uses: actions/cache@v6
with:
path: ${{ inputs.cache-path }}
path: ${{ github.workspace }}/${{ inputs.cache-path }}
key: ${{ inputs.cache-key }}
- uses: lukka/get-cmake@latest
@@ -122,7 +122,7 @@ jobs:
choco install strawberryperl
}
# cache-path is the install directory inside the deps build directory.
$deps = (Split-Path "${{ inputs.cache-path }}").Replace('\', '/')
$deps = (Split-Path "${{ github.workspace }}/${{ inputs.cache-path }}").Replace('\', '/')
# -l compiles with Visual Studio's clang-cl and -x builds with Ninja; --msvc --msbuild is cl under the Visual Studio generator.
$flags = if ("${{ inputs.compiler }}" -eq "clang") { "-l", "-x" } else { "--msvc", "--msbuild" }
.\build_win.bat -d --arch ${{ inputs.arch }} --deps-dir $deps @flags
+9 -2
View File
@@ -44,7 +44,7 @@ jobs:
if: ${{ !(runner.os == 'macOS' && inputs.macos-combine-only) }}
uses: actions/cache@v6
with:
path: ${{ inputs.cache-path }}
path: ${{ github.workspace }}/${{ inputs.cache-path }}
key: ${{ inputs.cache-key }}
fail-on-cache-miss: true
@@ -179,6 +179,13 @@ jobs:
if: runner.os == 'macOS' && !inputs.macos-combine-only && !vars.SELF_HOSTED
run: |
df -hI /
# Deleting the unused Xcodes takes minutes, so only do it when the
# build might not fit. A cold build uses under 4 GiB after this step.
avail_gib=$(df -g / | awk 'NR == 2 { print $4 }')
if [ "$avail_gib" -ge 15 ]; then
echo "$avail_gib GiB free, enough for the build"
exit 0
fi
# Keep only the selected Xcode
xcode=$(basename "$(cd "$(xcode-select -p)/../.." && pwd -P)")
sudo find /Applications -maxdepth 1 -type d -name "Xcode_*.app" ! -name "$xcode" -exec rm -rf {} +
@@ -460,7 +467,7 @@ jobs:
# --tests builds the unit tests too; the unit_tests_windows_* jobs run them.
run: |
# cache-path is the install directory inside the deps build directory.
$deps = (Split-Path "${{ inputs.cache-path }}").Replace('\', '/')
$deps = (Split-Path "${{ github.workspace }}/${{ inputs.cache-path }}").Replace('\', '/')
# -l compiles with Visual Studio's clang-cl and -x builds with Ninja; --msvc --msbuild is cl under the Visual Studio generator.
$flags = if ("${{ inputs.compiler }}" -eq "clang") { "-l", "-x" } else { "--msvc", "--msbuild" }
.\build_win.bat -s --tests -i --arch ${{ inputs.arch }} --build-dir $env:BUILD_DIR --deps-dir $deps @flags
@@ -0,0 +1,21 @@
name: Cancel builds of closed pull requests
on:
# pull_request_target needs no approval for first-time contributors and must never
# check out pull request code.
pull_request_target:
types:
- closed
permissions: {}
jobs:
cancel:
# Matches the concurrency group in build_all.yml, so joining it cancels the pull
# request's unfinished Build all run.
concurrency:
group: build-all-pull_request-${{ github.event.pull_request.number }}
cancel-in-progress: true
runs-on: ubuntu-latest
steps:
- run: echo "Joined concurrency group build-all-pull_request-${{ github.event.pull_request.number }}."
+65
View File
@@ -0,0 +1,65 @@
name: clang-tidy fix
# Makes the missing-include fix that /bot fix-tidy (pr-tidy-bot.yml) posts on a
# pull request: scripts/run_clang_tidy.sh --fix on the merge commit the
# clang-tidy check runs on, uploaded as the clang-tidy-fix artifact.
#
# Every push to a PR starts this workflow, and its job skips on that first
# attempt. The bot re-runs it on request. A re-run keeps the pull_request
# context, so the PR's code runs with a read-only token, no secrets and the
# PR's own cache, never main's, whoever asked for it.
on:
pull_request:
branches:
- main
- release/*
permissions:
contents: read
jobs:
fix:
if: github.run_attempt > 1
# A hosted runner, so nothing the PR's code leaves behind outlives the job.
runs-on: ubuntu-24.04
timeout-minutes: 60
steps:
- name: Checkout
uses: actions/checkout@v7
with:
lfs: 'false'
# The PR merge commit plus its first parent, the base it is diffed against.
fetch-depth: 2
persist-credentials: false
# Parsing needs the dependency headers, not a build of this PR's deps/, so
# a PR that changes deps/ falls back to the newest cache main has.
- name: Restore cached deps
uses: actions/cache/restore@v6
with:
path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep
key: linux-clang-cache-orcaslicer_deps-build-${{ hashFiles('deps/**') }}
restore-keys: linux-clang-cache-orcaslicer_deps-build-
fail-on-cache-miss: true
- name: Apt-Install Dependencies
uses: ./.github/actions/apt-install-deps
# The status says whether findings remain that --fix cannot fix.
- name: Fix the changed lines
run: |
mkdir -p "$RUNNER_TEMP/clang-tidy-fix"
status=0
scripts/run_clang_tidy.sh --base HEAD^1 --yes --fix || status=$?
echo "$status" > "$RUNNER_TEMP/clang-tidy-fix/status"
git -c core.quotePath=false diff --no-color --no-ext-diff --src-prefix=a/ --dst-prefix=b/ \
> "$RUNNER_TEMP/clang-tidy-fix/fix.patch"
- name: Upload the fix
uses: actions/upload-artifact@v7
with:
name: clang-tidy-fix
path: ${{ runner.temp }}/clang-tidy-fix/
retention-days: 7
# A later re-run of the same run replaces the earlier fix.
overwrite: true
+476
View File
@@ -0,0 +1,476 @@
name: PR clang-tidy Bot
# Helps a pull request past the clang-tidy check.
#
# When the check fails on a PR's changes, a comment asks the author to fix it,
# either with scripts/run_clang_tidy.sh --fix or by commenting:
# /bot fix-tidy
#
# That command, from the PR's author or an account with write access, re-runs
# the PR's clang-tidy fix run (clang_tidy_fix.yml), which makes the fix in the
# PR's own context. When it finishes, the fix is posted as one review: each
# include whose place falls on a line the PR's diff shows is a suggestion GitHub
# can commit in one click, and the review's body holds the whole patch with a
# git apply command. Findings --fix cannot fix, such as a using in a header,
# are left for the check to report.
#
# No code from the PR runs here. Nothing is pushed, and the patch is only
# posted when every line it adds is an #include in a C++ file the PR changes.
#
# workflow_run matches the workflows by their name: keep "clang-tidy" and
# "clang-tidy fix" in step with clang_tidy.yml and clang_tidy_fix.yml, and
# TIDY_STEP below with the clang-tidy step's name in clang_tidy.yml.
on:
issue_comment:
types:
- created
workflow_run:
workflows:
- clang-tidy
- clang-tidy fix
types:
- completed
permissions: {}
jobs:
request:
# Skips the job unless a PR comment mentions the command.
if: >-
github.repository == 'OrcaSlicer/OrcaSlicer'
&& github.event_name == 'issue_comment'
&& github.event.issue.pull_request != null
&& contains(github.event.comment.body, '/bot fix-tidy')
permissions:
actions: write # re-run the fix run
pull-requests: write # react to and answer the comment, which is the PR's
issues: write # feedback comment + reactions
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Re-run the PR's clang-tidy fix
uses: actions/github-script@v9
with:
script: |
const MARKER = '<!-- pr-tidy-bot -->';
const FIX_WORKFLOW = 'clang_tidy_fix.yml';
const { owner, repo } = context.repo;
const issue = context.payload.issue;
const comment = context.payload.comment;
// Ignores a comment whose sender is not its author.
if (context.payload.sender.login !== comment.user.login || comment.user.type !== 'User') {
core.info('Ignoring a comment not written by its sender, or by a bot.');
return;
}
const commandLine = (comment.body || '')
.split('\n')
.map((line) => line.trim())
.find((line) => /^\/bot\s+fix-tidy\b/i.test(line));
if (!commandLine) {
core.info('No /bot fix-tidy command found.');
return;
}
const commenter = comment.user.login;
// Answers only the PR's author and maintainers, so the command cannot be used to spam.
if (commenter !== issue.user.login) {
const { data: access } = await github.rest.repos.getCollaboratorPermissionLevel({ owner, repo, username: commenter });
if (!['admin', 'write'].includes(access.permission)) {
core.info(`Ignoring /bot fix-tidy from @${commenter}: not the PR's author and no write access.`);
return;
}
}
const react = (content) =>
github.rest.reactions.createForIssueComment({ owner, repo, comment_id: comment.id, content });
async function refuse(reason) {
await react('-1');
await github.rest.issues.createComment({ owner, repo, issue_number: issue.number, body: `${MARKER}\n@${commenter} ${reason}` });
}
await react('eyes');
if (!/^\/bot\s+fix-tidy$/i.test(commandLine)) {
return refuse('`/bot fix-tidy` takes no arguments.');
}
const { data: pr } = await github.rest.pulls.get({ owner, repo, pull_number: issue.number });
if (pr.state !== 'open') {
return refuse('the PR is not open.');
}
const sha = pr.head.sha.slice(0, 10);
const { data: { workflow_runs: runs } } = await github.rest.actions.listWorkflowRuns({
owner, repo, workflow_id: FIX_WORKFLOW, event: 'pull_request', head_sha: pr.head.sha, per_page: 1
});
const run = runs[0];
// A PR last pushed before clang_tidy_fix.yml existed has no run to re-run.
if (!run) {
return refuse(`there is no clang-tidy fix run for ${sha}, the PR's latest commit. If you just pushed it, ` +
'try again in a minute. Otherwise, push a commit or merge the base branch to start one, then comment `/bot fix-tidy` again.');
}
if (run.status !== 'completed') {
// The first attempt is the one every push starts, and it makes no fix.
return refuse(run.run_attempt > 1
? `a clang-tidy fix for ${sha} is already [running](${run.html_url}). I'll post it when it finishes.`
: `the PR's checks on ${sha} are still starting. Comment \`/bot fix-tidy\` again in a minute.`);
}
// GitHub refuses to re-run a run created over 30 days ago.
try {
await github.rest.actions.reRunWorkflow({ owner, repo, run_id: run.id });
} catch (error) {
core.warning(`Re-running ${run.html_url} failed: ${error.message}`);
return refuse(`GitHub won't re-run the [clang-tidy fix run](${run.html_url}) for ${sha} (${error.message}). ` +
'Push a commit or merge the base branch to start a new one, then comment `/bot fix-tidy` again.');
}
core.info(`Re-ran ${run.html_url}`);
suggest:
# The fix run's re-runs only. Its first attempt makes no fix.
if: >-
github.repository == 'OrcaSlicer/OrcaSlicer'
&& github.event_name == 'workflow_run'
&& github.event.workflow_run.name == 'clang-tidy fix'
&& github.event.workflow_run.event == 'pull_request'
&& github.event.workflow_run.run_attempt > 1
concurrency:
group: ${{ github.workflow }}-suggest-${{ github.event.workflow_run.head_repository.full_name }}-${{ github.event.workflow_run.head_branch }}
cancel-in-progress: false
permissions:
actions: read # download the fix
contents: read # check out the PR head
pull-requests: write # the review
issues: write # feedback comment + reactions
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Find the PR and who asked
id: find
uses: actions/github-script@v9
with:
script: |
const MARKER = '<!-- pr-tidy-bot -->';
const CPP = /^(src|tests)\/.+\.(cpp|cc|cxx|hpp|h|hxx)$/;
const { owner, repo } = context.repo;
const run = context.payload.workflow_run;
// workflow_run lists no PR for a fork's branch, so the PR is found by its branch.
const { data: prs } = await github.rest.pulls.list({
owner, repo, state: 'open', head: `${run.head_repository.owner.login}:${run.head_branch}`
});
const pr = prs[0];
if (!pr) {
core.info('No open PR for this run.');
return;
}
// The latest /bot fix-tidy comment is the one this run answers.
const comments = await github.paginate(github.rest.issues.listComments, { owner, repo, issue_number: pr.number, per_page: 100 });
const request = comments.reverse().find((c) => c.user.type === 'User' && /^\s*\/bot\s+fix-tidy\s*$/im.test(c.body || ''));
const mention = request ? `@${request.user.login} ` : '';
async function refuse(reason) {
if (request) {
await github.rest.reactions.createForIssueComment({ owner, repo, comment_id: request.id, content: '-1' });
}
await github.rest.issues.createComment({ owner, repo, issue_number: pr.number, body: `${MARKER}\n${mention}${reason}` });
}
if (pr.head.sha !== run.head_sha) {
return refuse('the PR changed while I was making its clang-tidy fix. Comment `/bot fix-tidy` again.');
}
if (run.conclusion !== 'success') {
return refuse(`I couldn't make the clang-tidy fix. See the [run log](${run.html_url}).`);
}
// The right-side lines of each changed C++ file's diff: the lines a
// review comment can be placed on. A file too large for GitHub to
// show its diff has none, and gets no suggestions.
const files = await github.paginate(github.rest.pulls.listFiles, { owner, repo, pull_number: pr.number, per_page: 100 });
const ranges = {};
for (const file of files) {
if (file.status === 'removed' || !CPP.test(file.filename)) {
continue;
}
ranges[file.filename] = [...(file.patch || '').matchAll(/^@@ -\d+(?:,\d+)? \+(\d+)(?:,(\d+))? @@/gm)]
.map((m) => [Number(m[1]), Number(m[1]) + Number(m[2] ?? 1) - 1])
.filter(([first, last]) => last >= first);
}
core.setOutput('pr', pr.number);
core.setOutput('head-sha', pr.head.sha);
core.setOutput('head-repo', run.head_repository.full_name);
core.setOutput('ranges', JSON.stringify(ranges));
core.setOutput('mention', mention);
core.setOutput('request-id', request ? request.id : '');
- name: Download the fix
if: steps.find.outputs.pr != ''
uses: actions/download-artifact@v8
with:
name: clang-tidy-fix
run-id: ${{ github.event.workflow_run.id }}
github-token: ${{ github.token }}
path: ${{ runner.temp }}/clang-tidy-fix
# The PR's own files, only to apply the patch to. Nothing in them is run.
- name: Checkout the PR head
if: steps.find.outputs.pr != ''
uses: actions/checkout@v7
with:
repository: ${{ steps.find.outputs.head-repo }}
ref: ${{ steps.find.outputs.head-sha }}
path: head
fetch-depth: 1
lfs: 'false'
persist-credentials: false
sparse-checkout: |
src
tests
# The fix was made on the PR's merge commit, so it is applied to the head
# and diffed again, giving line numbers in the PR's own files.
- name: Check the fix and place its suggestions
id: place
if: steps.find.outputs.pr != ''
env:
RANGES: ${{ steps.find.outputs.ranges }}
run: |
python3 -I - "$RUNNER_TEMP/clang-tidy-fix/fix.patch" head "$RUNNER_TEMP" <<'EOF'
import json, os, re, subprocess, sys
patch_path, head, out = sys.argv[1:]
ranges = json.loads(os.environ["RANGES"])
def output(**values):
with open(os.environ["GITHUB_OUTPUT"], "a", encoding="utf-8") as f:
for key, value in values.items():
f.write(f"{key}={value}\n")
patch = open(patch_path, encoding="utf-8").read()
if not patch.strip():
output(result="empty")
sys.exit()
# Every line the patch adds must be an #include or blank, in a C++ file the
# PR changes, and it may not remove, create, rename or change the mode of
# anything.
include = re.compile(r'\s*#\s*include\s*(<[\w./+-]+>|"[\w./+-]+")\s*')
header = re.compile(r"(index [0-9a-f]+\.\.[0-9a-f]+( \d+)?|@@ -\d+(,\d+)? \+\d+(,\d+)? @@.*)")
problems = []
path = None
for line in patch.splitlines():
if line.startswith("diff --git "):
match = re.fullmatch(r"diff --git a/(.+) b/\1", line)
path = match.group(1) if match else None
if path not in ranges:
problems.append(f"{line}: not a C++ file the PR changes")
# git appends a tab to the --- and +++ lines of a path that contains a space.
elif line.removesuffix("\t") in (f"--- a/{path}", f"+++ b/{path}") or header.fullmatch(line):
pass
elif line.startswith(" ") or line == "\\ No newline at end of file":
pass
elif line.startswith("+") and (include.fullmatch(line[1:]) or not line[1:].strip()):
pass
else:
problems.append(f"{path}: {line}")
if problems:
for problem in problems:
print(f"::error::Refused patch line {problem}")
output(result="rejected")
sys.exit()
if subprocess.run(["git", "-C", head, "apply", "--index", os.path.abspath(patch_path)]).returncode != 0:
output(result="apply-failed")
sys.exit()
git = ["git", "-C", head, "-c", "core.quotePath=false", "diff", "--cached", "--no-color", "--no-ext-diff",
"--src-prefix=a/", "--dst-prefix=b/"]
with open(os.path.join(out, "head.patch"), "w", encoding="utf-8") as f:
f.write(subprocess.run(git, check=True, capture_output=True, encoding="utf-8").stdout)
# Each run of added lines becomes one suggestion on the line it goes after
# (before, at the top of a file): that line, replaced by itself and the
# includes. It can only sit on a line the PR's diff shows.
hunks = []
path = None
for line in subprocess.run(git + ["-U0"], check=True, capture_output=True, encoding="utf-8").stdout.splitlines():
if line.startswith("diff --git "):
path = re.fullmatch(r"diff --git a/(.+) b/\1", line).group(1)
elif line.startswith("@@ "):
hunks.append((path, int(re.match(r"@@ -(\d+)", line).group(1)), []))
elif hunks and line.startswith("+") and not line.startswith("+++ "):
hunks[-1][2].append(line[1:])
suggestions = []
total = suggested = 0
for path, after, added in hunks:
count = sum(bool(include.fullmatch(line)) for line in added)
total += count
original = subprocess.run(["git", "-C", head, "show", f"HEAD:{path}"], check=True, capture_output=True,
encoding="utf-8").stdout.splitlines()
line = max(after, 1)
if line > len(original) or not any(first <= line <= last for first, last in ranges[path]):
continue
body = "\n".join([original[line - 1], *added] if after else [*added, original[0]])
# A fence longer than any run of backticks in the line it repeats.
fence = "`" * max([3] + [len(run) + 1 for run in re.findall(r"`+", body)])
suggestions.append({"path": path, "line": line, "side": "RIGHT",
"body": f"{fence}suggestion\n{body}\n{fence}"})
suggested += count
with open(os.path.join(out, "suggestions.json"), "w", encoding="utf-8") as f:
json.dump(suggestions, f)
output(result="ok", includes=total, suggested=suggested)
EOF
- name: Post the fix
if: always() && steps.find.outputs.pr != ''
uses: actions/github-script@v9
env:
PR: ${{ steps.find.outputs.pr }}
MENTION: ${{ steps.find.outputs.mention }}
REQUEST_ID: ${{ steps.find.outputs.request-id }}
HEAD_SHA: ${{ steps.find.outputs.head-sha }}
RESULT: ${{ steps.place.outputs.result }}
INCLUDES: ${{ steps.place.outputs.includes }}
SUGGESTED: ${{ steps.place.outputs.suggested }}
with:
script: |
const fs = require('fs');
const path = require('path');
const MARKER = '<!-- pr-tidy-bot -->';
// GitHub's limit on a review body is 65536 characters.
const MAX_PATCH = 60000;
const { owner, repo } = context.repo;
const { PR, MENTION, REQUEST_ID, HEAD_SHA, RESULT, INCLUDES, SUGGESTED, RUNNER_TEMP } = process.env;
const issue_number = Number(PR);
const sha = HEAD_SHA.slice(0, 10);
const fixUrl = context.payload.workflow_run.html_url;
const runUrl = `${context.serverUrl}/${owner}/${repo}/actions/runs/${context.runId}`;
const react = (content) => REQUEST_ID
? github.rest.reactions.createForIssueComment({ owner, repo, comment_id: Number(REQUEST_ID), content })
: Promise.resolve();
async function reply(body, content) {
await react(content);
await github.rest.issues.createComment({ owner, repo, issue_number, body: `${MARKER}\n${MENTION}${body}` });
}
const read = (...parts) => fs.readFileSync(path.join(RUNNER_TEMP, ...parts), 'utf8');
const passes = RESULT && read('clang-tidy-fix', 'status').trim() === '0';
if (RESULT === 'empty') {
return passes
? reply(`clang-tidy passes on ${sha}. There is nothing to fix.`, '+1')
: reply(`clang-tidy has no automatic fix for what it reports on ${sha}. The findings, in the [fix run's log](${fixUrl}), need a manual edit.`, '-1');
}
if (RESULT === 'rejected') {
return reply(`the clang-tidy fix changes more than includes, so I didn't post it. See the [run log](${runUrl}).`, '-1');
}
if (RESULT === 'apply-failed') {
return reply(`the clang-tidy fix doesn't apply to ${sha}. Merge the base branch into the PR, then comment \`/bot fix-tidy\` again.`, '-1');
}
if (RESULT !== 'ok') {
return reply(`something went wrong. See the [run log](${runUrl}).`, '-1');
}
const patch = read('head.patch');
const suggestions = JSON.parse(read('suggestions.json'));
const one = INCLUDES === '1';
const includes = one ? '1 missing include' : `${INCLUDES} missing includes`;
const inline = SUGGESTED === '0'
? (one ? 'It goes on a line this PR does not change, so I can\'t suggest it inline.'
: 'They go on lines this PR does not change, so I can\'t suggest them inline.')
: SUGGESTED === INCLUDES
? (one ? 'It is suggested inline below.' : 'Each is suggested inline below.')
: `${SUGGESTED} of them are suggested inline below; the rest go on lines this PR does not change.`;
const remaining = passes
? `With ${one ? 'it' : 'them'}, clang-tidy passes.`
: `Some findings remain that need a manual edit; see the [fix run's log](${fixUrl}).`;
// A fence longer than any run of backticks in the patch's context lines.
const fence = '`'.repeat(Math.max(3, ...[...patch.matchAll(/`+/g)].map((m) => m[0].length + 1)));
const apply = patch.length > MAX_PATCH
? `The full patch is too large to show here. Download \`fix.patch\` from the [fix run](${fixUrl}) and run \`git apply fix.patch\`.`
: `To apply ${one ? 'it' : 'all of them'}, run this in your checkout of the PR branch:\n\n${fence}sh\ngit apply <<'EOF'\n${patch}EOF\n${fence}`;
const body = (withSuggestions) => `${MARKER}\n${MENTION}clang-tidy's fix for ${sha} adds ${includes}. ` +
`${withSuggestions ? `${inline} ` : ''}${remaining}\n\n${apply}`;
const review = { owner, repo, pull_number: issue_number, commit_id: HEAD_SHA, event: 'COMMENT' };
try {
await github.rest.pulls.createReview({ ...review, body: body(true), comments: suggestions });
} catch (error) {
// A suggestion GitHub will not place still leaves the patch.
core.warning(`Posting the suggestions failed (${error.message}); posting the patch alone.`);
await github.rest.pulls.createReview({ ...review, body: body(false) });
}
await react('+1');
nudge:
if: >-
github.repository == 'OrcaSlicer/OrcaSlicer'
&& github.event_name == 'workflow_run'
&& github.event.workflow_run.name == 'clang-tidy'
&& github.event.workflow_run.event == 'pull_request'
concurrency:
group: ${{ github.workflow }}-nudge-${{ github.event.workflow_run.head_repository.full_name }}-${{ github.event.workflow_run.head_branch }}
cancel-in-progress: false
permissions:
actions: read # the check's steps
pull-requests: write # comment on the PR
issues: write # the comment
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Ask for a fix when the check fails
uses: actions/github-script@v9
with:
script: |
const MARKER = '<!-- pr-tidy-bot-nudge -->';
// The clang-tidy step's name in clang_tidy.yml. A failure in any other
// step is the CI's, not the PR's.
const TIDY_STEP = 'Run clang-tidy on the changed lines';
const { owner, repo } = context.repo;
const run = context.payload.workflow_run;
// workflow_run lists no PR for a fork's branch, so the PR is found by its branch.
const { data: prs } = await github.rest.pulls.list({
owner, repo, state: 'open', head: `${run.head_repository.owner.login}:${run.head_branch}`
});
const pr = prs.find((p) => p.head.sha === run.head_sha);
if (!pr) {
core.info('No open PR at this run\'s commit; a newer run will answer.');
return;
}
const { data: { jobs } } = await github.rest.actions.listJobsForWorkflowRun({ owner, repo, run_id: run.id });
const failed = jobs.some((job) => (job.steps || []).some((step) => step.name === TIDY_STEP && step.conclusion === 'failure'));
const comments = await github.paginate(github.rest.issues.listComments, { owner, repo, issue_number: pr.number, per_page: 100 });
const previous = comments.find((c) => c.user.type === 'Bot' && (c.body || '').startsWith(MARKER));
if (!failed) {
// Removes the request once the check passes.
if (previous && run.conclusion === 'success') {
await github.rest.issues.deleteComment({ owner, repo, comment_id: previous.id });
}
return;
}
const body = `${MARKER}\n@${pr.user.login} the clang-tidy check found problems in this PR's changes ` +
`at ${run.head_sha.slice(0, 10)} ([log](${run.html_url})). Missing includes can be fixed either way:\n\n` +
'- run `scripts/run_clang_tidy.sh --fix` (`scripts\\run_clang_tidy.ps1 -Fix` on Windows) and push the result, or\n' +
'- comment `/bot fix-tidy`, and I\'ll suggest the fix here for you to apply.\n\n' +
'Other findings, such as a `using` in a header, need a manual edit.';
// Edits the earlier request instead of posting another, so each push does not notify again.
if (previous) {
await github.rest.issues.updateComment({ owner, repo, comment_id: previous.id, body });
} else {
await github.rest.issues.createComment({ owner, repo, issue_number: pr.number, body });
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+2 -1
View File
@@ -333,6 +333,8 @@ src/slic3r/GUI/OAuthDialog.cpp
src/slic3r/GUI/PluginPickerDialog.cpp
src/slic3r/GUI/PluginsConfigDialog.cpp
src/slic3r/GUI/PluginsDialog.cpp
src/slic3r/GUI/PrinterWebView.cpp
src/slic3r/GUI/Project.cpp
src/slic3r/GUI/PublishSettingsDialog.hpp
src/slic3r/GUI/PurgeModeDialog.cpp
src/slic3r/GUI/TerminalDialog.cpp
@@ -341,7 +343,6 @@ src/slic3r/GUI/TextureLibrary.cpp
src/slic3r/GUI/TextureProjectorFrame.cpp
src/slic3r/GUI/UVEditorCanvas.cpp
src/slic3r/GUI/UserManager.cpp
src/slic3r/GUI/WebDownPluginDlg.cpp
src/slic3r/GUI/WebViewDialog.cpp
src/slic3r/GUI/Widgets/AMSItem.cpp
src/slic3r/GUI/Widgets/DialogButtons.cpp
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+3
View File
@@ -0,0 +1,3 @@
<svg width="28" height="27" viewBox="0 0 28 27" fill="none" xmlns="http://www.w3.org/2000/svg">
<path transform="matrix(0.9 0 0 0.9 1.4 1.35)" d="M11.9888 2.01601C12.8984 0.494662 15.1024 0.494662 16.012 2.01601L18.8677 6.79237C19.1958 7.34113 19.7339 7.73201 20.3572 7.87447L25.7821 9.11446C27.5101 9.50943 28.1913 11.6056 27.0254 12.9408L23.3652 17.1327C22.9449 17.6143 22.7394 18.2469 22.7964 18.8836L23.2936 24.4263C23.4519 26.1918 21.6687 27.4873 20.0386 26.7911L14.9209 24.6056C14.3329 24.3545 13.6679 24.3545 13.0799 24.6056L7.96209 26.7911C6.33196 27.4873 4.54887 26.1918 4.70722 24.4263L5.20434 18.8836C5.26145 18.2469 5.05595 17.6143 4.63544 17.1327L0.97533 12.9408C-0.19048 11.6056 0.490599 9.50943 2.21859 9.11446L7.64364 7.87447C8.2669 7.73201 8.80494 7.34113 9.13302 6.79237L11.9888 2.01601Z" stroke="#949494" stroke-width="2.4" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 876 B

+41 -1
View File
@@ -1,6 +1,6 @@
{
"name": "Anker",
"version": "02.04.00.05",
"version": "02.04.00.06",
"force_update": "0",
"description": "Anker configurations",
"machine_model_list": [
@@ -304,6 +304,26 @@
"name": "Generic PLA Silk @Anker 0.25 nozzle",
"sub_path": "filament/Generic PLA Silk @Anker 0.25 nozzle.json"
},
{
"name": "AnkerMake PLA+ Basic @Anker base",
"sub_path": "filament/AnkerMake PLA+ Basic @Anker base.json"
},
{
"name": "AnkerMake PLA+ Glitter @Anker base",
"sub_path": "filament/AnkerMake PLA+ Glitter @Anker base.json"
},
{
"name": "AnkerMake PLA+ Matte @Anker base",
"sub_path": "filament/AnkerMake PLA+ Matte @Anker base.json"
},
{
"name": "AnkerMake PLA+ Metallic @Anker base",
"sub_path": "filament/AnkerMake PLA+ Metallic @Anker base.json"
},
{
"name": "AnkerMake PLA+ Silk @Anker base",
"sub_path": "filament/AnkerMake PLA+ Silk @Anker base.json"
},
{
"name": "Generic PLA+ @Anker",
"sub_path": "filament/Generic PLA+ @Anker.json"
@@ -327,6 +347,26 @@
{
"name": "Generic TPU @Anker",
"sub_path": "filament/Generic TPU @Anker.json"
},
{
"name": "AnkerMake PLA+ Basic @Anker",
"sub_path": "filament/AnkerMake PLA+ Basic @Anker.json"
},
{
"name": "AnkerMake PLA+ Glitter @Anker",
"sub_path": "filament/AnkerMake PLA+ Glitter @Anker.json"
},
{
"name": "AnkerMake PLA+ Matte @Anker",
"sub_path": "filament/AnkerMake PLA+ Matte @Anker.json"
},
{
"name": "AnkerMake PLA+ Metallic @Anker",
"sub_path": "filament/AnkerMake PLA+ Metallic @Anker.json"
},
{
"name": "AnkerMake PLA+ Silk @Anker",
"sub_path": "filament/AnkerMake PLA+ Silk @Anker.json"
}
],
"machine_list": [
@@ -0,0 +1,50 @@
{
"type": "filament",
"name": "AnkerMake PLA+ Basic @Anker base",
"inherits": "Generic PLA+ @Anker base",
"from": "system",
"filament_id": "OFUuZlQL",
"instantiation": "false",
"filament_vendor": [
"AnkerMake"
],
"nozzle_temperature": [
"200"
],
"nozzle_temperature_initial_layer": [
"230"
],
"hot_plate_temp": [
"65"
],
"textured_plate_temp": [
"65"
],
"hot_plate_temp_initial_layer": [
"65"
],
"textured_plate_temp_initial_layer": [
"65"
],
"filament_flow_ratio": [
"1"
],
"close_fan_the_first_x_layers": [
"3"
],
"fan_cooling_layer_time": [
"60"
],
"slow_down_layer_time": [
"8"
],
"slow_down_min_speed": [
"30"
],
"default_filament_colour": [
"#FFFFFF"
],
"filament_max_volumetric_speed": [
"22"
]
}
@@ -0,0 +1,16 @@
{
"type": "filament",
"name": "AnkerMake PLA+ Basic @Anker",
"inherits": "AnkerMake PLA+ Basic @Anker base",
"from": "system",
"setting_id": "EfM5rmn4w6pMBajC",
"instantiation": "true",
"compatible_printers": [
"Anker M5 0.4 nozzle",
"Anker M5 0.6 nozzle",
"Anker M5 All-Metal 0.4 nozzle",
"Anker M5 All-Metal 0.6 nozzle",
"Anker M5C 0.4 nozzle",
"Anker M5C 0.6 nozzle"
]
}
@@ -0,0 +1,50 @@
{
"type": "filament",
"name": "AnkerMake PLA+ Glitter @Anker base",
"inherits": "Generic PLA+ @Anker base",
"from": "system",
"filament_id": "OFxCURdg",
"instantiation": "false",
"filament_vendor": [
"AnkerMake"
],
"nozzle_temperature": [
"200"
],
"nozzle_temperature_initial_layer": [
"230"
],
"hot_plate_temp": [
"65"
],
"textured_plate_temp": [
"65"
],
"hot_plate_temp_initial_layer": [
"65"
],
"textured_plate_temp_initial_layer": [
"65"
],
"filament_flow_ratio": [
"1"
],
"close_fan_the_first_x_layers": [
"3"
],
"fan_cooling_layer_time": [
"60"
],
"slow_down_layer_time": [
"6"
],
"slow_down_min_speed": [
"30"
],
"default_filament_colour": [
"#00AD66"
],
"filament_max_volumetric_speed": [
"22"
]
}
@@ -0,0 +1,16 @@
{
"type": "filament",
"name": "AnkerMake PLA+ Glitter @Anker",
"inherits": "AnkerMake PLA+ Glitter @Anker base",
"from": "system",
"setting_id": "blGHp0htgHEj7khE",
"instantiation": "true",
"compatible_printers": [
"Anker M5 0.4 nozzle",
"Anker M5 0.6 nozzle",
"Anker M5 All-Metal 0.4 nozzle",
"Anker M5 All-Metal 0.6 nozzle",
"Anker M5C 0.4 nozzle",
"Anker M5C 0.6 nozzle"
]
}
@@ -0,0 +1,50 @@
{
"type": "filament",
"name": "AnkerMake PLA+ Matte @Anker base",
"inherits": "Generic PLA+ @Anker base",
"from": "system",
"filament_id": "OFKDOyNK",
"instantiation": "false",
"filament_vendor": [
"AnkerMake"
],
"nozzle_temperature": [
"210"
],
"nozzle_temperature_initial_layer": [
"230"
],
"hot_plate_temp": [
"65"
],
"textured_plate_temp": [
"65"
],
"hot_plate_temp_initial_layer": [
"65"
],
"textured_plate_temp_initial_layer": [
"65"
],
"filament_flow_ratio": [
"1"
],
"close_fan_the_first_x_layers": [
"3"
],
"fan_cooling_layer_time": [
"60"
],
"slow_down_layer_time": [
"6"
],
"slow_down_min_speed": [
"30"
],
"default_filament_colour": [
"#FFFFFF"
],
"filament_max_volumetric_speed": [
"22"
]
}
@@ -0,0 +1,13 @@
{
"type": "filament",
"name": "AnkerMake PLA+ Matte @Anker",
"inherits": "AnkerMake PLA+ Matte @Anker base",
"from": "system",
"setting_id": "tPgwC1eEXyWPOn9S",
"instantiation": "true",
"compatible_printers": [
"Anker M5 0.4 nozzle",
"Anker M5 All-Metal 0.4 nozzle",
"Anker M5C 0.4 nozzle"
]
}
@@ -0,0 +1,56 @@
{
"type": "filament",
"name": "AnkerMake PLA+ Metallic @Anker base",
"inherits": "Generic PLA+ @Anker base",
"from": "system",
"filament_id": "OFBfbmtb",
"instantiation": "false",
"filament_vendor": [
"AnkerMake"
],
"nozzle_temperature": [
"200"
],
"textured_plate_temp": [
"60"
],
"textured_plate_temp_initial_layer": [
"60"
],
"filament_flow_ratio": [
"1"
],
"close_fan_the_first_x_layers": [
"3"
],
"fan_cooling_layer_time": [
"60"
],
"slow_down_layer_time": [
"6"
],
"slow_down_min_speed": [
"30"
],
"overhang_fan_speed": [
"50"
],
"reduce_fan_stop_start_freq": [
"0"
],
"filament_retraction_length": [
"1"
],
"filament_retraction_speed": [
"50"
],
"filament_deretraction_speed": [
"50"
],
"default_filament_colour": [
"#ACAC8A"
],
"filament_max_volumetric_speed": [
"20"
]
}
@@ -0,0 +1,13 @@
{
"type": "filament",
"name": "AnkerMake PLA+ Metallic @Anker",
"inherits": "AnkerMake PLA+ Metallic @Anker base",
"from": "system",
"setting_id": "jlbAMNNaEacdUASZ",
"instantiation": "true",
"compatible_printers": [
"Anker M5 0.4 nozzle",
"Anker M5 All-Metal 0.4 nozzle",
"Anker M5C 0.4 nozzle"
]
}
@@ -0,0 +1,62 @@
{
"type": "filament",
"name": "AnkerMake PLA+ Silk @Anker base",
"inherits": "Generic PLA+ @Anker base",
"from": "system",
"filament_id": "OFkxTGQc",
"instantiation": "false",
"filament_vendor": [
"AnkerMake"
],
"nozzle_temperature": [
"210"
],
"nozzle_temperature_initial_layer": [
"230"
],
"hot_plate_temp": [
"65"
],
"textured_plate_temp": [
"65"
],
"hot_plate_temp_initial_layer": [
"65"
],
"textured_plate_temp_initial_layer": [
"65"
],
"filament_flow_ratio": [
"1"
],
"close_fan_the_first_x_layers": [
"3"
],
"fan_cooling_layer_time": [
"60"
],
"slow_down_layer_time": [
"2"
],
"slow_down_min_speed": [
"20"
],
"filament_retraction_length": [
"0.5"
],
"filament_retraction_speed": [
"20"
],
"filament_wipe": [
"0"
],
"default_filament_colour": [
"#99ADA3"
],
"filament_deretraction_speed": [
"20"
],
"filament_max_volumetric_speed": [
"13"
]
}
@@ -0,0 +1,15 @@
{
"type": "filament",
"name": "AnkerMake PLA+ Silk @Anker",
"inherits": "AnkerMake PLA+ Silk @Anker base",
"from": "system",
"setting_id": "eVM9Ckwjl5vEvEKN",
"instantiation": "true",
"compatible_printers": [
"Anker M5 0.4 nozzle",
"Anker M5 All-Metal 0.4 nozzle",
"Anker M5 All-Metal 0.6 nozzle",
"Anker M5C 0.4 nozzle",
"Anker M5C 0.6 nozzle"
]
}
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "Anycubic",
"version": "02.04.00.08",
"version": "02.04.00.09",
"force_update": "0",
"description": "Anycubic configurations",
"machine_model_list": [
@@ -110,7 +110,7 @@
"default_filament_profile": [
"Generic PLA @Anycubic"
],
"machine_start_gcode": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nG0 Z0.2 F1800 ; move nozzle to print position\nG92 E0 ; specify current extruder position as zero\nG1 Y10 X180 E50 F1200 ; extrude a line in front of the printer\nG92 E0 ; specify current extruder position as zero\nG0 Z20 F6000 ; move head up\nG1 E-7 F2400 ; retract\nG04 S2 ; wait 2s\nG0 X0 F6000 ; wipe from oozed filament\nG1 E-1 F2400 ; undo some of the retraction to avoid oozing\nG1 F6000 ; set travel speed to move to start printing point\nM117",
"machine_start_gcode": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nG0 Z0.2 F1800 ; move nozzle to print position\nG92 E0 ; specify current extruder position as zero\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Y10 X180 E50 F1200 ; extrude a line in front of the printer\nG92 E0 ; specify current extruder position as zero\nG0 Z20 F6000 ; move head up\nG1 E-7 F2400 ; retract\nG04 S2 ; wait 2s\nG0 X0 F6000 ; wipe from oozed filament\nG1 E-1 F2400 ; undo some of the retraction to avoid oozing\nG1 F6000 ; set travel speed to move to start printing point\nM117",
"machine_end_gcode": "G4 ; wait\nG92 E0\nG1{if max_layer_z < printable_height} Z{z_offset+min(max_layer_z+30, printable_height)}{endif} ; move print head up\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y200 F3000 ; home X axis\nM84 ; disable motors",
"before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]",
"layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]",
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "Bambulab",
"url": "http://www.bambulab.com/Parameters/vendor/BBL.json",
"version": "02.08.00.13",
"version": "02.08.00.14",
"force_update": "0",
"description": "the initial version of BBL configurations",
"machine_model_list": [
@@ -8,6 +8,7 @@
"0.4"
],
"printer_variant": "0.4",
"use_3mf": "1",
"bed_exclude_area": [
"0x0",
"28x0",
@@ -9,6 +9,7 @@
"0.4"
],
"printer_variant": "0.4",
"use_3mf": "1",
"best_object_pos": "0.3x0.5",
"bed_exclude_area": [],
"bed_temperature_formula": "by_highest_temp",
+790
View File
@@ -0,0 +1,790 @@
{
"name": "FELIX Printers",
"version": "1.0.0",
"force_update": "0",
"description": "Configuration file for printers by FELIX Printers",
"machine_model_list": [
{
"name": "FELIX Food Double",
"sub_path": "machine/FELIX Food Double.json"
},
{
"name": "FELIX Food Single",
"sub_path": "machine/FELIX Food Single.json"
},
{
"name": "FELIX Food Switch",
"sub_path": "machine/FELIX Food Switch.json"
},
{
"name": "FELIX Pro 3",
"sub_path": "machine/FELIX Pro 3.json"
},
{
"name": "FELIX Pro L 3.0",
"sub_path": "machine/FELIX Pro L 3.0.json"
},
{
"name": "FELIX Pro XL 3.0",
"sub_path": "machine/FELIX Pro XL 3.0.json"
},
{
"name": "FELIX Tec 4",
"sub_path": "machine/FELIX Tec 4.json"
}
],
"machine_list": [
{
"name": "fdm_all_machines_common",
"sub_path": "machine/fdm_all_machines_common.json"
},
{
"name": "fdm_felix_food_common",
"sub_path": "machine/fdm_felix_food_common.json"
},
{
"name": "fdm_felix_food_double_common",
"sub_path": "machine/fdm_felix_food_double_common.json"
},
{
"name": "fdm_felix_food_switch_common",
"sub_path": "machine/fdm_felix_food_switch_common.json"
},
{
"name": "fdm_felix_plastic_common",
"sub_path": "machine/fdm_felix_plastic_common.json"
},
{
"name": "fdm_felix_pro_3_common",
"sub_path": "machine/fdm_felix_pro_3_common.json"
},
{
"name": "fdm_felix_pro_l_3_common",
"sub_path": "machine/fdm_felix_pro_l_3.json"
},
{
"name": "fdm_felix_pro_xl_3_common",
"sub_path": "machine/fdm_felix_pro_xl_3_common.json"
},
{
"name": "fdm_felix_tec_common",
"sub_path": "machine/fdm_felix_tec_common.json"
},
{
"name": "FELIX Food Single 0.50mm nozzle",
"sub_path": "machine/FELIX Food Single 0.50mm nozzle.json"
},
{
"name": "FELIX Food Single 1.00mm nozzle",
"sub_path": "machine/FELIX Food Single 1.00mm nozzle.json"
},
{
"name": "FELIX Food Single 2.00mm nozzle",
"sub_path": "machine/FELIX Food Single 2.00mm nozzle.json"
},
{
"name": "FELIX Food Single 3.00mm nozzle",
"sub_path": "machine/FELIX Food Single 3.00mm nozzle.json"
},
{
"name": "FELIX Food Single 4.00mm nozzle",
"sub_path": "machine/FELIX Food Single 4.00mm nozzle.json"
},
{
"name": "FELIX Food Double 0.50mm nozzle",
"sub_path": "machine/FELIX Food Double 0.50mm nozzle.json"
},
{
"name": "FELIX Food Double 1.00mm nozzle",
"sub_path": "machine/FELIX Food Double 1.00mm nozzle.json"
},
{
"name": "FELIX Food Double 2.00mm nozzle",
"sub_path": "machine/FELIX Food Double 2.00mm nozzle.json"
},
{
"name": "FELIX Food Double 3.00mm nozzle",
"sub_path": "machine/FELIX Food Double 3.00mm nozzle.json"
},
{
"name": "FELIX Food Double 4.00mm nozzle",
"sub_path": "machine/FELIX Food Double 4.00mm nozzle.json"
},
{
"name": "FELIX Food Switch 0.50mm nozzle",
"sub_path": "machine/FELIX Food Switch 0.50mm nozzle.json"
},
{
"name": "FELIX Food Switch 1.00mm nozzle",
"sub_path": "machine/FELIX Food Switch 1.00mm nozzle.json"
},
{
"name": "FELIX Food Switch 2.00mm nozzle",
"sub_path": "machine/FELIX Food Switch 2.00mm nozzle.json"
},
{
"name": "FELIX Food Switch 3.00mm nozzle",
"sub_path": "machine/FELIX Food Switch 3.00mm nozzle.json"
},
{
"name": "FELIX Food Switch 4.00mm nozzle",
"sub_path": "machine/FELIX Food Switch 4.00mm nozzle.json"
},
{
"name": "FELIX Pro 3 0.25mm nozzle",
"sub_path": "machine/FELIX Pro 3 0.25mm nozzle.json"
},
{
"name": "FELIX Pro 3 0.35mm nozzle",
"sub_path": "machine/FELIX Pro 3 0.35mm nozzle.json"
},
{
"name": "FELIX Pro 3 0.50mm nozzle",
"sub_path": "machine/FELIX Pro 3 0.50mm nozzle.json"
},
{
"name": "FELIX Pro 3 0.70mm nozzle",
"sub_path": "machine/FELIX Pro 3 0.70mm nozzle.json"
},
{
"name": "FELIX Pro L 3.0 0.25mm nozzle",
"sub_path": "machine/FELIX Pro L 3.0 0.25mm nozzle.json"
},
{
"name": "FELIX Pro L 3.0 0.35mm nozzle",
"sub_path": "machine/FELIX Pro L 3.0 0.35mm nozzle.json"
},
{
"name": "FELIX Pro L 3.0 0.50mm nozzle",
"sub_path": "machine/FELIX Pro L 3.0 0.50mm nozzle.json"
},
{
"name": "FELIX Pro L 3.0 0.70mm nozzle",
"sub_path": "machine/FELIX Pro L 3.0 0.70mm nozzle.json"
},
{
"name": "FELIX Pro XL 3.0 0.25mm nozzle",
"sub_path": "machine/FELIX Pro XL 3.0 0.25mm nozzle.json"
},
{
"name": "FELIX Pro XL 3.0 0.35mm nozzle",
"sub_path": "machine/FELIX Pro XL 3.0 0.35mm nozzle.json"
},
{
"name": "FELIX Pro XL 3.0 0.50mm nozzle",
"sub_path": "machine/FELIX Pro XL 3.0 0.50mm nozzle.json"
},
{
"name": "FELIX Pro XL 3.0 0.70mm nozzle",
"sub_path": "machine/FELIX Pro XL 3.0 0.70mm nozzle.json"
},
{
"name": "FELIX Tec 4 0.25mm nozzle",
"sub_path": "machine/FELIX Tec 4 0.25mm nozzle.json"
},
{
"name": "FELIX Tec 4 0.35mm nozzle",
"sub_path": "machine/FELIX Tec 4 0.35mm nozzle.json"
},
{
"name": "FELIX Tec 4 0.50mm nozzle",
"sub_path": "machine/FELIX Tec 4 0.50mm nozzle.json"
},
{
"name": "FELIX Tec 4 0.70mm nozzle",
"sub_path": "machine/FELIX Tec 4 0.70mm nozzle.json"
}
],
"process_list": [
{
"name": "fdm_process_common",
"sub_path": "process/fdm_process_common.json"
},
{
"name": "fdm_process_felix_food_common",
"sub_path": "process/fdm_process_felix_food_common.json"
},
{
"name": "fdm_process_felix_plastic_common",
"sub_path": "process/fdm_process_felix_plastic_common.json"
},
{
"name": "FELIX Food Coarse @ 0.50mm",
"sub_path": "process/FELIX Food Coarse @ 0.50mm.json"
},
{
"name": "FELIX Food Coarse @ 1.00mm",
"sub_path": "process/FELIX Food Coarse @ 1.00mm.json"
},
{
"name": "FELIX Food Coarse @ 2.00mm",
"sub_path": "process/FELIX Food Coarse @ 2.00mm.json"
},
{
"name": "FELIX Food Coarse @ 3.00mm",
"sub_path": "process/FELIX Food Coarse @ 3.00mm.json"
},
{
"name": "FELIX Food Coarse @ 4.00mm",
"sub_path": "process/FELIX Food Coarse @ 4.00mm.json"
},
{
"name": "FELIX Food Fine @ 0.50mm",
"sub_path": "process/FELIX Food Fine @ 0.50mm.json"
},
{
"name": "FELIX Food Fine @ 1.00mm",
"sub_path": "process/FELIX Food Fine @ 1.00mm.json"
},
{
"name": "FELIX Food Fine @ 2.00mm",
"sub_path": "process/FELIX Food Fine @ 2.00mm.json"
},
{
"name": "FELIX Food Fine @ 3.00mm",
"sub_path": "process/FELIX Food Fine @ 3.00mm.json"
},
{
"name": "FELIX Food Fine @ 4.00mm",
"sub_path": "process/FELIX Food Fine @ 4.00mm.json"
},
{
"name": "FELIX Food Normal @ 0.50mm",
"sub_path": "process/FELIX Food Normal @ 0.50mm.json"
},
{
"name": "FELIX Food Normal @ 1.00mm",
"sub_path": "process/FELIX Food Normal @ 1.00mm.json"
},
{
"name": "FELIX Food Normal @ 2.00mm",
"sub_path": "process/FELIX Food Normal @ 2.00mm.json"
},
{
"name": "FELIX Food Normal @ 3.00mm",
"sub_path": "process/FELIX Food Normal @ 3.00mm.json"
},
{
"name": "FELIX Food Normal @ 4.00mm",
"sub_path": "process/FELIX Food Normal @ 4.00mm.json"
},
{
"name": "FELIX Plastic Coarse @ 0.35mm",
"sub_path": "process/FELIX Plastic Coarse @ 0.35mm.json"
},
{
"name": "FELIX Plastic Coarse @ 0.50mm",
"sub_path": "process/FELIX Plastic Coarse @ 0.50mm.json"
},
{
"name": "FELIX Plastic Coarse @ 0.70mm",
"sub_path": "process/FELIX Plastic Coarse @ 0.70mm.json"
},
{
"name": "FELIX Plastic Fine @ 0.25mm",
"sub_path": "process/FELIX Plastic Fine @ 0.25mm.json"
},
{
"name": "FELIX Plastic Fine @ 0.35mm",
"sub_path": "process/FELIX Plastic Fine @ 0.35mm.json"
},
{
"name": "FELIX Plastic Fine @ 0.50mm",
"sub_path": "process/FELIX Plastic Fine @ 0.50mm.json"
},
{
"name": "FELIX Plastic Fine @ 0.70mm",
"sub_path": "process/FELIX Plastic Fine @ 0.70mm.json"
},
{
"name": "FELIX Plastic Normal @ 0.25mm",
"sub_path": "process/FELIX Plastic Normal @ 0.25mm.json"
},
{
"name": "FELIX Plastic Normal @ 0.35mm",
"sub_path": "process/FELIX Plastic Normal @ 0.35mm.json"
},
{
"name": "FELIX Plastic Normal @ 0.50mm",
"sub_path": "process/FELIX Plastic Normal @ 0.50mm.json"
},
{
"name": "FELIX Plastic Normal @ 0.70mm",
"sub_path": "process/FELIX Plastic Normal @ 0.70mm.json"
},
{
"name": "FELIX Plastic Slightly Coarse @ 0.35mm",
"sub_path": "process/FELIX Plastic Slightly Coarse @ 0.35mm.json"
},
{
"name": "FELIX Plastic Slightly Coarse @ 0.50mm",
"sub_path": "process/FELIX Plastic Slightly Coarse @ 0.50mm.json"
},
{
"name": "FELIX Plastic Slightly Coarse @ 0.70mm",
"sub_path": "process/FELIX Plastic Slightly Coarse @ 0.70mm.json"
},
{
"name": "FELIX Plastic Super Coarse @ 0.70mm",
"sub_path": "process/FELIX Plastic Super Coarse @ 0.70mm.json"
},
{
"name": "FELIX Plastic Super Fine @ 0.25mm",
"sub_path": "process/FELIX Plastic Super Fine @ 0.25mm.json"
},
{
"name": "FELIX Plastic Super Fine @ 0.35mm",
"sub_path": "process/FELIX Plastic Super Fine @ 0.35mm.json"
},
{
"name": "FELIX Plastic Very Coarse @ 0.50mm",
"sub_path": "process/FELIX Plastic Very Coarse @ 0.50mm.json"
},
{
"name": "FELIX Plastic Very Coarse @ 0.70mm",
"sub_path": "process/FELIX Plastic Very Coarse @ 0.70mm.json"
},
{
"name": "FELIX Plastic Very Fine @ 0.25mm",
"sub_path": "process/FELIX Plastic Very Fine @ 0.25mm.json"
},
{
"name": "FELIX Plastic Very Fine @ 0.35mm",
"sub_path": "process/FELIX Plastic Very Fine @ 0.35mm.json"
},
{
"name": "FELIX Plastic Very Fine @ 0.50mm",
"sub_path": "process/FELIX Plastic Very Fine @ 0.50mm.json"
}
],
"filament_list": [
{
"name": "fdm_filament_common",
"sub_path": "filament/fdm_filament_common.json"
},
{
"name": "fdm_filament_food",
"sub_path": "filament/fdm_filament_food.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_flex",
"sub_path": "filament/fdm_filament_flex.json"
},
{
"name": "fdm_filament_pa",
"sub_path": "filament/fdm_filament_pa.json"
},
{
"name": "fdm_filament_pa11cf",
"sub_path": "filament/fdm_filament_pa11cf.json"
},
{
"name": "fdm_filament_pc",
"sub_path": "filament/fdm_filament_pc.json"
},
{
"name": "fdm_filament_pccf",
"sub_path": "filament/fdm_filament_pccf.json"
},
{
"name": "fdm_filament_pet",
"sub_path": "filament/fdm_filament_pet.json"
},
{
"name": "fdm_filament_pla",
"sub_path": "filament/fdm_filament_pla.json"
},
{
"name": "fdm_filament_pva",
"sub_path": "filament/fdm_filament_pva.json"
},
{
"name": "fdm_filament_pvb",
"sub_path": "filament/fdm_filament_pvb.json"
},
{
"name": "fdm_filament_tpu",
"sub_path": "filament/fdm_filament_tpu.json"
},
{
"name": "Food Medium Plastic Syringe @0.50mm",
"sub_path": "filament/FELIXFood/Food Medium Plastic Syringe @0.50mm.json"
},
{
"name": "Food Medium Plastic Syringe @1.00mm",
"sub_path": "filament/FELIXFood/Food Medium Plastic Syringe @1.00mm.json"
},
{
"name": "Food Medium Plastic Syringe @2.00mm",
"sub_path": "filament/FELIXFood/Food Medium Plastic Syringe @2.00mm.json"
},
{
"name": "Food Medium Plastic Syringe @3.00mm",
"sub_path": "filament/FELIXFood/Food Medium Plastic Syringe @3.00mm.json"
},
{
"name": "Food Medium Plastic Syringe @4.00mm",
"sub_path": "filament/FELIXFood/Food Medium Plastic Syringe @4.00mm.json"
},
{
"name": "Food Medium Stainless Steel Syringe @0.50mm",
"sub_path": "filament/FELIXFood/Food Medium Stainless Steel Syringe @0.50mm.json"
},
{
"name": "Food Medium Stainless Steel Syringe @1.00mm",
"sub_path": "filament/FELIXFood/Food Medium Stainless Steel Syringe @1.00mm.json"
},
{
"name": "Food Medium Stainless Steel Syringe @2.00mm",
"sub_path": "filament/FELIXFood/Food Medium Stainless Steel Syringe @2.00mm.json"
},
{
"name": "Food Medium Stainless Steel Syringe @3.00mm",
"sub_path": "filament/FELIXFood/Food Medium Stainless Steel Syringe @3.00mm.json"
},
{
"name": "Food Medium Stainless Steel Syringe @4.00mm",
"sub_path": "filament/FELIXFood/Food Medium Stainless Steel Syringe @4.00mm.json"
},
{
"name": "Food Thick Stainless Steel Syringe @0.50mm",
"sub_path": "filament/FELIXFood/Food Thick Stainless Steel Syringe @0.50mm.json"
},
{
"name": "Food Thick Stainless Steel Syringe @1.00mm",
"sub_path": "filament/FELIXFood/Food Thick Stainless Steel Syringe @1.00mm.json"
},
{
"name": "Food Thick Stainless Steel Syringe @2.00mm",
"sub_path": "filament/FELIXFood/Food Thick Stainless Steel Syringe @2.00mm.json"
},
{
"name": "Food Thick Stainless Steel Syringe @3.00mm",
"sub_path": "filament/FELIXFood/Food Thick Stainless Steel Syringe @3.00mm.json"
},
{
"name": "Food Thick Stainless Steel Syringe @4.00mm",
"sub_path": "filament/FELIXFood/Food Thick Stainless Steel Syringe @4.00mm.json"
},
{
"name": "Food Thin Plastic Syringe @0.50mm",
"sub_path": "filament/FELIXFood/Food Thin Plastic Syringe @0.50mm.json"
},
{
"name": "Food Thin Plastic Syringe @1.00mm",
"sub_path": "filament/FELIXFood/Food Thin Plastic Syringe @1.00mm.json"
},
{
"name": "Food Thin Plastic Syringe @2.00mm",
"sub_path": "filament/FELIXFood/Food Thin Plastic Syringe @2.00mm.json"
},
{
"name": "Food Thin Plastic Syringe @3.00mm",
"sub_path": "filament/FELIXFood/Food Thin Plastic Syringe @3.00mm.json"
},
{
"name": "Food Thin Plastic Syringe @4.00mm",
"sub_path": "filament/FELIXFood/Food Thin Plastic Syringe @4.00mm.json"
},
{
"name": "Food Thin Stainless Steel Syringe @0.50mm",
"sub_path": "filament/FELIXFood/Food Thin Stainless Steel Syringe @0.50mm.json"
},
{
"name": "Food Thin Stainless Steel Syringe @1.00mm",
"sub_path": "filament/FELIXFood/Food Thin Stainless Steel Syringe @1.00mm.json"
},
{
"name": "Food Thin Stainless Steel Syringe @2.00mm",
"sub_path": "filament/FELIXFood/Food Thin Stainless Steel Syringe @2.00mm.json"
},
{
"name": "Food Thin Stainless Steel Syringe @3.00mm",
"sub_path": "filament/FELIXFood/Food Thin Stainless Steel Syringe @3.00mm.json"
},
{
"name": "Food Thin Stainless Steel Syringe @4.00mm",
"sub_path": "filament/FELIXFood/Food Thin Stainless Steel Syringe @4.00mm.json"
},
{
"name": "Food Very Thick Stainless Steel Syringe @1.00mm",
"sub_path": "filament/FELIXFood/Food Very Thick Stainless Steel Syringe @1.00mm.json"
},
{
"name": "Food Very Thick Stainless Steel Syringe @2.00mm",
"sub_path": "filament/FELIXFood/Food Very Thick Stainless Steel Syringe @2.00mm.json"
},
{
"name": "Food Very Thick Stainless Steel Syringe @3.00mm",
"sub_path": "filament/FELIXFood/Food Very Thick Stainless Steel Syringe @3.00mm.json"
},
{
"name": "Food Very Thick Stainless Steel Syringe @4.00mm",
"sub_path": "filament/FELIXFood/Food Very Thick Stainless Steel Syringe @4.00mm.json"
},
{
"name": "Food Very Thin Plastic Syringe @0.50mm",
"sub_path": "filament/FELIXFood/Food Very Thin Plastic Syringe @0.50mm.json"
},
{
"name": "Food Very Thin Plastic Syringe @1.00mm",
"sub_path": "filament/FELIXFood/Food Very Thin Plastic Syringe @1.00mm.json"
},
{
"name": "Food Very Thin Plastic Syringe @2.00mm",
"sub_path": "filament/FELIXFood/Food Very Thin Plastic Syringe @2.00mm.json"
},
{
"name": "Food Very Thin Plastic Syringe @3.00mm",
"sub_path": "filament/FELIXFood/Food Very Thin Plastic Syringe @3.00mm.json"
},
{
"name": "Food Very Thin Plastic Syringe @4.00mm",
"sub_path": "filament/FELIXFood/Food Very Thin Plastic Syringe @4.00mm.json"
},
{
"name": "Food Very Thin Stainless Steel Syringe @1.00mm",
"sub_path": "filament/FELIXFood/Food Very Thin Stainless Steel Syringe @1.00mm.json"
},
{
"name": "Food Very Thin Stainless Steel Syringe @2.00mm",
"sub_path": "filament/FELIXFood/Food Very Thin Stainless Steel Syringe @2.00mm.json"
},
{
"name": "Food Very Thin Stainless Steel Syringe @3.00mm",
"sub_path": "filament/FELIXFood/Food Very Thin Stainless Steel Syringe @3.00mm.json"
},
{
"name": "Food Very Thin Stainless Steel Syringe @4.00mm",
"sub_path": "filament/FELIXFood/Food Very Thin Stainless Steel Syringe @4.00mm.json"
},
{
"name": "Food Very Thin Stainless Steel Syringe @0.50mm",
"sub_path": "filament/FELIXFood/Food Very Thin Stainless Steel Syringe @0.50mm.json"
},
{
"name": "FORMFUTURA TitanX ABS Brass @ 0.35mm",
"sub_path": "filament/FELIXPlastic/FORMFUTURA TitanX ABS Brass @ 0.35mm.json"
},
{
"name": "FORMFUTURA TitanX ABS Brass @ 0.50mm",
"sub_path": "filament/FELIXPlastic/FORMFUTURA TitanX ABS Brass @ 0.50mm.json"
},
{
"name": "FORMFUTURA TitanX ABS Hardened Steel @ 0.25mm",
"sub_path": "filament/FELIXPlastic/FORMFUTURA TitanX ABS Hardened Steel @ 0.25mm.json"
},
{
"name": "FORMFUTURA TitanX ABS Hardened Steel @ 0.35mm",
"sub_path": "filament/FELIXPlastic/FORMFUTURA TitanX ABS Hardened Steel @ 0.35mm.json"
},
{
"name": "FORMFUTURA TitanX ABS Hardened Steel @ 0.50mm",
"sub_path": "filament/FELIXPlastic/FORMFUTURA TitanX ABS Hardened Steel @ 0.50mm.json"
},
{
"name": "FORMFUTURA TitanX ABS Hardened Steel @ 0.70mm",
"sub_path": "filament/FELIXPlastic/FORMFUTURA TitanX ABS Hardened Steel @ 0.70mm.json"
},
{
"name": "Ultrafuse ABS Fusion+ Brass @ 0.35mm",
"sub_path": "filament/FELIXPlastic/Ultrafuse ABS Fusion+ Brass @ 0.35mm.json"
},
{
"name": "Ultrafuse ABS Fusion+ Brass @ 0.50mm",
"sub_path": "filament/FELIXPlastic/Ultrafuse ABS Fusion+ Brass @ 0.50mm.json"
},
{
"name": "Ultrafuse ABS Fusion+ Hardened Steel @ 0.25mm",
"sub_path": "filament/FELIXPlastic/Ultrafuse ABS Fusion+ Hardened Steel @ 0.25mm.json"
},
{
"name": "Ultrafuse ABS Fusion+ Hardened Steel @ 0.35mm",
"sub_path": "filament/FELIXPlastic/Ultrafuse ABS Fusion+ Hardened Steel @ 0.35mm.json"
},
{
"name": "Ultrafuse ABS Fusion+ Hardened Steel @ 0.50mm",
"sub_path": "filament/FELIXPlastic/Ultrafuse ABS Fusion+ Hardened Steel @ 0.50mm.json"
},
{
"name": "Ultrafuse ABS Fusion+ Hardened Steel @ 0.70mm",
"sub_path": "filament/FELIXPlastic/Ultrafuse ABS Fusion+ Hardened Steel @ 0.70mm.json"
},
{
"name": "FORMFUTURA AppoloX ASA Brass @ 0.35mm",
"sub_path": "filament/FELIXPlastic/FORMFUTURA AppoloX ASA Brass @ 0.35mm.json"
},
{
"name": "FORMFUTURA AppoloX ASA Brass @ 0.50mm",
"sub_path": "filament/FELIXPlastic/FORMFUTURA AppoloX ASA Brass @ 0.50mm.json"
},
{
"name": "FORMFUTURA AppoloX ASA Hardened Steel @ 0.25mm",
"sub_path": "filament/FELIXPlastic/FORMFUTURA AppoloX ASA Hardened Steel @ 0.25mm.json"
},
{
"name": "FORMFUTURA AppoloX ASA Hardened Steel @ 0.35mm",
"sub_path": "filament/FELIXPlastic/FORMFUTURA AppoloX ASA Hardened Steel @ 0.35mm.json"
},
{
"name": "FORMFUTURA AppoloX ASA Hardened Steel @ 0.50mm",
"sub_path": "filament/FELIXPlastic/FORMFUTURA AppoloX ASA Hardened Steel @ 0.50mm.json"
},
{
"name": "FORMFUTURA AppoloX ASA Hardened Steel @ 0.70mm",
"sub_path": "filament/FELIXPlastic/FORMFUTURA AppoloX ASA Hardened Steel @ 0.70mm.json"
},
{
"name": "FELIX FLEX Brass @ 0.35mm",
"sub_path": "filament/FELIXPlastic/FELIX FLEX Brass @ 0.35mm.json"
},
{
"name": "FELIX FLEX Brass @ 0.50mm",
"sub_path": "filament/FELIXPlastic/FELIX FLEX Brass @ 0.50mm.json"
},
{
"name": "FELIX FLEX Hardened Steel @ 0.25mm",
"sub_path": "filament/FELIXPlastic/FELIX FLEX Hardened Steel @ 0.25mm.json"
},
{
"name": "FELIX FLEX Hardened Steel @ 0.35mm",
"sub_path": "filament/FELIXPlastic/FELIX FLEX Hardened Steel @ 0.35mm.json"
},
{
"name": "FELIX FLEX Hardened Steel @ 0.50mm",
"sub_path": "filament/FELIXPlastic/FELIX FLEX Hardened Steel @ 0.50mm.json"
},
{
"name": "FELIX FLEX Hardened Steel @ 0.70mm",
"sub_path": "filament/FELIXPlastic/FELIX FLEX Hardened Steel @ 0.70mm.json"
},
{
"name": "FELIX PETG Brass @ 0.35mm",
"sub_path": "filament/FELIXPlastic/FELIX PETG Brass @ 0.35mm.json"
},
{
"name": "FELIX PETG Brass @ 0.50mm",
"sub_path": "filament/FELIXPlastic/FELIX PETG Brass @ 0.50mm.json"
},
{
"name": "FELIX PETG Hardened Steel @ 0.25mm",
"sub_path": "filament/FELIXPlastic/FELIX PETG Hardened Steel @ 0.25mm.json"
},
{
"name": "FELIX PETG Hardened Steel @ 0.35mm",
"sub_path": "filament/FELIXPlastic/FELIX PETG Hardened Steel @ 0.35mm.json"
},
{
"name": "FELIX PETG Hardened Steel @ 0.50mm",
"sub_path": "filament/FELIXPlastic/FELIX PETG Hardened Steel @ 0.50mm.json"
},
{
"name": "FELIX PETG Hardened Steel @ 0.70mm",
"sub_path": "filament/FELIXPlastic/FELIX PETG Hardened Steel @ 0.70mm.json"
},
{
"name": "FELIX Premium PLA Brass @ 0.35mm",
"sub_path": "filament/FELIXPlastic/FELIX Premium PLA Brass @ 0.35mm.json"
},
{
"name": "FELIX Premium PLA Brass @ 0.50mm",
"sub_path": "filament/FELIXPlastic/FELIX Premium PLA Brass @ 0.50mm.json"
},
{
"name": "FELIX Premium PLA Hardened Steel @ 0.25mm",
"sub_path": "filament/FELIXPlastic/FELIX Premium PLA Hardened Steel @ 0.25mm.json"
},
{
"name": "FELIX Premium PLA Hardened Steel @ 0.35mm",
"sub_path": "filament/FELIXPlastic/FELIX Premium PLA Hardened Steel @ 0.35mm.json"
},
{
"name": "FELIX Premium PLA Hardened Steel @ 0.50mm",
"sub_path": "filament/FELIXPlastic/FELIX Premium PLA Hardened Steel @ 0.50mm.json"
},
{
"name": "FELIX Premium PLA Hardened Steel @ 0.70mm",
"sub_path": "filament/FELIXPlastic/FELIX Premium PLA Hardened Steel @ 0.70mm.json"
},
{
"name": "FELIX Wood Brass @ 0.35mm",
"sub_path": "filament/FELIXPlastic/FELIX Wood Brass @ 0.35mm.json"
},
{
"name": "FELIX Wood Brass @ 0.50mm",
"sub_path": "filament/FELIXPlastic/FELIX Wood Brass @ 0.50mm.json"
},
{
"name": "FELIX Wood Hardened Steel @ 0.25mm",
"sub_path": "filament/FELIXPlastic/FELIX Wood Hardened Steel @ 0.25mm.json"
},
{
"name": "FELIX Wood Hardened Steel @ 0.35mm",
"sub_path": "filament/FELIXPlastic/FELIX Wood Hardened Steel @ 0.35mm.json"
},
{
"name": "FELIX Wood Hardened Steel @ 0.50mm",
"sub_path": "filament/FELIXPlastic/FELIX Wood Hardened Steel @ 0.50mm.json"
},
{
"name": "FELIX Wood Hardened Steel @ 0.70mm",
"sub_path": "filament/FELIXPlastic/FELIX Wood Hardened Steel @ 0.70mm.json"
},
{
"name": "FORMFUTURA ePLA Brass @ 0.35mm",
"sub_path": "filament/FELIXPlastic/FORMFUTURA ePLA Brass @ 0.35mm.json"
},
{
"name": "FORMFUTURA ePLA Brass @ 0.50mm",
"sub_path": "filament/FELIXPlastic/FORMFUTURA ePLA Brass @ 0.50mm.json"
},
{
"name": "FORMFUTURA ePLA Hardened Steel @ 0.25mm",
"sub_path": "filament/FELIXPlastic/FORMFUTURA ePLA Hardened Steel @ 0.25mm.json"
},
{
"name": "FORMFUTURA ePLA Hardened Steel @ 0.35mm",
"sub_path": "filament/FELIXPlastic/FORMFUTURA ePLA Hardened Steel @ 0.35mm.json"
},
{
"name": "FORMFUTURA ePLA Hardened Steel @ 0.50mm",
"sub_path": "filament/FELIXPlastic/FORMFUTURA ePLA Hardened Steel @ 0.50mm.json"
},
{
"name": "FORMFUTURA ePLA Hardened Steel @ 0.70mm",
"sub_path": "filament/FELIXPlastic/FORMFUTURA ePLA Hardened Steel @ 0.70mm.json"
},
{
"name": "FORMFUTURA Aquasolve PVA Brass @ 0.35mm",
"sub_path": "filament/FELIXPlastic/FORMFUTURA Aquasolve PVA Brass @ 0.35mm.json"
},
{
"name": "FORMFUTURA Aquasolve PVA Brass @ 0.50mm",
"sub_path": "filament/FELIXPlastic/FORMFUTURA Aquasolve PVA Brass @ 0.50mm.json"
},
{
"name": "FORMFUTURA Aquasolve PVA Hardened Steel @ 0.25mm",
"sub_path": "filament/FELIXPlastic/FORMFUTURA Aquasolve PVA Hardened Steel @ 0.25mm.json"
},
{
"name": "FORMFUTURA Aquasolve PVA Hardened Steel @ 0.35mm",
"sub_path": "filament/FELIXPlastic/FORMFUTURA Aquasolve PVA Hardened Steel @ 0.35mm.json"
},
{
"name": "FORMFUTURA Aquasolve PVA Hardened Steel @ 0.50mm",
"sub_path": "filament/FELIXPlastic/FORMFUTURA Aquasolve PVA Hardened Steel @ 0.50mm.json"
},
{
"name": "FORMFUTURA Aquasolve PVA Hardened Steel @ 0.70mm",
"sub_path": "filament/FELIXPlastic/FORMFUTURA Aquasolve PVA Hardened Steel @ 0.70mm.json"
}
]
}
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="a" xmlns="http://www.w3.org/2000/svg" width="180.62mm" height="180.62mm" viewBox="0 0 512 512" xmlns:c2pa="http://c2pa.org/manifest">
<rect x="0" y="0" width="512" height="512" fill="none"/>
<g fill="#ffffff" transform="translate(5,460) scale(0.2)">
<g>
<path d="M139.4.8l-.2,62c-34.3,0-63.4,21.8-73.2,51.9C26.4,141,.2,187.8.2,241.3H0l.2-101.3C.2,63.1,62.4.8,139.4.8Z"/>
<path d="M139.1,92.5l-.8,62.5c-42.6,0-77.1,38.6-77.1,86.3l1-103.9c0-7.9,1.3-15.5,3.6-22.7,21.2-14.1,46.3-22.3,73.2-22.3Z"/>
<path d="M65.9,114.7c-2.3,7.2-3.6,14.8-3.6,22.7l-1,103.9H.2c0-53.5,26.3-100.3,65.7-126.6Z"/>
</g>
<polygon points="202.8 .4 202.8 92.9 226.2 92.9 226.2 56 259.8 56 259.8 36.1 226.2 36.1 226.2 19.4 265.7 19.4 265.7 0 202.8 .4"/>
<polygon points="282.3 -.3 282.3 93 346.1 93 346.1 72.4 306.8 72.4 306.8 55.6 341.7 55.6 341.7 36.4 306.5 36.4 306.5 19.6 346.2 19.6 346.2 -.3 282.3 -.3"/>
<polygon points="365.9 92.8 429.5 92.8 429.5 70.9 389.6 70.9 389.6 .2 365 .2 365.9 92.8"/>
<polygon points="448 0 471.9 0 471.9 92.5 447.5 92.5 448 0"/>
<path d="M485.1,92.5s34.7-44.3,33.4-46.5S485.7,0,485.7,0h29l18.4,24.8L550.1,0h26.6l-29.9,45.4,33.1,46.8h-28.8l-19.3-27.4-18.9,28.1-27.9-.4Z"/>
<g>
<path d="M210.9,154.1c-1.9,0-3.7-.2-5.3-.7-1.6-.4-3-1-4.2-1.6v-3.9c1.1.6,2.4,1.1,3.9,1.6,1.5.5,3.2.7,5.1.7,3.1,0,5.5-.6,7.2-1.7,1.7-1.2,2.5-2.8,2.5-5s-.8-3.9-2.5-5c-1.7-1.2-4.2-1.7-7.4-1.7h-3.9v-3.7h4c2.6,0,4.5-.5,5.9-1.5,1.4-1,2-2.4,2-4.2s-.3-2.3-1-3.1c-.6-.8-1.6-1.5-2.8-1.9-1.3-.4-2.8-.7-4.6-.7s-3,.2-4.3.6c-1.3.4-2.4.8-3.3,1.3v-3.9c1.1-.5,2.3-.9,3.6-1.3,1.3-.4,2.8-.5,4.5-.5s4,.3,5.5.8c1.5.5,2.7,1.3,3.6,2.2.9.9,1.6,1.9,2,3.1.4,1.1.6,2.3.6,3.4s-.2,2.4-.7,3.3c-.5.9-1,1.7-1.6,2.2-.6.6-1.4,1.1-2.3,1.6,1.3.7,2.3,1.4,3.2,2.1s1.6,1.7,2.2,2.8c.6,1.1,1,2.5,1,4.2s-.2,2.5-.7,3.8c-.5,1.2-1.2,2.4-2.2,3.4s-2.4,1.8-4,2.4c-1.7.6-3.7.9-6.1.9Z"/>
<path d="M232.1,153.7v-35.4h11.1c5.5,0,9.7,1.5,12.4,4.4,2.8,3,4.2,7.4,4.2,13.2s-1.4,10.3-4.2,13.2c-2.8,3-6.9,4.5-12.4,4.5h-11.1ZM235.9,150h7c4.5,0,7.8-1.1,9.9-3.4,2-2.3,3.1-5.8,3.1-10.7s-1-8.4-3.1-10.7c-2-2.3-5.3-3.4-9.9-3.4h-7v28.2Z"/>
<path d="M291.9,154.4c-.8,0-1.7-.1-2.6-.3-1-.2-1.9-.5-2.8-.8-.9-.3-1.7-.7-2.4-1l1.3-1.3v14.2h-3.8v-33.2c0-1.1.3-2,1-2.7.7-.7,1.6-1.2,2.7-1.6,1.1-.4,2.3-.6,3.5-.8,1.2-.2,2.4-.2,3.5-.2,2.1,0,4.1.4,6,1.3,1.9.9,3.4,2.4,4.6,4.5s1.7,5,1.7,8.6-.5,5.1-1.5,7.1c-1,2-2.4,3.5-4.3,4.6-1.9,1.1-4.2,1.6-6.9,1.6ZM291.9,150.9c1.9,0,3.5-.4,4.8-1.2,1.3-.8,2.2-2,2.8-3.5.6-1.5,1-3.2,1-5.1s-.2-3.7-.6-5.4c-.4-1.7-1.2-3-2.4-4-1.2-1-3-1.5-5.2-1.5s-3.4.2-4.8.6c-1.4.4-2,1-2,1.8v16.4c1.1.6,2.2,1.1,3.3,1.4s2.2.5,3.3.5Z"/>
<path d="M311.1,153.7v-24.3c.4-.2,1.2-.5,2.5-.9,1.2-.4,2.7-.8,4.4-1.2,1.7-.4,3.5-.5,5.3-.5s.6,0,.8.1c.3,0,.6.1.8.2v3.4c-.9-.1-1.8-.2-2.7-.2s-1.7,0-2.5.1c-.8,0-1.6.2-2.4.3-.8.1-1.6.3-2.4.4v22.5h-3.8Z"/>
<path d="M330.5,122.5v-4.2h4.2v4.2h-4.2ZM330.8,153.7v-26.4h3.8v26.4h-3.8Z"/>
<path d="M342.7,129.3c.8-.4,1.7-.8,2.6-1.1.9-.3,1.8-.6,2.8-.8.9-.2,1.9-.4,2.9-.5,1-.1,2-.2,2.9-.2,2.6,0,4.6.4,6.1,1.1,1.5.8,2.6,1.9,3.3,3.3.7,1.4,1,3.2,1,5.2v17.2h-3.8v-17.2c0-.6,0-1.3-.2-2-.2-.7-.5-1.4-.9-2-.5-.7-1.2-1.2-2.1-1.6s-2.2-.6-3.8-.6-2.2,0-3.4.3-2.4.4-3.6.8v22.4h-3.8v-24.3Z"/>
<path d="M380.7,154.1c-1.9,0-3.4-.6-4.7-1.7-1.3-1.1-1.9-2.9-1.9-5.1v-16.5h-4.6v-3.5h4.6v-7.5h3.8v7.5h6.8v3.5h-6.8v15.3c0,1.5.2,2.6.7,3.3s1.4,1.1,2.8,1.1,1.3,0,1.9-.2,1.1-.3,1.5-.5v3.6c-.5.2-1.1.3-1.9.5s-1.5.2-2.1.2Z"/>
<path d="M402,154.4c-2.5,0-4.7-.5-6.5-1.6-1.8-1-3.3-2.6-4.2-4.7-1-2.1-1.5-4.7-1.5-7.8,0-4.6,1-8,3.1-10.3,2.1-2.3,4.9-3.4,8.5-3.4s5.1.6,6.8,1.9c1.7,1.3,2.9,3,3.7,5.1.7,2.2,1.1,4.6,1.1,7.3h-21.3l.3-3.5h18.5l-1.5.5c-.1-2.6-.8-4.6-2-5.9-1.2-1.3-3.1-2-5.6-2s-3.2.3-4.3,1c-1.1.6-2,1.7-2.6,3.3s-.8,3.8-.8,6.6.8,5.7,2.3,7.3c1.5,1.7,3.6,2.5,6.3,2.5s2.5,0,3.6-.3,2.1-.5,3-.8c.9-.4,1.7-.7,2.4-1.2v3.9c-1.3.6-2.7,1.1-4.2,1.4-1.5.3-3.2.5-5.1.5Z"/>
<path d="M419.5,153.7v-24.3c.4-.2,1.2-.5,2.5-.9,1.2-.4,2.7-.8,4.4-1.2,1.7-.4,3.5-.5,5.3-.5s.6,0,.8.1c.3,0,.6.1.8.2v3.4c-.9-.1-1.8-.2-2.7-.2s-1.7,0-2.5.1-1.6.2-2.4.3c-.8.1-1.6.3-2.4.4v22.5h-3.8Z"/>
<path d="M446.4,154.4c-1.9,0-3.5-.2-4.8-.6s-2.6-.9-4-1.6v-4c1.1.6,2.1,1.1,2.9,1.5s1.7.7,2.6.9c.9.2,1.9.3,3,.3,1.8,0,3.2-.4,4.3-1.2,1.1-.8,1.7-1.8,1.7-3s-.3-1.7-.8-2.3-1.2-1-2.1-1.3c-.8-.4-1.7-.7-2.7-1.1-1-.3-2.1-.6-3.1-.9-1-.3-2-.8-2.9-1.3-.9-.5-1.6-1.3-2.1-2.1-.5-.9-.8-2-.8-3.4s.3-2.5.8-3.4c.5-1,1.3-1.7,2.1-2.4.9-.6,1.9-1.1,3-1.4,1.1-.3,2.2-.4,3.3-.4,1.6,0,2.9.2,4.1.6,1.1.4,2.3.9,3.5,1.4v3.8c-1.3-.7-2.5-1.3-3.6-1.7-1.1-.4-2.3-.7-3.8-.7s-2.7.3-3.9.9c-1.1.6-1.7,1.5-1.7,2.7s.3,1.8.9,2.4,1.4,1,2.3,1.4c1,.3,2,.7,3.1,1,.9.3,1.8.6,2.8.9,1,.3,1.8.8,2.7,1.3.8.5,1.5,1.3,2,2.1.5.9.8,2,.8,3.4s-.5,3.4-1.4,4.6-2.2,2.1-3.6,2.7c-1.5.6-3,.8-4.5.8Z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 808 KiB

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="a" xmlns="http://www.w3.org/2000/svg" width="180.62mm" height="180.62mm" viewBox="0 0 250 195" xmlns:c2pa="http://c2pa.org/manifest">
<rect x="0" y="0" width="250" height="195" fill="none"/>
<g fill="#ffffff" transform="translate(2,169) scale(0.1)">
<g>
<path d="M139.4.8l-.2,62c-34.3,0-63.4,21.8-73.2,51.9C26.4,141,.2,187.8.2,241.3H0l.2-101.3C.2,63.1,62.4.8,139.4.8Z"/>
<path d="M139.1,92.5l-.8,62.5c-42.6,0-77.1,38.6-77.1,86.3l1-103.9c0-7.9,1.3-15.5,3.6-22.7,21.2-14.1,46.3-22.3,73.2-22.3Z"/>
<path d="M65.9,114.7c-2.3,7.2-3.6,14.8-3.6,22.7l-1,103.9H.2c0-53.5,26.3-100.3,65.7-126.6Z"/>
</g>
<polygon points="202.8 .4 202.8 92.9 226.2 92.9 226.2 56 259.8 56 259.8 36.1 226.2 36.1 226.2 19.4 265.7 19.4 265.7 0 202.8 .4"/>
<polygon points="282.3 -.3 282.3 93 346.1 93 346.1 72.4 306.8 72.4 306.8 55.6 341.7 55.6 341.7 36.4 306.5 36.4 306.5 19.6 346.2 19.6 346.2 -.3 282.3 -.3"/>
<polygon points="365.9 92.8 429.5 92.8 429.5 70.9 389.6 70.9 389.6 .2 365 .2 365.9 92.8"/>
<polygon points="448 0 471.9 0 471.9 92.5 447.5 92.5 448 0"/>
<path d="M485.1,92.5s34.7-44.3,33.4-46.5S485.7,0,485.7,0h29l18.4,24.8L550.1,0h26.6l-29.9,45.4,33.1,46.8h-28.8l-19.3-27.4-18.9,28.1-27.9-.4Z"/>
<g>
<path d="M210.9,154.1c-1.9,0-3.7-.2-5.3-.7-1.6-.4-3-1-4.2-1.6v-3.9c1.1.6,2.4,1.1,3.9,1.6,1.5.5,3.2.7,5.1.7,3.1,0,5.5-.6,7.2-1.7,1.7-1.2,2.5-2.8,2.5-5s-.8-3.9-2.5-5c-1.7-1.2-4.2-1.7-7.4-1.7h-3.9v-3.7h4c2.6,0,4.5-.5,5.9-1.5,1.4-1,2-2.4,2-4.2s-.3-2.3-1-3.1c-.6-.8-1.6-1.5-2.8-1.9-1.3-.4-2.8-.7-4.6-.7s-3,.2-4.3.6c-1.3.4-2.4.8-3.3,1.3v-3.9c1.1-.5,2.3-.9,3.6-1.3,1.3-.4,2.8-.5,4.5-.5s4,.3,5.5.8c1.5.5,2.7,1.3,3.6,2.2.9.9,1.6,1.9,2,3.1.4,1.1.6,2.3.6,3.4s-.2,2.4-.7,3.3c-.5.9-1,1.7-1.6,2.2-.6.6-1.4,1.1-2.3,1.6,1.3.7,2.3,1.4,3.2,2.1s1.6,1.7,2.2,2.8c.6,1.1,1,2.5,1,4.2s-.2,2.5-.7,3.8c-.5,1.2-1.2,2.4-2.2,3.4s-2.4,1.8-4,2.4c-1.7.6-3.7.9-6.1.9Z"/>
<path d="M232.1,153.7v-35.4h11.1c5.5,0,9.7,1.5,12.4,4.4,2.8,3,4.2,7.4,4.2,13.2s-1.4,10.3-4.2,13.2c-2.8,3-6.9,4.5-12.4,4.5h-11.1ZM235.9,150h7c4.5,0,7.8-1.1,9.9-3.4,2-2.3,3.1-5.8,3.1-10.7s-1-8.4-3.1-10.7c-2-2.3-5.3-3.4-9.9-3.4h-7v28.2Z"/>
<path d="M291.9,154.4c-.8,0-1.7-.1-2.6-.3-1-.2-1.9-.5-2.8-.8-.9-.3-1.7-.7-2.4-1l1.3-1.3v14.2h-3.8v-33.2c0-1.1.3-2,1-2.7.7-.7,1.6-1.2,2.7-1.6,1.1-.4,2.3-.6,3.5-.8,1.2-.2,2.4-.2,3.5-.2,2.1,0,4.1.4,6,1.3,1.9.9,3.4,2.4,4.6,4.5s1.7,5,1.7,8.6-.5,5.1-1.5,7.1c-1,2-2.4,3.5-4.3,4.6-1.9,1.1-4.2,1.6-6.9,1.6ZM291.9,150.9c1.9,0,3.5-.4,4.8-1.2,1.3-.8,2.2-2,2.8-3.5.6-1.5,1-3.2,1-5.1s-.2-3.7-.6-5.4c-.4-1.7-1.2-3-2.4-4-1.2-1-3-1.5-5.2-1.5s-3.4.2-4.8.6c-1.4.4-2,1-2,1.8v16.4c1.1.6,2.2,1.1,3.3,1.4s2.2.5,3.3.5Z"/>
<path d="M311.1,153.7v-24.3c.4-.2,1.2-.5,2.5-.9,1.2-.4,2.7-.8,4.4-1.2,1.7-.4,3.5-.5,5.3-.5s.6,0,.8.1c.3,0,.6.1.8.2v3.4c-.9-.1-1.8-.2-2.7-.2s-1.7,0-2.5.1c-.8,0-1.6.2-2.4.3-.8.1-1.6.3-2.4.4v22.5h-3.8Z"/>
<path d="M330.5,122.5v-4.2h4.2v4.2h-4.2ZM330.8,153.7v-26.4h3.8v26.4h-3.8Z"/>
<path d="M342.7,129.3c.8-.4,1.7-.8,2.6-1.1.9-.3,1.8-.6,2.8-.8.9-.2,1.9-.4,2.9-.5,1-.1,2-.2,2.9-.2,2.6,0,4.6.4,6.1,1.1,1.5.8,2.6,1.9,3.3,3.3.7,1.4,1,3.2,1,5.2v17.2h-3.8v-17.2c0-.6,0-1.3-.2-2-.2-.7-.5-1.4-.9-2-.5-.7-1.2-1.2-2.1-1.6s-2.2-.6-3.8-.6-2.2,0-3.4.3-2.4.4-3.6.8v22.4h-3.8v-24.3Z"/>
<path d="M380.7,154.1c-1.9,0-3.4-.6-4.7-1.7-1.3-1.1-1.9-2.9-1.9-5.1v-16.5h-4.6v-3.5h4.6v-7.5h3.8v7.5h6.8v3.5h-6.8v15.3c0,1.5.2,2.6.7,3.3s1.4,1.1,2.8,1.1,1.3,0,1.9-.2,1.1-.3,1.5-.5v3.6c-.5.2-1.1.3-1.9.5s-1.5.2-2.1.2Z"/>
<path d="M402,154.4c-2.5,0-4.7-.5-6.5-1.6-1.8-1-3.3-2.6-4.2-4.7-1-2.1-1.5-4.7-1.5-7.8,0-4.6,1-8,3.1-10.3,2.1-2.3,4.9-3.4,8.5-3.4s5.1.6,6.8,1.9c1.7,1.3,2.9,3,3.7,5.1.7,2.2,1.1,4.6,1.1,7.3h-21.3l.3-3.5h18.5l-1.5.5c-.1-2.6-.8-4.6-2-5.9-1.2-1.3-3.1-2-5.6-2s-3.2.3-4.3,1c-1.1.6-2,1.7-2.6,3.3s-.8,3.8-.8,6.6.8,5.7,2.3,7.3c1.5,1.7,3.6,2.5,6.3,2.5s2.5,0,3.6-.3,2.1-.5,3-.8c.9-.4,1.7-.7,2.4-1.2v3.9c-1.3.6-2.7,1.1-4.2,1.4-1.5.3-3.2.5-5.1.5Z"/>
<path d="M419.5,153.7v-24.3c.4-.2,1.2-.5,2.5-.9,1.2-.4,2.7-.8,4.4-1.2,1.7-.4,3.5-.5,5.3-.5s.6,0,.8.1c.3,0,.6.1.8.2v3.4c-.9-.1-1.8-.2-2.7-.2s-1.7,0-2.5.1-1.6.2-2.4.3c-.8.1-1.6.3-2.4.4v22.5h-3.8Z"/>
<path d="M446.4,154.4c-1.9,0-3.5-.2-4.8-.6s-2.6-.9-4-1.6v-4c1.1.6,2.1,1.1,2.9,1.5s1.7.7,2.6.9c.9.2,1.9.3,3,.3,1.8,0,3.2-.4,4.3-1.2,1.1-.8,1.7-1.8,1.7-3s-.3-1.7-.8-2.3-1.2-1-2.1-1.3c-.8-.4-1.7-.7-2.7-1.1-1-.3-2.1-.6-3.1-.9-1-.3-2-.8-2.9-1.3-.9-.5-1.6-1.3-2.1-2.1-.5-.9-.8-2-.8-3.4s.3-2.5.8-3.4c.5-1,1.3-1.7,2.1-2.4.9-.6,1.9-1.1,3-1.4,1.1-.3,2.2-.4,3.3-.4,1.6,0,2.9.2,4.1.6,1.1.4,2.3.9,3.5,1.4v3.8c-1.3-.7-2.5-1.3-3.6-1.7-1.1-.4-2.3-.7-3.8-.7s-2.7.3-3.9.9c-1.1.6-1.7,1.5-1.7,2.7s.3,1.8.9,2.4,1.4,1,2.3,1.4c1,.3,2,.7,3.1,1,.9.3,1.8.6,2.8.9,1,.3,1.8.8,2.7,1.3.8.5,1.5,1.3,2,2.1.5.9.8,2,.8,3.4s-.5,3.4-1.4,4.6-2.2,2.1-3.6,2.7c-1.5.6-3,.8-4.5.8Z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 716 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 793 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="a" xmlns="http://www.w3.org/2000/svg" width="180.62mm" height="180.62mm" viewBox="0 0 300 400" xmlns:c2pa="http://c2pa.org/manifest">
<rect x="0" y="0" width="300" height="400" fill="none"/>
<g fill="#ffffff" transform="translate(3,365) scale(0.13)">
<g>
<path d="M139.4.8l-.2,62c-34.3,0-63.4,21.8-73.2,51.9C26.4,141,.2,187.8.2,241.3H0l.2-101.3C.2,63.1,62.4.8,139.4.8Z"/>
<path d="M139.1,92.5l-.8,62.5c-42.6,0-77.1,38.6-77.1,86.3l1-103.9c0-7.9,1.3-15.5,3.6-22.7,21.2-14.1,46.3-22.3,73.2-22.3Z"/>
<path d="M65.9,114.7c-2.3,7.2-3.6,14.8-3.6,22.7l-1,103.9H.2c0-53.5,26.3-100.3,65.7-126.6Z"/>
</g>
<polygon points="202.8 .4 202.8 92.9 226.2 92.9 226.2 56 259.8 56 259.8 36.1 226.2 36.1 226.2 19.4 265.7 19.4 265.7 0 202.8 .4"/>
<polygon points="282.3 -.3 282.3 93 346.1 93 346.1 72.4 306.8 72.4 306.8 55.6 341.7 55.6 341.7 36.4 306.5 36.4 306.5 19.6 346.2 19.6 346.2 -.3 282.3 -.3"/>
<polygon points="365.9 92.8 429.5 92.8 429.5 70.9 389.6 70.9 389.6 .2 365 .2 365.9 92.8"/>
<polygon points="448 0 471.9 0 471.9 92.5 447.5 92.5 448 0"/>
<path d="M485.1,92.5s34.7-44.3,33.4-46.5S485.7,0,485.7,0h29l18.4,24.8L550.1,0h26.6l-29.9,45.4,33.1,46.8h-28.8l-19.3-27.4-18.9,28.1-27.9-.4Z"/>
<g>
<path d="M210.9,154.1c-1.9,0-3.7-.2-5.3-.7-1.6-.4-3-1-4.2-1.6v-3.9c1.1.6,2.4,1.1,3.9,1.6,1.5.5,3.2.7,5.1.7,3.1,0,5.5-.6,7.2-1.7,1.7-1.2,2.5-2.8,2.5-5s-.8-3.9-2.5-5c-1.7-1.2-4.2-1.7-7.4-1.7h-3.9v-3.7h4c2.6,0,4.5-.5,5.9-1.5,1.4-1,2-2.4,2-4.2s-.3-2.3-1-3.1c-.6-.8-1.6-1.5-2.8-1.9-1.3-.4-2.8-.7-4.6-.7s-3,.2-4.3.6c-1.3.4-2.4.8-3.3,1.3v-3.9c1.1-.5,2.3-.9,3.6-1.3,1.3-.4,2.8-.5,4.5-.5s4,.3,5.5.8c1.5.5,2.7,1.3,3.6,2.2.9.9,1.6,1.9,2,3.1.4,1.1.6,2.3.6,3.4s-.2,2.4-.7,3.3c-.5.9-1,1.7-1.6,2.2-.6.6-1.4,1.1-2.3,1.6,1.3.7,2.3,1.4,3.2,2.1s1.6,1.7,2.2,2.8c.6,1.1,1,2.5,1,4.2s-.2,2.5-.7,3.8c-.5,1.2-1.2,2.4-2.2,3.4s-2.4,1.8-4,2.4c-1.7.6-3.7.9-6.1.9Z"/>
<path d="M232.1,153.7v-35.4h11.1c5.5,0,9.7,1.5,12.4,4.4,2.8,3,4.2,7.4,4.2,13.2s-1.4,10.3-4.2,13.2c-2.8,3-6.9,4.5-12.4,4.5h-11.1ZM235.9,150h7c4.5,0,7.8-1.1,9.9-3.4,2-2.3,3.1-5.8,3.1-10.7s-1-8.4-3.1-10.7c-2-2.3-5.3-3.4-9.9-3.4h-7v28.2Z"/>
<path d="M291.9,154.4c-.8,0-1.7-.1-2.6-.3-1-.2-1.9-.5-2.8-.8-.9-.3-1.7-.7-2.4-1l1.3-1.3v14.2h-3.8v-33.2c0-1.1.3-2,1-2.7.7-.7,1.6-1.2,2.7-1.6,1.1-.4,2.3-.6,3.5-.8,1.2-.2,2.4-.2,3.5-.2,2.1,0,4.1.4,6,1.3,1.9.9,3.4,2.4,4.6,4.5s1.7,5,1.7,8.6-.5,5.1-1.5,7.1c-1,2-2.4,3.5-4.3,4.6-1.9,1.1-4.2,1.6-6.9,1.6ZM291.9,150.9c1.9,0,3.5-.4,4.8-1.2,1.3-.8,2.2-2,2.8-3.5.6-1.5,1-3.2,1-5.1s-.2-3.7-.6-5.4c-.4-1.7-1.2-3-2.4-4-1.2-1-3-1.5-5.2-1.5s-3.4.2-4.8.6c-1.4.4-2,1-2,1.8v16.4c1.1.6,2.2,1.1,3.3,1.4s2.2.5,3.3.5Z"/>
<path d="M311.1,153.7v-24.3c.4-.2,1.2-.5,2.5-.9,1.2-.4,2.7-.8,4.4-1.2,1.7-.4,3.5-.5,5.3-.5s.6,0,.8.1c.3,0,.6.1.8.2v3.4c-.9-.1-1.8-.2-2.7-.2s-1.7,0-2.5.1c-.8,0-1.6.2-2.4.3-.8.1-1.6.3-2.4.4v22.5h-3.8Z"/>
<path d="M330.5,122.5v-4.2h4.2v4.2h-4.2ZM330.8,153.7v-26.4h3.8v26.4h-3.8Z"/>
<path d="M342.7,129.3c.8-.4,1.7-.8,2.6-1.1.9-.3,1.8-.6,2.8-.8.9-.2,1.9-.4,2.9-.5,1-.1,2-.2,2.9-.2,2.6,0,4.6.4,6.1,1.1,1.5.8,2.6,1.9,3.3,3.3.7,1.4,1,3.2,1,5.2v17.2h-3.8v-17.2c0-.6,0-1.3-.2-2-.2-.7-.5-1.4-.9-2-.5-.7-1.2-1.2-2.1-1.6s-2.2-.6-3.8-.6-2.2,0-3.4.3-2.4.4-3.6.8v22.4h-3.8v-24.3Z"/>
<path d="M380.7,154.1c-1.9,0-3.4-.6-4.7-1.7-1.3-1.1-1.9-2.9-1.9-5.1v-16.5h-4.6v-3.5h4.6v-7.5h3.8v7.5h6.8v3.5h-6.8v15.3c0,1.5.2,2.6.7,3.3s1.4,1.1,2.8,1.1,1.3,0,1.9-.2,1.1-.3,1.5-.5v3.6c-.5.2-1.1.3-1.9.5s-1.5.2-2.1.2Z"/>
<path d="M402,154.4c-2.5,0-4.7-.5-6.5-1.6-1.8-1-3.3-2.6-4.2-4.7-1-2.1-1.5-4.7-1.5-7.8,0-4.6,1-8,3.1-10.3,2.1-2.3,4.9-3.4,8.5-3.4s5.1.6,6.8,1.9c1.7,1.3,2.9,3,3.7,5.1.7,2.2,1.1,4.6,1.1,7.3h-21.3l.3-3.5h18.5l-1.5.5c-.1-2.6-.8-4.6-2-5.9-1.2-1.3-3.1-2-5.6-2s-3.2.3-4.3,1c-1.1.6-2,1.7-2.6,3.3s-.8,3.8-.8,6.6.8,5.7,2.3,7.3c1.5,1.7,3.6,2.5,6.3,2.5s2.5,0,3.6-.3,2.1-.5,3-.8c.9-.4,1.7-.7,2.4-1.2v3.9c-1.3.6-2.7,1.1-4.2,1.4-1.5.3-3.2.5-5.1.5Z"/>
<path d="M419.5,153.7v-24.3c.4-.2,1.2-.5,2.5-.9,1.2-.4,2.7-.8,4.4-1.2,1.7-.4,3.5-.5,5.3-.5s.6,0,.8.1c.3,0,.6.1.8.2v3.4c-.9-.1-1.8-.2-2.7-.2s-1.7,0-2.5.1-1.6.2-2.4.3c-.8.1-1.6.3-2.4.4v22.5h-3.8Z"/>
<path d="M446.4,154.4c-1.9,0-3.5-.2-4.8-.6s-2.6-.9-4-1.6v-4c1.1.6,2.1,1.1,2.9,1.5s1.7.7,2.6.9c.9.2,1.9.3,3,.3,1.8,0,3.2-.4,4.3-1.2,1.1-.8,1.7-1.8,1.7-3s-.3-1.7-.8-2.3-1.2-1-2.1-1.3c-.8-.4-1.7-.7-2.7-1.1-1-.3-2.1-.6-3.1-.9-1-.3-2-.8-2.9-1.3-.9-.5-1.6-1.3-2.1-2.1-.5-.9-.8-2-.8-3.4s.3-2.5.8-3.4c.5-1,1.3-1.7,2.1-2.4.9-.6,1.9-1.1,3-1.4,1.1-.3,2.2-.4,3.3-.4,1.6,0,2.9.2,4.1.6,1.1.4,2.3.9,3.5,1.4v3.8c-1.3-.7-2.5-1.3-3.6-1.7-1.1-.4-2.3-.7-3.8-.7s-2.7.3-3.9.9c-1.1.6-1.7,1.5-1.7,2.7s.3,1.8.9,2.4,1.4,1,2.3,1.4c1,.3,2,.7,3.1,1,.9.3,1.8.6,2.8.9,1,.3,1.8.8,2.7,1.3.8.5,1.5,1.3,2,2.1.5.9.8,2,.8,3.4s-.5,3.4-1.4,4.6-2.2,2.1-3.6,2.7c-1.5.6-3,.8-4.5.8Z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="a" xmlns="http://www.w3.org/2000/svg" width="180.62mm" height="180.62mm" viewBox="0 0 235 244" xmlns:c2pa="http://c2pa.org/manifest">
<rect x="0" y="0" width="235" height="244" fill="none"/>
<g fill="#ffffff" transform="translate(2,215) scale(0.1)">
<g>
<path d="M139.4.8l-.2,62c-34.3,0-63.4,21.8-73.2,51.9C26.4,141,.2,187.8.2,241.3H0l.2-101.3C.2,63.1,62.4.8,139.4.8Z"/>
<path d="M139.1,92.5l-.8,62.5c-42.6,0-77.1,38.6-77.1,86.3l1-103.9c0-7.9,1.3-15.5,3.6-22.7,21.2-14.1,46.3-22.3,73.2-22.3Z"/>
<path d="M65.9,114.7c-2.3,7.2-3.6,14.8-3.6,22.7l-1,103.9H.2c0-53.5,26.3-100.3,65.7-126.6Z"/>
</g>
<polygon points="202.8 .4 202.8 92.9 226.2 92.9 226.2 56 259.8 56 259.8 36.1 226.2 36.1 226.2 19.4 265.7 19.4 265.7 0 202.8 .4"/>
<polygon points="282.3 -.3 282.3 93 346.1 93 346.1 72.4 306.8 72.4 306.8 55.6 341.7 55.6 341.7 36.4 306.5 36.4 306.5 19.6 346.2 19.6 346.2 -.3 282.3 -.3"/>
<polygon points="365.9 92.8 429.5 92.8 429.5 70.9 389.6 70.9 389.6 .2 365 .2 365.9 92.8"/>
<polygon points="448 0 471.9 0 471.9 92.5 447.5 92.5 448 0"/>
<path d="M485.1,92.5s34.7-44.3,33.4-46.5S485.7,0,485.7,0h29l18.4,24.8L550.1,0h26.6l-29.9,45.4,33.1,46.8h-28.8l-19.3-27.4-18.9,28.1-27.9-.4Z"/>
<g>
<path d="M210.9,154.1c-1.9,0-3.7-.2-5.3-.7-1.6-.4-3-1-4.2-1.6v-3.9c1.1.6,2.4,1.1,3.9,1.6,1.5.5,3.2.7,5.1.7,3.1,0,5.5-.6,7.2-1.7,1.7-1.2,2.5-2.8,2.5-5s-.8-3.9-2.5-5c-1.7-1.2-4.2-1.7-7.4-1.7h-3.9v-3.7h4c2.6,0,4.5-.5,5.9-1.5,1.4-1,2-2.4,2-4.2s-.3-2.3-1-3.1c-.6-.8-1.6-1.5-2.8-1.9-1.3-.4-2.8-.7-4.6-.7s-3,.2-4.3.6c-1.3.4-2.4.8-3.3,1.3v-3.9c1.1-.5,2.3-.9,3.6-1.3,1.3-.4,2.8-.5,4.5-.5s4,.3,5.5.8c1.5.5,2.7,1.3,3.6,2.2.9.9,1.6,1.9,2,3.1.4,1.1.6,2.3.6,3.4s-.2,2.4-.7,3.3c-.5.9-1,1.7-1.6,2.2-.6.6-1.4,1.1-2.3,1.6,1.3.7,2.3,1.4,3.2,2.1s1.6,1.7,2.2,2.8c.6,1.1,1,2.5,1,4.2s-.2,2.5-.7,3.8c-.5,1.2-1.2,2.4-2.2,3.4s-2.4,1.8-4,2.4c-1.7.6-3.7.9-6.1.9Z"/>
<path d="M232.1,153.7v-35.4h11.1c5.5,0,9.7,1.5,12.4,4.4,2.8,3,4.2,7.4,4.2,13.2s-1.4,10.3-4.2,13.2c-2.8,3-6.9,4.5-12.4,4.5h-11.1ZM235.9,150h7c4.5,0,7.8-1.1,9.9-3.4,2-2.3,3.1-5.8,3.1-10.7s-1-8.4-3.1-10.7c-2-2.3-5.3-3.4-9.9-3.4h-7v28.2Z"/>
<path d="M291.9,154.4c-.8,0-1.7-.1-2.6-.3-1-.2-1.9-.5-2.8-.8-.9-.3-1.7-.7-2.4-1l1.3-1.3v14.2h-3.8v-33.2c0-1.1.3-2,1-2.7.7-.7,1.6-1.2,2.7-1.6,1.1-.4,2.3-.6,3.5-.8,1.2-.2,2.4-.2,3.5-.2,2.1,0,4.1.4,6,1.3,1.9.9,3.4,2.4,4.6,4.5s1.7,5,1.7,8.6-.5,5.1-1.5,7.1c-1,2-2.4,3.5-4.3,4.6-1.9,1.1-4.2,1.6-6.9,1.6ZM291.9,150.9c1.9,0,3.5-.4,4.8-1.2,1.3-.8,2.2-2,2.8-3.5.6-1.5,1-3.2,1-5.1s-.2-3.7-.6-5.4c-.4-1.7-1.2-3-2.4-4-1.2-1-3-1.5-5.2-1.5s-3.4.2-4.8.6c-1.4.4-2,1-2,1.8v16.4c1.1.6,2.2,1.1,3.3,1.4s2.2.5,3.3.5Z"/>
<path d="M311.1,153.7v-24.3c.4-.2,1.2-.5,2.5-.9,1.2-.4,2.7-.8,4.4-1.2,1.7-.4,3.5-.5,5.3-.5s.6,0,.8.1c.3,0,.6.1.8.2v3.4c-.9-.1-1.8-.2-2.7-.2s-1.7,0-2.5.1c-.8,0-1.6.2-2.4.3-.8.1-1.6.3-2.4.4v22.5h-3.8Z"/>
<path d="M330.5,122.5v-4.2h4.2v4.2h-4.2ZM330.8,153.7v-26.4h3.8v26.4h-3.8Z"/>
<path d="M342.7,129.3c.8-.4,1.7-.8,2.6-1.1.9-.3,1.8-.6,2.8-.8.9-.2,1.9-.4,2.9-.5,1-.1,2-.2,2.9-.2,2.6,0,4.6.4,6.1,1.1,1.5.8,2.6,1.9,3.3,3.3.7,1.4,1,3.2,1,5.2v17.2h-3.8v-17.2c0-.6,0-1.3-.2-2-.2-.7-.5-1.4-.9-2-.5-.7-1.2-1.2-2.1-1.6s-2.2-.6-3.8-.6-2.2,0-3.4.3-2.4.4-3.6.8v22.4h-3.8v-24.3Z"/>
<path d="M380.7,154.1c-1.9,0-3.4-.6-4.7-1.7-1.3-1.1-1.9-2.9-1.9-5.1v-16.5h-4.6v-3.5h4.6v-7.5h3.8v7.5h6.8v3.5h-6.8v15.3c0,1.5.2,2.6.7,3.3s1.4,1.1,2.8,1.1,1.3,0,1.9-.2,1.1-.3,1.5-.5v3.6c-.5.2-1.1.3-1.9.5s-1.5.2-2.1.2Z"/>
<path d="M402,154.4c-2.5,0-4.7-.5-6.5-1.6-1.8-1-3.3-2.6-4.2-4.7-1-2.1-1.5-4.7-1.5-7.8,0-4.6,1-8,3.1-10.3,2.1-2.3,4.9-3.4,8.5-3.4s5.1.6,6.8,1.9c1.7,1.3,2.9,3,3.7,5.1.7,2.2,1.1,4.6,1.1,7.3h-21.3l.3-3.5h18.5l-1.5.5c-.1-2.6-.8-4.6-2-5.9-1.2-1.3-3.1-2-5.6-2s-3.2.3-4.3,1c-1.1.6-2,1.7-2.6,3.3s-.8,3.8-.8,6.6.8,5.7,2.3,7.3c1.5,1.7,3.6,2.5,6.3,2.5s2.5,0,3.6-.3,2.1-.5,3-.8c.9-.4,1.7-.7,2.4-1.2v3.9c-1.3.6-2.7,1.1-4.2,1.4-1.5.3-3.2.5-5.1.5Z"/>
<path d="M419.5,153.7v-24.3c.4-.2,1.2-.5,2.5-.9,1.2-.4,2.7-.8,4.4-1.2,1.7-.4,3.5-.5,5.3-.5s.6,0,.8.1c.3,0,.6.1.8.2v3.4c-.9-.1-1.8-.2-2.7-.2s-1.7,0-2.5.1-1.6.2-2.4.3c-.8.1-1.6.3-2.4.4v22.5h-3.8Z"/>
<path d="M446.4,154.4c-1.9,0-3.5-.2-4.8-.6s-2.6-.9-4-1.6v-4c1.1.6,2.1,1.1,2.9,1.5s1.7.7,2.6.9c.9.2,1.9.3,3,.3,1.8,0,3.2-.4,4.3-1.2,1.1-.8,1.7-1.8,1.7-3s-.3-1.7-.8-2.3-1.2-1-2.1-1.3c-.8-.4-1.7-.7-2.7-1.1-1-.3-2.1-.6-3.1-.9-1-.3-2-.8-2.9-1.3-.9-.5-1.6-1.3-2.1-2.1-.5-.9-.8-2-.8-3.4s.3-2.5.8-3.4c.5-1,1.3-1.7,2.1-2.4.9-.6,1.9-1.1,3-1.4,1.1-.3,2.2-.4,3.3-.4,1.6,0,2.9.2,4.1.6,1.1.4,2.3.9,3.5,1.4v3.8c-1.3-.7-2.5-1.3-3.6-1.7-1.1-.4-2.3-.7-3.8-.7s-2.7.3-3.9.9c-1.1.6-1.7,1.5-1.7,2.7s.3,1.8.9,2.4,1.4,1,2.3,1.4c1,.3,2,.7,3.1,1,.9.3,1.8.6,2.8.9,1,.3,1.8.8,2.7,1.3.8.5,1.5,1.3,2,2.1.5.9.8,2,.8,3.4s-.5,3.4-1.4,4.6-2.2,2.1-3.6,2.7c-1.5.6-3,.8-4.5.8Z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1023 KiB

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="a" xmlns="http://www.w3.org/2000/svg" width="180.62mm" height="180.62mm" viewBox="0 0 600 400" xmlns:c2pa="http://c2pa.org/manifest">
<rect x="0" y="0" width="600" height="400" fill="none"/>
<g fill="#ffffff" transform="translate(4,357) scale(0.16)">
<g>
<path d="M139.4.8l-.2,62c-34.3,0-63.4,21.8-73.2,51.9C26.4,141,.2,187.8.2,241.3H0l.2-101.3C.2,63.1,62.4.8,139.4.8Z"/>
<path d="M139.1,92.5l-.8,62.5c-42.6,0-77.1,38.6-77.1,86.3l1-103.9c0-7.9,1.3-15.5,3.6-22.7,21.2-14.1,46.3-22.3,73.2-22.3Z"/>
<path d="M65.9,114.7c-2.3,7.2-3.6,14.8-3.6,22.7l-1,103.9H.2c0-53.5,26.3-100.3,65.7-126.6Z"/>
</g>
<polygon points="202.8 .4 202.8 92.9 226.2 92.9 226.2 56 259.8 56 259.8 36.1 226.2 36.1 226.2 19.4 265.7 19.4 265.7 0 202.8 .4"/>
<polygon points="282.3 -.3 282.3 93 346.1 93 346.1 72.4 306.8 72.4 306.8 55.6 341.7 55.6 341.7 36.4 306.5 36.4 306.5 19.6 346.2 19.6 346.2 -.3 282.3 -.3"/>
<polygon points="365.9 92.8 429.5 92.8 429.5 70.9 389.6 70.9 389.6 .2 365 .2 365.9 92.8"/>
<polygon points="448 0 471.9 0 471.9 92.5 447.5 92.5 448 0"/>
<path d="M485.1,92.5s34.7-44.3,33.4-46.5S485.7,0,485.7,0h29l18.4,24.8L550.1,0h26.6l-29.9,45.4,33.1,46.8h-28.8l-19.3-27.4-18.9,28.1-27.9-.4Z"/>
<g>
<path d="M210.9,154.1c-1.9,0-3.7-.2-5.3-.7-1.6-.4-3-1-4.2-1.6v-3.9c1.1.6,2.4,1.1,3.9,1.6,1.5.5,3.2.7,5.1.7,3.1,0,5.5-.6,7.2-1.7,1.7-1.2,2.5-2.8,2.5-5s-.8-3.9-2.5-5c-1.7-1.2-4.2-1.7-7.4-1.7h-3.9v-3.7h4c2.6,0,4.5-.5,5.9-1.5,1.4-1,2-2.4,2-4.2s-.3-2.3-1-3.1c-.6-.8-1.6-1.5-2.8-1.9-1.3-.4-2.8-.7-4.6-.7s-3,.2-4.3.6c-1.3.4-2.4.8-3.3,1.3v-3.9c1.1-.5,2.3-.9,3.6-1.3,1.3-.4,2.8-.5,4.5-.5s4,.3,5.5.8c1.5.5,2.7,1.3,3.6,2.2.9.9,1.6,1.9,2,3.1.4,1.1.6,2.3.6,3.4s-.2,2.4-.7,3.3c-.5.9-1,1.7-1.6,2.2-.6.6-1.4,1.1-2.3,1.6,1.3.7,2.3,1.4,3.2,2.1s1.6,1.7,2.2,2.8c.6,1.1,1,2.5,1,4.2s-.2,2.5-.7,3.8c-.5,1.2-1.2,2.4-2.2,3.4s-2.4,1.8-4,2.4c-1.7.6-3.7.9-6.1.9Z"/>
<path d="M232.1,153.7v-35.4h11.1c5.5,0,9.7,1.5,12.4,4.4,2.8,3,4.2,7.4,4.2,13.2s-1.4,10.3-4.2,13.2c-2.8,3-6.9,4.5-12.4,4.5h-11.1ZM235.9,150h7c4.5,0,7.8-1.1,9.9-3.4,2-2.3,3.1-5.8,3.1-10.7s-1-8.4-3.1-10.7c-2-2.3-5.3-3.4-9.9-3.4h-7v28.2Z"/>
<path d="M291.9,154.4c-.8,0-1.7-.1-2.6-.3-1-.2-1.9-.5-2.8-.8-.9-.3-1.7-.7-2.4-1l1.3-1.3v14.2h-3.8v-33.2c0-1.1.3-2,1-2.7.7-.7,1.6-1.2,2.7-1.6,1.1-.4,2.3-.6,3.5-.8,1.2-.2,2.4-.2,3.5-.2,2.1,0,4.1.4,6,1.3,1.9.9,3.4,2.4,4.6,4.5s1.7,5,1.7,8.6-.5,5.1-1.5,7.1c-1,2-2.4,3.5-4.3,4.6-1.9,1.1-4.2,1.6-6.9,1.6ZM291.9,150.9c1.9,0,3.5-.4,4.8-1.2,1.3-.8,2.2-2,2.8-3.5.6-1.5,1-3.2,1-5.1s-.2-3.7-.6-5.4c-.4-1.7-1.2-3-2.4-4-1.2-1-3-1.5-5.2-1.5s-3.4.2-4.8.6c-1.4.4-2,1-2,1.8v16.4c1.1.6,2.2,1.1,3.3,1.4s2.2.5,3.3.5Z"/>
<path d="M311.1,153.7v-24.3c.4-.2,1.2-.5,2.5-.9,1.2-.4,2.7-.8,4.4-1.2,1.7-.4,3.5-.5,5.3-.5s.6,0,.8.1c.3,0,.6.1.8.2v3.4c-.9-.1-1.8-.2-2.7-.2s-1.7,0-2.5.1c-.8,0-1.6.2-2.4.3-.8.1-1.6.3-2.4.4v22.5h-3.8Z"/>
<path d="M330.5,122.5v-4.2h4.2v4.2h-4.2ZM330.8,153.7v-26.4h3.8v26.4h-3.8Z"/>
<path d="M342.7,129.3c.8-.4,1.7-.8,2.6-1.1.9-.3,1.8-.6,2.8-.8.9-.2,1.9-.4,2.9-.5,1-.1,2-.2,2.9-.2,2.6,0,4.6.4,6.1,1.1,1.5.8,2.6,1.9,3.3,3.3.7,1.4,1,3.2,1,5.2v17.2h-3.8v-17.2c0-.6,0-1.3-.2-2-.2-.7-.5-1.4-.9-2-.5-.7-1.2-1.2-2.1-1.6s-2.2-.6-3.8-.6-2.2,0-3.4.3-2.4.4-3.6.8v22.4h-3.8v-24.3Z"/>
<path d="M380.7,154.1c-1.9,0-3.4-.6-4.7-1.7-1.3-1.1-1.9-2.9-1.9-5.1v-16.5h-4.6v-3.5h4.6v-7.5h3.8v7.5h6.8v3.5h-6.8v15.3c0,1.5.2,2.6.7,3.3s1.4,1.1,2.8,1.1,1.3,0,1.9-.2,1.1-.3,1.5-.5v3.6c-.5.2-1.1.3-1.9.5s-1.5.2-2.1.2Z"/>
<path d="M402,154.4c-2.5,0-4.7-.5-6.5-1.6-1.8-1-3.3-2.6-4.2-4.7-1-2.1-1.5-4.7-1.5-7.8,0-4.6,1-8,3.1-10.3,2.1-2.3,4.9-3.4,8.5-3.4s5.1.6,6.8,1.9c1.7,1.3,2.9,3,3.7,5.1.7,2.2,1.1,4.6,1.1,7.3h-21.3l.3-3.5h18.5l-1.5.5c-.1-2.6-.8-4.6-2-5.9-1.2-1.3-3.1-2-5.6-2s-3.2.3-4.3,1c-1.1.6-2,1.7-2.6,3.3s-.8,3.8-.8,6.6.8,5.7,2.3,7.3c1.5,1.7,3.6,2.5,6.3,2.5s2.5,0,3.6-.3,2.1-.5,3-.8c.9-.4,1.7-.7,2.4-1.2v3.9c-1.3.6-2.7,1.1-4.2,1.4-1.5.3-3.2.5-5.1.5Z"/>
<path d="M419.5,153.7v-24.3c.4-.2,1.2-.5,2.5-.9,1.2-.4,2.7-.8,4.4-1.2,1.7-.4,3.5-.5,5.3-.5s.6,0,.8.1c.3,0,.6.1.8.2v3.4c-.9-.1-1.8-.2-2.7-.2s-1.7,0-2.5.1-1.6.2-2.4.3c-.8.1-1.6.3-2.4.4v22.5h-3.8Z"/>
<path d="M446.4,154.4c-1.9,0-3.5-.2-4.8-.6s-2.6-.9-4-1.6v-4c1.1.6,2.1,1.1,2.9,1.5s1.7.7,2.6.9c.9.2,1.9.3,3,.3,1.8,0,3.2-.4,4.3-1.2,1.1-.8,1.7-1.8,1.7-3s-.3-1.7-.8-2.3-1.2-1-2.1-1.3c-.8-.4-1.7-.7-2.7-1.1-1-.3-2.1-.6-3.1-.9-1-.3-2-.8-2.9-1.3-.9-.5-1.6-1.3-2.1-2.1-.5-.9-.8-2-.8-3.4s.3-2.5.8-3.4c.5-1,1.3-1.7,2.1-2.4.9-.6,1.9-1.1,3-1.4,1.1-.3,2.2-.4,3.3-.4,1.6,0,2.9.2,4.1.6,1.1.4,2.3.9,3.5,1.4v3.8c-1.3-.7-2.5-1.3-3.6-1.7-1.1-.4-2.3-.7-3.8-.7s-2.7.3-3.9.9c-1.1.6-1.7,1.5-1.7,2.7s.3,1.8.9,2.4,1.4,1,2.3,1.4c1,.3,2,.7,3.1,1,.9.3,1.8.6,2.8.9,1,.3,1.8.8,2.7,1.3.8.5,1.5,1.3,2,2.1.5.9.8,2,.8,3.4s-.5,3.4-1.4,4.6-2.2,2.1-3.6,2.7c-1.5.6-3,.8-4.5.8Z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="a" xmlns="http://www.w3.org/2000/svg" width="180.62mm" height="180.62mm" viewBox="0 0 205 255" xmlns:c2pa="http://c2pa.org/manifest">
<rect x="0" y="0" width="205" height="255" fill="none"/>
<g fill="#ffffff" transform="translate(3,228) scale(0.1)">
<g>
<path d="M139.4.8l-.2,62c-34.3,0-63.4,21.8-73.2,51.9C26.4,141,.2,187.8.2,241.3H0l.2-101.3C.2,63.1,62.4.8,139.4.8Z"/>
<path d="M139.1,92.5l-.8,62.5c-42.6,0-77.1,38.6-77.1,86.3l1-103.9c0-7.9,1.3-15.5,3.6-22.7,21.2-14.1,46.3-22.3,73.2-22.3Z"/>
<path d="M65.9,114.7c-2.3,7.2-3.6,14.8-3.6,22.7l-1,103.9H.2c0-53.5,26.3-100.3,65.7-126.6Z"/>
</g>
<polygon points="202.8 .4 202.8 92.9 226.2 92.9 226.2 56 259.8 56 259.8 36.1 226.2 36.1 226.2 19.4 265.7 19.4 265.7 0 202.8 .4"/>
<polygon points="282.3 -.3 282.3 93 346.1 93 346.1 72.4 306.8 72.4 306.8 55.6 341.7 55.6 341.7 36.4 306.5 36.4 306.5 19.6 346.2 19.6 346.2 -.3 282.3 -.3"/>
<polygon points="365.9 92.8 429.5 92.8 429.5 70.9 389.6 70.9 389.6 .2 365 .2 365.9 92.8"/>
<polygon points="448 0 471.9 0 471.9 92.5 447.5 92.5 448 0"/>
<path d="M485.1,92.5s34.7-44.3,33.4-46.5S485.7,0,485.7,0h29l18.4,24.8L550.1,0h26.6l-29.9,45.4,33.1,46.8h-28.8l-19.3-27.4-18.9,28.1-27.9-.4Z"/>
<g>
<path d="M210.9,154.1c-1.9,0-3.7-.2-5.3-.7-1.6-.4-3-1-4.2-1.6v-3.9c1.1.6,2.4,1.1,3.9,1.6,1.5.5,3.2.7,5.1.7,3.1,0,5.5-.6,7.2-1.7,1.7-1.2,2.5-2.8,2.5-5s-.8-3.9-2.5-5c-1.7-1.2-4.2-1.7-7.4-1.7h-3.9v-3.7h4c2.6,0,4.5-.5,5.9-1.5,1.4-1,2-2.4,2-4.2s-.3-2.3-1-3.1c-.6-.8-1.6-1.5-2.8-1.9-1.3-.4-2.8-.7-4.6-.7s-3,.2-4.3.6c-1.3.4-2.4.8-3.3,1.3v-3.9c1.1-.5,2.3-.9,3.6-1.3,1.3-.4,2.8-.5,4.5-.5s4,.3,5.5.8c1.5.5,2.7,1.3,3.6,2.2.9.9,1.6,1.9,2,3.1.4,1.1.6,2.3.6,3.4s-.2,2.4-.7,3.3c-.5.9-1,1.7-1.6,2.2-.6.6-1.4,1.1-2.3,1.6,1.3.7,2.3,1.4,3.2,2.1s1.6,1.7,2.2,2.8c.6,1.1,1,2.5,1,4.2s-.2,2.5-.7,3.8c-.5,1.2-1.2,2.4-2.2,3.4s-2.4,1.8-4,2.4c-1.7.6-3.7.9-6.1.9Z"/>
<path d="M232.1,153.7v-35.4h11.1c5.5,0,9.7,1.5,12.4,4.4,2.8,3,4.2,7.4,4.2,13.2s-1.4,10.3-4.2,13.2c-2.8,3-6.9,4.5-12.4,4.5h-11.1ZM235.9,150h7c4.5,0,7.8-1.1,9.9-3.4,2-2.3,3.1-5.8,3.1-10.7s-1-8.4-3.1-10.7c-2-2.3-5.3-3.4-9.9-3.4h-7v28.2Z"/>
<path d="M291.9,154.4c-.8,0-1.7-.1-2.6-.3-1-.2-1.9-.5-2.8-.8-.9-.3-1.7-.7-2.4-1l1.3-1.3v14.2h-3.8v-33.2c0-1.1.3-2,1-2.7.7-.7,1.6-1.2,2.7-1.6,1.1-.4,2.3-.6,3.5-.8,1.2-.2,2.4-.2,3.5-.2,2.1,0,4.1.4,6,1.3,1.9.9,3.4,2.4,4.6,4.5s1.7,5,1.7,8.6-.5,5.1-1.5,7.1c-1,2-2.4,3.5-4.3,4.6-1.9,1.1-4.2,1.6-6.9,1.6ZM291.9,150.9c1.9,0,3.5-.4,4.8-1.2,1.3-.8,2.2-2,2.8-3.5.6-1.5,1-3.2,1-5.1s-.2-3.7-.6-5.4c-.4-1.7-1.2-3-2.4-4-1.2-1-3-1.5-5.2-1.5s-3.4.2-4.8.6c-1.4.4-2,1-2,1.8v16.4c1.1.6,2.2,1.1,3.3,1.4s2.2.5,3.3.5Z"/>
<path d="M311.1,153.7v-24.3c.4-.2,1.2-.5,2.5-.9,1.2-.4,2.7-.8,4.4-1.2,1.7-.4,3.5-.5,5.3-.5s.6,0,.8.1c.3,0,.6.1.8.2v3.4c-.9-.1-1.8-.2-2.7-.2s-1.7,0-2.5.1c-.8,0-1.6.2-2.4.3-.8.1-1.6.3-2.4.4v22.5h-3.8Z"/>
<path d="M330.5,122.5v-4.2h4.2v4.2h-4.2ZM330.8,153.7v-26.4h3.8v26.4h-3.8Z"/>
<path d="M342.7,129.3c.8-.4,1.7-.8,2.6-1.1.9-.3,1.8-.6,2.8-.8.9-.2,1.9-.4,2.9-.5,1-.1,2-.2,2.9-.2,2.6,0,4.6.4,6.1,1.1,1.5.8,2.6,1.9,3.3,3.3.7,1.4,1,3.2,1,5.2v17.2h-3.8v-17.2c0-.6,0-1.3-.2-2-.2-.7-.5-1.4-.9-2-.5-.7-1.2-1.2-2.1-1.6s-2.2-.6-3.8-.6-2.2,0-3.4.3-2.4.4-3.6.8v22.4h-3.8v-24.3Z"/>
<path d="M380.7,154.1c-1.9,0-3.4-.6-4.7-1.7-1.3-1.1-1.9-2.9-1.9-5.1v-16.5h-4.6v-3.5h4.6v-7.5h3.8v7.5h6.8v3.5h-6.8v15.3c0,1.5.2,2.6.7,3.3s1.4,1.1,2.8,1.1,1.3,0,1.9-.2,1.1-.3,1.5-.5v3.6c-.5.2-1.1.3-1.9.5s-1.5.2-2.1.2Z"/>
<path d="M402,154.4c-2.5,0-4.7-.5-6.5-1.6-1.8-1-3.3-2.6-4.2-4.7-1-2.1-1.5-4.7-1.5-7.8,0-4.6,1-8,3.1-10.3,2.1-2.3,4.9-3.4,8.5-3.4s5.1.6,6.8,1.9c1.7,1.3,2.9,3,3.7,5.1.7,2.2,1.1,4.6,1.1,7.3h-21.3l.3-3.5h18.5l-1.5.5c-.1-2.6-.8-4.6-2-5.9-1.2-1.3-3.1-2-5.6-2s-3.2.3-4.3,1c-1.1.6-2,1.7-2.6,3.3s-.8,3.8-.8,6.6.8,5.7,2.3,7.3c1.5,1.7,3.6,2.5,6.3,2.5s2.5,0,3.6-.3,2.1-.5,3-.8c.9-.4,1.7-.7,2.4-1.2v3.9c-1.3.6-2.7,1.1-4.2,1.4-1.5.3-3.2.5-5.1.5Z"/>
<path d="M419.5,153.7v-24.3c.4-.2,1.2-.5,2.5-.9,1.2-.4,2.7-.8,4.4-1.2,1.7-.4,3.5-.5,5.3-.5s.6,0,.8.1c.3,0,.6.1.8.2v3.4c-.9-.1-1.8-.2-2.7-.2s-1.7,0-2.5.1-1.6.2-2.4.3c-.8.1-1.6.3-2.4.4v22.5h-3.8Z"/>
<path d="M446.4,154.4c-1.9,0-3.5-.2-4.8-.6s-2.6-.9-4-1.6v-4c1.1.6,2.1,1.1,2.9,1.5s1.7.7,2.6.9c.9.2,1.9.3,3,.3,1.8,0,3.2-.4,4.3-1.2,1.1-.8,1.7-1.8,1.7-3s-.3-1.7-.8-2.3-1.2-1-2.1-1.3c-.8-.4-1.7-.7-2.7-1.1-1-.3-2.1-.6-3.1-.9-1-.3-2-.8-2.9-1.3-.9-.5-1.6-1.3-2.1-2.1-.5-.9-.8-2-.8-3.4s.3-2.5.8-3.4c.5-1,1.3-1.7,2.1-2.4.9-.6,1.9-1.1,3-1.4,1.1-.3,2.2-.4,3.3-.4,1.6,0,2.9.2,4.1.6,1.1.4,2.3.9,3.5,1.4v3.8c-1.3-.7-2.5-1.3-3.6-1.7-1.1-.4-2.3-.7-3.8-.7s-2.7.3-3.9.9c-1.1.6-1.7,1.5-1.7,2.7s.3,1.8.9,2.4,1.4,1,2.3,1.4c1,.3,2,.7,3.1,1,.9.3,1.8.6,2.8.9,1,.3,1.8.8,2.7,1.3.8.5,1.5,1.3,2,2.1.5.9.8,2,.8,3.4s-.5,3.4-1.4,4.6-2.2,2.1-3.6,2.7c-1.5.6-3,.8-4.5.8Z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 611 KiB

Binary file not shown.
@@ -0,0 +1,47 @@
{
"type": "filament",
"name": "Food Medium Plastic Syringe @0.50mm",
"inherits": "fdm_filament_food",
"from": "system",
"setting_id": "IQnumbi0N4BnvMfO",
"filament_id": "OFAzgHcF",
"instantiation": "true",
"compatible_printers": [
"FELIX Food Single 0.50mm nozzle",
"FELIX Food Double 0.50mm nozzle",
"FELIX Food Switch 0.50mm nozzle"
],
"filament_diameter": [
"31.22"
],
"filament_flow_ratio": [
"1.05"
],
"filament_retraction_length": [
"3.0"
],
"filament_retract_restart_extra": [
"0.0"
],
"filament_retraction_speed": [
"5.0"
],
"filament_deretraction_speed": [
"5.0"
],
"filament_retract_length_toolchange": [
"6.0"
],
"filament_retract_restart_extra_toolchange": [
"0.0"
],
"filament_wipe_distance": [
"0.75"
],
"filament_vendor": [
"FELIX Printers"
],
"filament_max_volumetric_speed": [
"7.2"
]
}
@@ -0,0 +1,47 @@
{
"type": "filament",
"name": "Food Medium Plastic Syringe @1.00mm",
"inherits": "fdm_filament_food",
"from": "system",
"setting_id": "p8CG6dHMUxNl7iPL",
"filament_id": "OFAzgHcF",
"instantiation": "true",
"compatible_printers": [
"FELIX Food Single 1.00mm nozzle",
"FELIX Food Double 1.00mm nozzle",
"FELIX Food Switch 1.00mm nozzle"
],
"filament_diameter": [
"31.22"
],
"filament_flow_ratio": [
"1.05"
],
"filament_retraction_length": [
"3.0"
],
"filament_retract_restart_extra": [
"0.0"
],
"filament_retraction_speed": [
"5.0"
],
"filament_deretraction_speed": [
"5.0"
],
"filament_retract_length_toolchange": [
"6.0"
],
"filament_retract_restart_extra_toolchange": [
"0.0"
],
"filament_wipe_distance": [
"1.5"
],
"filament_vendor": [
"FELIX Printers"
],
"filament_max_volumetric_speed": [
"27.0"
]
}
@@ -0,0 +1,47 @@
{
"type": "filament",
"name": "Food Medium Plastic Syringe @2.00mm",
"inherits": "fdm_filament_food",
"from": "system",
"setting_id": "s5uPS7I3E57tiRRC",
"filament_id": "OFAzgHcF",
"instantiation": "true",
"compatible_printers": [
"FELIX Food Single 2.00mm nozzle",
"FELIX Food Double 2.00mm nozzle",
"FELIX Food Switch 2.00mm nozzle"
],
"filament_diameter": [
"31.22"
],
"filament_flow_ratio": [
"1.05"
],
"filament_retraction_length": [
"3.0"
],
"filament_retract_restart_extra": [
"0.0"
],
"filament_retraction_speed": [
"5.0"
],
"filament_deretraction_speed": [
"5.0"
],
"filament_retract_length_toolchange": [
"6.0"
],
"filament_retract_restart_extra_toolchange": [
"0.0"
],
"filament_wipe_distance": [
"3.0"
],
"filament_vendor": [
"FELIX Printers"
],
"filament_max_volumetric_speed": [
"108.0"
]
}
@@ -0,0 +1,47 @@
{
"type": "filament",
"name": "Food Medium Plastic Syringe @3.00mm",
"inherits": "fdm_filament_food",
"from": "system",
"setting_id": "zlZtghh6ytU7N09m",
"filament_id": "OFAzgHcF",
"instantiation": "true",
"compatible_printers": [
"FELIX Food Single 3.00mm nozzle",
"FELIX Food Double 3.00mm nozzle",
"FELIX Food Switch 3.00mm nozzle"
],
"filament_diameter": [
"31.22"
],
"filament_flow_ratio": [
"1.05"
],
"filament_retraction_length": [
"3.0"
],
"filament_retract_restart_extra": [
"0.0"
],
"filament_retraction_speed": [
"5.0"
],
"filament_deretraction_speed": [
"5.0"
],
"filament_retract_length_toolchange": [
"6.0"
],
"filament_retract_restart_extra_toolchange": [
"0.0"
],
"filament_wipe_distance": [
"4.5"
],
"filament_vendor": [
"FELIX Printers"
],
"filament_max_volumetric_speed": [
"216.0"
]
}
@@ -0,0 +1,47 @@
{
"type": "filament",
"name": "Food Medium Plastic Syringe @4.00mm",
"inherits": "fdm_filament_food",
"from": "system",
"setting_id": "fvTZEcREMbs3JW1D",
"filament_id": "OFAzgHcF",
"instantiation": "true",
"compatible_printers": [
"FELIX Food Single 4.00mm nozzle",
"FELIX Food Double 4.00mm nozzle",
"FELIX Food Switch 4.00mm nozzle"
],
"filament_diameter": [
"31.22"
],
"filament_flow_ratio": [
"1.05"
],
"filament_retraction_length": [
"3.0"
],
"filament_retract_restart_extra": [
"0.0"
],
"filament_retraction_speed": [
"5.0"
],
"filament_deretraction_speed": [
"5.0"
],
"filament_retract_length_toolchange": [
"6.0"
],
"filament_retract_restart_extra_toolchange": [
"0.0"
],
"filament_wipe_distance": [
"6.0"
],
"filament_vendor": [
"FELIX Printers"
],
"filament_max_volumetric_speed": [
"432.0"
]
}
@@ -0,0 +1,47 @@
{
"type": "filament",
"name": "Food Medium Stainless Steel Syringe @0.50mm",
"inherits": "fdm_filament_food",
"from": "system",
"setting_id": "2XyqnzMqyuRCqpPq",
"filament_id": "OFqZSD1S",
"instantiation": "true",
"compatible_printers": [
"FELIX Food Single 0.50mm nozzle",
"FELIX Food Double 0.50mm nozzle",
"FELIX Food Switch 0.50mm nozzle"
],
"filament_diameter": [
"25.4"
],
"filament_flow_ratio": [
"1.05"
],
"filament_retraction_length": [
"1.0"
],
"filament_retract_restart_extra": [
"0.0"
],
"filament_retraction_speed": [
"10.0"
],
"filament_deretraction_speed": [
"10.0"
],
"filament_retract_length_toolchange": [
"2.0"
],
"filament_retract_restart_extra_toolchange": [
"0.0"
],
"filament_wipe_distance": [
"0.75"
],
"filament_vendor": [
"FELIX Printers"
],
"filament_max_volumetric_speed": [
"7.2"
]
}
@@ -0,0 +1,47 @@
{
"type": "filament",
"name": "Food Medium Stainless Steel Syringe @1.00mm",
"inherits": "fdm_filament_food",
"from": "system",
"setting_id": "yNxVUGOb1kUbXLiw",
"filament_id": "OFqZSD1S",
"instantiation": "true",
"compatible_printers": [
"FELIX Food Single 1.00mm nozzle",
"FELIX Food Double 1.00mm nozzle",
"FELIX Food Switch 1.00mm nozzle"
],
"filament_diameter": [
"25.4"
],
"filament_flow_ratio": [
"1.05"
],
"filament_retraction_length": [
"1.0"
],
"filament_retract_restart_extra": [
"0.0"
],
"filament_retraction_speed": [
"10.0"
],
"filament_deretraction_speed": [
"10.0"
],
"filament_retract_length_toolchange": [
"2.0"
],
"filament_retract_restart_extra_toolchange": [
"0.0"
],
"filament_wipe_distance": [
"1.5"
],
"filament_vendor": [
"FELIX Printers"
],
"filament_max_volumetric_speed": [
"27.0"
]
}
@@ -0,0 +1,47 @@
{
"type": "filament",
"name": "Food Medium Stainless Steel Syringe @2.00mm",
"inherits": "fdm_filament_food",
"from": "system",
"setting_id": "4MhgYDnGFKLfurhc",
"filament_id": "OFqZSD1S",
"instantiation": "true",
"compatible_printers": [
"FELIX Food Single 2.00mm nozzle",
"FELIX Food Double 2.00mm nozzle",
"FELIX Food Switch 2.00mm nozzle"
],
"filament_diameter": [
"25.4"
],
"filament_flow_ratio": [
"1.05"
],
"filament_retraction_length": [
"1.0"
],
"filament_retract_restart_extra": [
"0.0"
],
"filament_retraction_speed": [
"10.0"
],
"filament_deretraction_speed": [
"10.0"
],
"filament_retract_length_toolchange": [
"2.0"
],
"filament_retract_restart_extra_toolchange": [
"0.0"
],
"filament_wipe_distance": [
"3.0"
],
"filament_vendor": [
"FELIX Printers"
],
"filament_max_volumetric_speed": [
"108.0"
]
}
@@ -0,0 +1,47 @@
{
"type": "filament",
"name": "Food Medium Stainless Steel Syringe @3.00mm",
"inherits": "fdm_filament_food",
"from": "system",
"setting_id": "mEH3Rgzzwjq9iptd",
"filament_id": "OFqZSD1S",
"instantiation": "true",
"compatible_printers": [
"FELIX Food Single 3.00mm nozzle",
"FELIX Food Double 3.00mm nozzle",
"FELIX Food Switch 3.00mm nozzle"
],
"filament_diameter": [
"25.4"
],
"filament_flow_ratio": [
"1.05"
],
"filament_retraction_length": [
"1.0"
],
"filament_retract_restart_extra": [
"0.0"
],
"filament_retraction_speed": [
"10.0"
],
"filament_deretraction_speed": [
"10.0"
],
"filament_retract_length_toolchange": [
"2.0"
],
"filament_retract_restart_extra_toolchange": [
"0.0"
],
"filament_wipe_distance": [
"4.5"
],
"filament_vendor": [
"FELIX Printers"
],
"filament_max_volumetric_speed": [
"216.0"
]
}
@@ -0,0 +1,47 @@
{
"type": "filament",
"name": "Food Medium Stainless Steel Syringe @4.00mm",
"inherits": "fdm_filament_food",
"from": "system",
"setting_id": "rJsNSIb8w9kOwhwE",
"filament_id": "OFqZSD1S",
"instantiation": "true",
"compatible_printers": [
"FELIX Food Single 4.00mm nozzle",
"FELIX Food Double 4.00mm nozzle",
"FELIX Food Switch 4.00mm nozzle"
],
"filament_diameter": [
"25.4"
],
"filament_flow_ratio": [
"1.05"
],
"filament_retraction_length": [
"1.0"
],
"filament_retract_restart_extra": [
"0.0"
],
"filament_retraction_speed": [
"10.0"
],
"filament_deretraction_speed": [
"10.0"
],
"filament_retract_length_toolchange": [
"2.0"
],
"filament_retract_restart_extra_toolchange": [
"0.0"
],
"filament_wipe_distance": [
"6.0"
],
"filament_vendor": [
"FELIX Printers"
],
"filament_max_volumetric_speed": [
"432.0"
]
}
@@ -0,0 +1,47 @@
{
"type": "filament",
"name": "Food Thick Stainless Steel Syringe @0.50mm",
"inherits": "fdm_filament_food",
"from": "system",
"setting_id": "dJzDnkh8Kyn3phhF",
"filament_id": "OFjXHG0Z",
"instantiation": "true",
"compatible_printers": [
"FELIX Food Single 0.50mm nozzle",
"FELIX Food Double 0.50mm nozzle",
"FELIX Food Switch 0.50mm nozzle"
],
"filament_diameter": [
"25.4"
],
"filament_flow_ratio": [
"1.02"
],
"filament_retraction_length": [
"2.0"
],
"filament_retract_restart_extra": [
"0.0"
],
"filament_retraction_speed": [
"5.0"
],
"filament_deretraction_speed": [
"5.0"
],
"filament_retract_length_toolchange": [
"4.0"
],
"filament_retract_restart_extra_toolchange": [
"0.0"
],
"filament_wipe_distance": [
"0.75"
],
"filament_vendor": [
"FELIX Printers"
],
"filament_max_volumetric_speed": [
"4.8"
]
}
@@ -0,0 +1,47 @@
{
"type": "filament",
"name": "Food Thick Stainless Steel Syringe @1.00mm",
"inherits": "fdm_filament_food",
"from": "system",
"setting_id": "QQi61sD4rX2jELMa",
"filament_id": "OFjXHG0Z",
"instantiation": "true",
"compatible_printers": [
"FELIX Food Single 1.00mm nozzle",
"FELIX Food Double 1.00mm nozzle",
"FELIX Food Switch 1.00mm nozzle"
],
"filament_diameter": [
"25.4"
],
"filament_flow_ratio": [
"1.02"
],
"filament_retraction_length": [
"2.0"
],
"filament_retract_restart_extra": [
"0.0"
],
"filament_retraction_speed": [
"5.0"
],
"filament_deretraction_speed": [
"5.0"
],
"filament_retract_length_toolchange": [
"4.0"
],
"filament_retract_restart_extra_toolchange": [
"0.0"
],
"filament_wipe_distance": [
"1.5"
],
"filament_vendor": [
"FELIX Printers"
],
"filament_max_volumetric_speed": [
"18.0"
]
}
@@ -0,0 +1,47 @@
{
"type": "filament",
"name": "Food Thick Stainless Steel Syringe @2.00mm",
"inherits": "fdm_filament_food",
"from": "system",
"setting_id": "KUmfC5HZL2hXPfey",
"filament_id": "OFjXHG0Z",
"instantiation": "true",
"compatible_printers": [
"FELIX Food Single 2.00mm nozzle",
"FELIX Food Double 2.00mm nozzle",
"FELIX Food Switch 2.00mm nozzle"
],
"filament_diameter": [
"25.4"
],
"filament_flow_ratio": [
"1.02"
],
"filament_retraction_length": [
"2.0"
],
"filament_retract_restart_extra": [
"0.0"
],
"filament_retraction_speed": [
"5.0"
],
"filament_deretraction_speed": [
"5.0"
],
"filament_retract_length_toolchange": [
"4.0"
],
"filament_retract_restart_extra_toolchange": [
"0.0"
],
"filament_wipe_distance": [
"3.0"
],
"filament_vendor": [
"FELIX Printers"
],
"filament_max_volumetric_speed": [
"72.0"
]
}
@@ -0,0 +1,47 @@
{
"type": "filament",
"name": "Food Thick Stainless Steel Syringe @3.00mm",
"inherits": "fdm_filament_food",
"from": "system",
"setting_id": "0BbaSUre1bztrKB0",
"filament_id": "OFjXHG0Z",
"instantiation": "true",
"compatible_printers": [
"FELIX Food Single 3.00mm nozzle",
"FELIX Food Double 3.00mm nozzle",
"FELIX Food Switch 3.00mm nozzle"
],
"filament_diameter": [
"25.4"
],
"filament_flow_ratio": [
"1.02"
],
"filament_retraction_length": [
"2.0"
],
"filament_retract_restart_extra": [
"0.0"
],
"filament_retraction_speed": [
"5.0"
],
"filament_deretraction_speed": [
"5.0"
],
"filament_retract_length_toolchange": [
"4.0"
],
"filament_retract_restart_extra_toolchange": [
"0.0"
],
"filament_wipe_distance": [
"4.5"
],
"filament_vendor": [
"FELIX Printers"
],
"filament_max_volumetric_speed": [
"144.0"
]
}
@@ -0,0 +1,47 @@
{
"type": "filament",
"name": "Food Thick Stainless Steel Syringe @4.00mm",
"inherits": "fdm_filament_food",
"from": "system",
"setting_id": "b179BTbFqjhnsHPT",
"filament_id": "OFjXHG0Z",
"instantiation": "true",
"compatible_printers": [
"FELIX Food Single 4.00mm nozzle",
"FELIX Food Double 4.00mm nozzle",
"FELIX Food Switch 4.00mm nozzle"
],
"filament_diameter": [
"25.4"
],
"filament_flow_ratio": [
"1.02"
],
"filament_retraction_length": [
"2.0"
],
"filament_retract_restart_extra": [
"0.0"
],
"filament_retraction_speed": [
"5.0"
],
"filament_deretraction_speed": [
"5.0"
],
"filament_retract_length_toolchange": [
"4.0"
],
"filament_retract_restart_extra_toolchange": [
"0.0"
],
"filament_wipe_distance": [
"6.0"
],
"filament_vendor": [
"FELIX Printers"
],
"filament_max_volumetric_speed": [
"288.0"
]
}
@@ -0,0 +1,47 @@
{
"type": "filament",
"name": "Food Thin Plastic Syringe @0.50mm",
"inherits": "fdm_filament_food",
"from": "system",
"setting_id": "dBTTG8HJRYb7GHqy",
"filament_id": "OF0kP94Y",
"instantiation": "true",
"compatible_printers": [
"FELIX Food Single 0.50mm nozzle",
"FELIX Food Double 0.50mm nozzle",
"FELIX Food Switch 0.50mm nozzle"
],
"filament_diameter": [
"31.22"
],
"filament_flow_ratio": [
"1.1"
],
"filament_retraction_length": [
"0.75"
],
"filament_retract_restart_extra": [
"0.0"
],
"filament_retraction_speed": [
"5.0"
],
"filament_deretraction_speed": [
"5.0"
],
"filament_retract_length_toolchange": [
"1.5"
],
"filament_retract_restart_extra_toolchange": [
"0.0"
],
"filament_wipe_distance": [
"0.75"
],
"filament_vendor": [
"FELIX Printers"
],
"filament_max_volumetric_speed": [
"10.8"
]
}
@@ -0,0 +1,47 @@
{
"type": "filament",
"name": "Food Thin Plastic Syringe @1.00mm",
"inherits": "fdm_filament_food",
"from": "system",
"setting_id": "FITfR7iepAteWuno",
"filament_id": "OF0kP94Y",
"instantiation": "true",
"compatible_printers": [
"FELIX Food Single 1.00mm nozzle",
"FELIX Food Double 1.00mm nozzle",
"FELIX Food Switch 1.00mm nozzle"
],
"filament_diameter": [
"31.22"
],
"filament_flow_ratio": [
"1.1"
],
"filament_retraction_length": [
"0.75"
],
"filament_retract_restart_extra": [
"0.0"
],
"filament_retraction_speed": [
"5.0"
],
"filament_deretraction_speed": [
"5.0"
],
"filament_retract_length_toolchange": [
"1.5"
],
"filament_retract_restart_extra_toolchange": [
"0.0"
],
"filament_wipe_distance": [
"1.5"
],
"filament_vendor": [
"FELIX Printers"
],
"filament_max_volumetric_speed": [
"40.5"
]
}
@@ -0,0 +1,47 @@
{
"type": "filament",
"name": "Food Thin Plastic Syringe @2.00mm",
"inherits": "fdm_filament_food",
"from": "system",
"setting_id": "i2DZouQfWUnIm4R5",
"filament_id": "OF0kP94Y",
"instantiation": "true",
"compatible_printers": [
"FELIX Food Single 2.00mm nozzle",
"FELIX Food Double 2.00mm nozzle",
"FELIX Food Switch 2.00mm nozzle"
],
"filament_diameter": [
"31.22"
],
"filament_flow_ratio": [
"1.1"
],
"filament_retraction_length": [
"0.75"
],
"filament_retract_restart_extra": [
"0.0"
],
"filament_retraction_speed": [
"5.0"
],
"filament_deretraction_speed": [
"5.0"
],
"filament_retract_length_toolchange": [
"1.5"
],
"filament_retract_restart_extra_toolchange": [
"0.0"
],
"filament_wipe_distance": [
"3.0"
],
"filament_vendor": [
"FELIX Printers"
],
"filament_max_volumetric_speed": [
"162.0"
]
}
@@ -0,0 +1,47 @@
{
"type": "filament",
"name": "Food Thin Plastic Syringe @3.00mm",
"inherits": "fdm_filament_food",
"from": "system",
"setting_id": "EzV8T0DVT0NRPa7P",
"filament_id": "OF0kP94Y",
"instantiation": "true",
"compatible_printers": [
"FELIX Food Single 3.00mm nozzle",
"FELIX Food Double 3.00mm nozzle",
"FELIX Food Switch 3.00mm nozzle"
],
"filament_diameter": [
"31.22"
],
"filament_flow_ratio": [
"1.1"
],
"filament_retraction_length": [
"0.75"
],
"filament_retract_restart_extra": [
"0.0"
],
"filament_retraction_speed": [
"5.0"
],
"filament_deretraction_speed": [
"5.0"
],
"filament_retract_length_toolchange": [
"1.5"
],
"filament_retract_restart_extra_toolchange": [
"0.0"
],
"filament_wipe_distance": [
"4.5"
],
"filament_vendor": [
"FELIX Printers"
],
"filament_max_volumetric_speed": [
"324.0"
]
}
@@ -0,0 +1,47 @@
{
"type": "filament",
"name": "Food Thin Plastic Syringe @4.00mm",
"inherits": "fdm_filament_food",
"from": "system",
"setting_id": "Q6msqrC9TM0un5qw",
"filament_id": "OF0kP94Y",
"instantiation": "true",
"compatible_printers": [
"FELIX Food Single 4.00mm nozzle",
"FELIX Food Double 4.00mm nozzle",
"FELIX Food Switch 4.00mm nozzle"
],
"filament_diameter": [
"31.22"
],
"filament_flow_ratio": [
"1.1"
],
"filament_retraction_length": [
"0.75"
],
"filament_retract_restart_extra": [
"0.0"
],
"filament_retraction_speed": [
"5.0"
],
"filament_deretraction_speed": [
"5.0"
],
"filament_retract_length_toolchange": [
"1.5"
],
"filament_retract_restart_extra_toolchange": [
"0.0"
],
"filament_wipe_distance": [
"6.0"
],
"filament_vendor": [
"FELIX Printers"
],
"filament_max_volumetric_speed": [
"648.0"
]
}
@@ -0,0 +1,47 @@
{
"type": "filament",
"name": "Food Thin Stainless Steel Syringe @0.50mm",
"inherits": "fdm_filament_food",
"from": "system",
"setting_id": "I9W6tiEnRSMrkyzl",
"filament_id": "OF40XIE8",
"instantiation": "true",
"compatible_printers": [
"FELIX Food Single 0.50mm nozzle",
"FELIX Food Double 0.50mm nozzle",
"FELIX Food Switch 0.50mm nozzle"
],
"filament_diameter": [
"25.4"
],
"filament_flow_ratio": [
"1.1"
],
"filament_retraction_length": [
"0.2"
],
"filament_retract_restart_extra": [
"0.0"
],
"filament_retraction_speed": [
"10.0"
],
"filament_deretraction_speed": [
"10.0"
],
"filament_retract_length_toolchange": [
"0.4"
],
"filament_retract_restart_extra_toolchange": [
"0.0"
],
"filament_wipe_distance": [
"0.75"
],
"filament_vendor": [
"FELIX Printers"
],
"filament_max_volumetric_speed": [
"10.8"
]
}
@@ -0,0 +1,47 @@
{
"type": "filament",
"name": "Food Thin Stainless Steel Syringe @1.00mm",
"inherits": "fdm_filament_food",
"from": "system",
"setting_id": "PJpJ8TTlDajNrRJo",
"filament_id": "OF40XIE8",
"instantiation": "true",
"compatible_printers": [
"FELIX Food Single 1.00mm nozzle",
"FELIX Food Double 1.00mm nozzle",
"FELIX Food Switch 1.00mm nozzle"
],
"filament_diameter": [
"25.4"
],
"filament_flow_ratio": [
"1.1"
],
"filament_retraction_length": [
"0.2"
],
"filament_retract_restart_extra": [
"0.0"
],
"filament_retraction_speed": [
"10.0"
],
"filament_deretraction_speed": [
"10.0"
],
"filament_retract_length_toolchange": [
"0.4"
],
"filament_retract_restart_extra_toolchange": [
"0.0"
],
"filament_wipe_distance": [
"1.5"
],
"filament_vendor": [
"FELIX Printers"
],
"filament_max_volumetric_speed": [
"40.5"
]
}
@@ -0,0 +1,47 @@
{
"type": "filament",
"name": "Food Thin Stainless Steel Syringe @2.00mm",
"inherits": "fdm_filament_food",
"from": "system",
"setting_id": "s3GOL7BWdRbaV4GM",
"filament_id": "OF40XIE8",
"instantiation": "true",
"compatible_printers": [
"FELIX Food Single 2.00mm nozzle",
"FELIX Food Double 2.00mm nozzle",
"FELIX Food Switch 2.00mm nozzle"
],
"filament_diameter": [
"25.4"
],
"filament_flow_ratio": [
"1.1"
],
"filament_retraction_length": [
"0.2"
],
"filament_retract_restart_extra": [
"0.0"
],
"filament_retraction_speed": [
"10.0"
],
"filament_deretraction_speed": [
"10.0"
],
"filament_retract_length_toolchange": [
"0.4"
],
"filament_retract_restart_extra_toolchange": [
"0.0"
],
"filament_wipe_distance": [
"3.0"
],
"filament_vendor": [
"FELIX Printers"
],
"filament_max_volumetric_speed": [
"162.0"
]
}
@@ -0,0 +1,47 @@
{
"type": "filament",
"name": "Food Thin Stainless Steel Syringe @3.00mm",
"inherits": "fdm_filament_food",
"from": "system",
"setting_id": "WKPEMCVctL0c5FFi",
"filament_id": "OF40XIE8",
"instantiation": "true",
"compatible_printers": [
"FELIX Food Single 3.00mm nozzle",
"FELIX Food Double 3.00mm nozzle",
"FELIX Food Switch 3.00mm nozzle"
],
"filament_diameter": [
"25.4"
],
"filament_flow_ratio": [
"1.1"
],
"filament_retraction_length": [
"0.2"
],
"filament_retract_restart_extra": [
"0.0"
],
"filament_retraction_speed": [
"10.0"
],
"filament_deretraction_speed": [
"10.0"
],
"filament_retract_length_toolchange": [
"0.4"
],
"filament_retract_restart_extra_toolchange": [
"0.0"
],
"filament_wipe_distance": [
"4.5"
],
"filament_vendor": [
"FELIX Printers"
],
"filament_max_volumetric_speed": [
"324.0"
]
}
@@ -0,0 +1,47 @@
{
"type": "filament",
"name": "Food Thin Stainless Steel Syringe @4.00mm",
"inherits": "fdm_filament_food",
"from": "system",
"setting_id": "I5UEkm93zhn9hdMF",
"filament_id": "OF40XIE8",
"instantiation": "true",
"compatible_printers": [
"FELIX Food Single 4.00mm nozzle",
"FELIX Food Double 4.00mm nozzle",
"FELIX Food Switch 4.00mm nozzle"
],
"filament_diameter": [
"25.4"
],
"filament_flow_ratio": [
"1.1"
],
"filament_retraction_length": [
"0.2"
],
"filament_retract_restart_extra": [
"0.0"
],
"filament_retraction_speed": [
"10.0"
],
"filament_deretraction_speed": [
"10.0"
],
"filament_retract_length_toolchange": [
"0.4"
],
"filament_retract_restart_extra_toolchange": [
"0.0"
],
"filament_wipe_distance": [
"6.0"
],
"filament_vendor": [
"FELIX Printers"
],
"filament_max_volumetric_speed": [
"648.0"
]
}
@@ -0,0 +1,47 @@
{
"type": "filament",
"name": "Food Very Thick Stainless Steel Syringe @1.00mm",
"inherits": "fdm_filament_food",
"from": "system",
"setting_id": "OIZKSwXaRY7WZecX",
"filament_id": "OF0xT5HR",
"instantiation": "true",
"compatible_printers": [
"FELIX Food Single 1.00mm nozzle",
"FELIX Food Double 1.00mm nozzle",
"FELIX Food Switch 1.00mm nozzle"
],
"filament_diameter": [
"25.4"
],
"filament_flow_ratio": [
"1.0"
],
"filament_retraction_length": [
"2.0"
],
"filament_retract_restart_extra": [
"0.0"
],
"filament_retraction_speed": [
"5.0"
],
"filament_deretraction_speed": [
"5.0"
],
"filament_retract_length_toolchange": [
"4.0"
],
"filament_retract_restart_extra_toolchange": [
"0.0"
],
"filament_wipe_distance": [
"0.75"
],
"filament_vendor": [
"FELIX Printers"
],
"filament_max_volumetric_speed": [
"13.5"
]
}
@@ -0,0 +1,47 @@
{
"type": "filament",
"name": "Food Very Thick Stainless Steel Syringe @2.00mm",
"inherits": "fdm_filament_food",
"from": "system",
"setting_id": "al27KBjL9MAi3ri9",
"filament_id": "OF0xT5HR",
"instantiation": "true",
"compatible_printers": [
"FELIX Food Single 2.00mm nozzle",
"FELIX Food Double 2.00mm nozzle",
"FELIX Food Switch 2.00mm nozzle"
],
"filament_diameter": [
"25.4"
],
"filament_flow_ratio": [
"1.0"
],
"filament_retraction_length": [
"2.0"
],
"filament_retract_restart_extra": [
"0.0"
],
"filament_retraction_speed": [
"5.0"
],
"filament_deretraction_speed": [
"5.0"
],
"filament_retract_length_toolchange": [
"4.0"
],
"filament_retract_restart_extra_toolchange": [
"0.0"
],
"filament_wipe_distance": [
"1.5"
],
"filament_vendor": [
"FELIX Printers"
],
"filament_max_volumetric_speed": [
"53.0"
]
}
@@ -0,0 +1,47 @@
{
"type": "filament",
"name": "Food Very Thick Stainless Steel Syringe @3.00mm",
"inherits": "fdm_filament_food",
"from": "system",
"setting_id": "42ADzpr7vGuh3AKC",
"filament_id": "OF0xT5HR",
"instantiation": "true",
"compatible_printers": [
"FELIX Food Single 3.00mm nozzle",
"FELIX Food Double 3.00mm nozzle",
"FELIX Food Switch 3.00mm nozzle"
],
"filament_diameter": [
"25.4"
],
"filament_flow_ratio": [
"1.0"
],
"filament_retraction_length": [
"2.0"
],
"filament_retract_restart_extra": [
"0.0"
],
"filament_retraction_speed": [
"5.0"
],
"filament_deretraction_speed": [
"5.0"
],
"filament_retract_length_toolchange": [
"4.0"
],
"filament_retract_restart_extra_toolchange": [
"0.0"
],
"filament_wipe_distance": [
"3.0"
],
"filament_vendor": [
"FELIX Printers"
],
"filament_max_volumetric_speed": [
"108.0"
]
}
@@ -0,0 +1,47 @@
{
"type": "filament",
"name": "Food Very Thick Stainless Steel Syringe @4.00mm",
"inherits": "fdm_filament_food",
"from": "system",
"setting_id": "FpQC7Cf5qnW1E2QO",
"filament_id": "OF0xT5HR",
"instantiation": "true",
"compatible_printers": [
"FELIX Food Single 4.00mm nozzle",
"FELIX Food Double 4.00mm nozzle",
"FELIX Food Switch 4.00mm nozzle"
],
"filament_diameter": [
"25.4"
],
"filament_flow_ratio": [
"1.0"
],
"filament_retraction_length": [
"2.0"
],
"filament_retract_restart_extra": [
"0.0"
],
"filament_retraction_speed": [
"5.0"
],
"filament_deretraction_speed": [
"5.0"
],
"filament_retract_length_toolchange": [
"4.0"
],
"filament_retract_restart_extra_toolchange": [
"0.0"
],
"filament_wipe_distance": [
"4.5"
],
"filament_vendor": [
"FELIX Printers"
],
"filament_max_volumetric_speed": [
"216.0"
]
}

Some files were not shown because too many files have changed in this diff Show More