Compare commits
10 Commits
72e3a165ac
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 9c8de5e664 | |||
| 91bedce2d7 | |||
| 6ccd3eb9c1 | |||
| 42e3050fa2 | |||
| 75ceec0798 | |||
| e542c482d7 | |||
| a26f7214f9 | |||
| 40b8cc8023 | |||
| ced6c67e83 | |||
| 0b2199ec49 |
3
.gitignore
vendored
@@ -4,4 +4,5 @@ tmp/*
|
||||
venv
|
||||
instance
|
||||
huey_queue.*
|
||||
prusaslicer/*
|
||||
*.AppImage
|
||||
frpc/*
|
||||
65
README.md
Normal file
@@ -0,0 +1,65 @@
|
||||
# AIO 3D Print Web Platform
|
||||
|
||||
简介
|
||||
----
|
||||
|
||||
这是一个基于 Python 的 Web 打印管理平台,通过调用 OctoPrint 的 API 来控制支持 Klipper 的打印机,集成切片、文件管理和打印机操作等功能。前端资源位于 `app/assets`,包含若干界面截图与帮助文档(见下方示例图片)。
|
||||
|
||||
示例图片
|
||||
---------
|
||||
|
||||

|
||||
|
||||
切片助手示例:
|
||||
|
||||

|
||||
|
||||
快速开始
|
||||
--------
|
||||
|
||||
1. 克隆仓库:
|
||||
|
||||
```bash
|
||||
git clone https://gitea.lhye.work/lhye200/AIO_3D_Print_Web_Platform.git
|
||||
cd AIO_3D_Print_Exp
|
||||
```
|
||||
|
||||
2. 运行安装脚本(会创建虚拟环境并安装 Python 依赖,下载运行需要的文件,安装 systemd 服务):
|
||||
|
||||
```bash
|
||||
./install.sh
|
||||
```
|
||||
|
||||
安装脚本说明
|
||||
-------------
|
||||
|
||||
- 安装脚本会创建 `venv`、安装 `requirements.txt` 中列出的依赖,并尝试设置 systemd 服务。
|
||||
- 安装脚本可**可选**下载 PrusaSlicer 的 AppImage 二进制(用于本地进行切片):
|
||||
- 二进制来源: https://github.com/davidk/PrusaSlicer-ARM.AppImage
|
||||
- 源码: https://github.com/prusa3d/PrusaSlicer
|
||||
- 控制方式(环境变量):
|
||||
- `PRUSA_SKIP_DOWNLOAD=1` : 跳过下载二进制(默认会询问)
|
||||
- `PRUSA_AGPL_ACCEPT=1` : 自动同意 AGPLv3 条款并下载(默认需要交互确认)
|
||||
|
||||
支持的切片引擎
|
||||
---------------
|
||||
- `Cura` 有一定支持,但由于其配置方式复杂容易出错,现使用体验不佳。
|
||||
- `PrusaSlicer` 较为全面的支持。
|
||||
|
||||
许可与第三方
|
||||
---------------
|
||||
|
||||
- 本仓库根目录的 `LICENSE` 为本项目主体采用的许可证(GPLv3)。
|
||||
- 本项目可选使用的第三方软件 PrusaSlicer 受 AGPLv3 约束;相关说明与合规提示见 [third_party/PRUSASLICER.md](third_party/PRUSASLICER.md)。
|
||||
- 如果你在服务器上运行并通过网络提供基于 AGPL 组件的服务,AGPL 可能要求你向使用该服务的用户公开对应源码。
|
||||
|
||||
AI 协助声明
|
||||
----------------
|
||||
|
||||
本仓库的部分内容由 AI 生成。
|
||||
|
||||
更多信息
|
||||
------------
|
||||
|
||||
- 代码结构与前端资源位于 `app/`,包括 `app/assets`(图片、脚本、样式)与 `app/templates`。
|
||||
- 请阅读 `install.sh` 以了解安装过程的详细步骤与可配置选项。
|
||||
16
aio-3d-huey.service
Normal file
@@ -0,0 +1,16 @@
|
||||
[Unit]
|
||||
Description=AIO 3D Printer Slice and Manage Platform Huey Tasks
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
User=1000
|
||||
|
||||
# Placeholder path; installer will replace with actual repository path
|
||||
WorkingDirectory=${REPO_DIR}/
|
||||
ExecStart=${REPO_DIR}/run_huey.sh
|
||||
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
17
aio-3d-main.service
Normal file
@@ -0,0 +1,17 @@
|
||||
[Unit]
|
||||
Description=AIO 3D Printer Slice and Manage Platform
|
||||
After=aio-3d-huey.service network.target
|
||||
Wants=aio-3d-huey.service network.target
|
||||
|
||||
[Service]
|
||||
User=1000
|
||||
|
||||
# Placeholder path; installer will replace with actual repository path
|
||||
WorkingDirectory=${REPO_DIR}/
|
||||
ExecStart=${REPO_DIR}/run_main.sh
|
||||
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -56,7 +56,10 @@ def create_app():
|
||||
app.config['REMEMBER_COOKIE_NAME'] = 'aio_remember'
|
||||
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///../instance/aio_3d.db'
|
||||
app.config['SQLALCHEMY_ENGINE_OPTIONS'] = {'connect_args': {'timeout': 15}}
|
||||
app.config['UPLOAD_FOLDER'] = os.path.abspath(os.path.join(app.root_path, '..', 'uploads'))
|
||||
app.config['UPLOAD_FOLDER'] = os.environ.get('UPLOAD_FOLDER', os.path.abspath(os.path.join(app.root_path, '..', 'uploads')))
|
||||
app.config['PRINT_CONFIG_FOLDER'] = os.environ.get('PRINT_CONFIG_FOLDER', os.path.abspath(os.path.join(app.root_path, '..', 'print_config')))
|
||||
app.config['PRUSA_SLICE_BIN'] = os.environ.get('PRUSA_SLICE_BIN', os.path.abspath(os.path.join(app.root_path, '..', 'prusaslicer', 'PrusaSlicer-2.9.4-aarch64-full.AppImage')))
|
||||
|
||||
|
||||
os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True)
|
||||
|
||||
@@ -80,9 +83,11 @@ def create_app():
|
||||
from .routes.auth_routes import auth_bp
|
||||
from .routes.admin_routes import admin_bp
|
||||
from .routes.printer_routes import printer_bp
|
||||
from .utils.api_handle import api_bp
|
||||
app.register_blueprint(main_bp)
|
||||
app.register_blueprint(auth_bp)
|
||||
app.register_blueprint(admin_bp)
|
||||
app.register_blueprint(printer_bp)
|
||||
app.register_blueprint(api_bp)
|
||||
|
||||
return app
|
||||
|
||||
58
app/assets/doc/printer_helper_de.md
Normal file
@@ -0,0 +1,58 @@
|
||||
# Drucker-Helfer — Kurzanleitung
|
||||
|
||||
## Inhaltsverzeichnis
|
||||
- Druckerstatus
|
||||
- Druck vorbereiten
|
||||
- Steuerung
|
||||
- Drucker-Helfer (diese Seite)
|
||||
- Systemkonfiguration (Admin)
|
||||
- OctoPrint-Panel (Admin)
|
||||
|
||||
---
|
||||
|
||||
## Druckerstatus
|
||||
|
||||
Zeigt aktuellen Druckerzustand, Temperaturen und aktive Aufgaben an.
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## Druck vorbereiten
|
||||
|
||||
GCode an den Drucker senden, Temperaturen setzen und mit `Druck vorbereiten` bzw. `Jetzt drucken` starten.
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## Steuerung
|
||||
|
||||
Manuelle Grundsteuerungen: Achsen homing, Düsen/Betten bewegen, Pause/Fortsetzen, Druck abbrechen.
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## Drucker-Helfer (diese Seite)
|
||||
|
||||
Tipps zur Fehlerbehebung (Netzwerk, Filament, Bettleveling) und Checkliste vor dem Drucken.
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## Systemkonfiguration (Admin)
|
||||
|
||||
Admin-Einstellungen für Druckerabmessungen, Limits, Basisprofile und Verbindungsdaten.
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## OctoPrint-Panel (Admin)
|
||||
|
||||
Eingebettetes OctoPrint-Panel: `OctoPrint Basis-URL` und API-Key konfigurieren, Live-Panel verwenden.
|
||||
|
||||

|
||||
|
||||
64
app/assets/doc/printer_helper_en.md
Normal file
@@ -0,0 +1,64 @@
|
||||
# Printer Helper — Quick Guide
|
||||
|
||||
## Table of Contents
|
||||
- Printer Status
|
||||
- Prepare Print
|
||||
- Control
|
||||
- Printer Helper (this page)
|
||||
- System Configuration (Admin)
|
||||
- OctoPrint Panel (Admin)
|
||||
|
||||
---
|
||||
|
||||
## Printer Status
|
||||
|
||||
Shows current printer state, temperatures and active job information.
|
||||
|
||||

|
||||
|
||||
Use this page to monitor `Printer Status` and `Active Print Job`.
|
||||
|
||||
---
|
||||
|
||||
## Prepare Print
|
||||
|
||||
Send prepared GCode to the printer, set temperatures and start a print using `Prepare Print` and `Print Now`.
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## Control
|
||||
|
||||
Basic manual controls: home axes, move nozzle/bed, pause/resume and cancel print.
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## Printer Helper (this page)
|
||||
|
||||
Guides common troubleshooting steps (connectivity, filament, bed leveling) and quick checks before printing.
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## System Configuration (Admin)
|
||||
|
||||
Admin-only settings for printer dimensions, limits, shared profiles and connection settings.
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## OctoPrint Panel (Admin)
|
||||
|
||||
Embedded OctoPrint panel: configure `OctoPrint Base URL`, API key and use the live panel when available.
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
If you want I can add annotated screenshots for specific printer models.
|
||||
|
||||
60
app/assets/doc/printer_helper_zh-cn.md
Normal file
@@ -0,0 +1,60 @@
|
||||
# 打印助手 — 快速指南
|
||||
|
||||
## 目录
|
||||
- 打印机状态
|
||||
- 准备打印
|
||||
- 控制
|
||||
- 打印助手(本页)
|
||||
- 系统配置(管理员)
|
||||
- OctoPrint 面板(管理员)
|
||||
|
||||
---
|
||||
|
||||
## 打印机状态
|
||||
|
||||
显示当前打印机状态、温度和任务信息。
|
||||
|
||||

|
||||
|
||||
可在此查看 `打印机状态` 与 `当前打印任务`。
|
||||
|
||||
---
|
||||
|
||||
## 准备打印
|
||||
|
||||
将准备好的 GCode 发送到打印机,设置温度并使用 `准备打印` 或 `立即打印` 开始。
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## 控制
|
||||
|
||||
手动控制:回原点、移动喷嘴/平台、暂停/恢复与取消打印。
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## 打印助手(本页)
|
||||
|
||||
提供常见故障排查步骤(网络、挤出机、床平整)和打印前检查清单。
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## 系统配置(管理员)
|
||||
|
||||
管理员设置打印机尺寸、限制、基础配置和连接信息。
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## OctoPrint 面板(管理员)
|
||||
|
||||
内嵌 OctoPrint 面板:配置 `OctoPrint 基础 URL`、API 密钥并使用可用的实时面板。
|
||||
|
||||

|
||||
|
||||
82
app/assets/doc/slice_helper_de.md
Normal file
@@ -0,0 +1,82 @@
|
||||
# Slice-Helfer — Kurzanleitung
|
||||
|
||||
## Inhaltsverzeichnis
|
||||
- Startseite
|
||||
- Meine Dateien
|
||||
- Plater (Bauteilplatte)
|
||||
- Konto-Verwaltung
|
||||
- Slice-Helfer (diese Seite)
|
||||
- Systemeinstellungen (Admin)
|
||||
- Benutzerverwaltung (Admin)
|
||||
- API-Schlüssel (Admin)
|
||||
|
||||
---
|
||||
|
||||
## Startseite
|
||||
|
||||
Übersicht des Slicer-Dashboards und schnelle Aktionen.
|
||||
|
||||

|
||||
|
||||
Benutzen Sie die Navigation, um `Startseite` zu öffnen und über `STL Hochladen & Slicen` einen neuen Slice zu starten.
|
||||
|
||||
---
|
||||
|
||||
## Meine Dateien
|
||||
|
||||
Verwalten Sie hochgeladene STL- und GCode-Dateien: hochladen, herunterladen, löschen.
|
||||
|
||||

|
||||
|
||||
Wichtige Aktionen: `STL hochladen`, `GCode Herunterladen`, `Löschen`.
|
||||
|
||||
---
|
||||
|
||||
## Plater (Bauteilplatte)
|
||||
|
||||
Modelle auf der Bauteilplatte anordnen, verschieben, drehen und skalieren. Vor dem Slicen `Zusammenführen & Slicen`.
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## Konto-Verwaltung
|
||||
|
||||
Für angemeldete Benutzer: Profil, Passwort ändern und aktive Sitzungen verwalten.
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## Slice-Helfer (diese Seite)
|
||||
|
||||
Erklärung der empfohlenen Slicing-Schritte: `Qualitätsprofil` wählen, `Support` und `Fülldichte` konfigurieren, dann `Hochladen & Slicen`.
|
||||
|
||||

|
||||
|
||||
Statusmeldungen: `Wartend`, `Slicen`, `Gesliced`, `Fehlgeschlagen`.
|
||||
|
||||
---
|
||||
|
||||
## Systemeinstellungen (Admin)
|
||||
|
||||
Admins konfigurieren globale Slicer-Engines und Standardprofile.
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## Benutzerverwaltung (Admin)
|
||||
|
||||
Admins können Benutzer hinzufügen/ändern und Quoten sowie Rollen setzen (`Benutzer`, `Admin`).
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## API-Schlüssel (Admin)
|
||||
|
||||
Verwalten Sie API-Schlüssel für externe Integrationen: `Neuen API-Schlüssel erstellen` und `Schlüssel generieren`.
|
||||
|
||||

|
||||
|
||||
88
app/assets/doc/slice_helper_en.md
Normal file
@@ -0,0 +1,88 @@
|
||||
# Slice Helper — Quick Guide
|
||||
|
||||
## Table of Contents
|
||||
- Home
|
||||
- My Files
|
||||
- Plater (Build Plate)
|
||||
- Account Management
|
||||
- Slice Helper (this page)
|
||||
- System Settings (Admin)
|
||||
- User Management (Admin)
|
||||
- API Keys (Admin)
|
||||
|
||||
---
|
||||
|
||||
## Home
|
||||
|
||||
Overview of the slicer dashboard and quick actions.
|
||||
|
||||

|
||||
|
||||
Use the top navigation to open `Home` and start a new slice via `Upload & Slice STL`.
|
||||
|
||||
---
|
||||
|
||||
## My Files
|
||||
|
||||
Manage uploaded STL and GCode files. You can upload, delete and download sliced GCode.
|
||||
|
||||

|
||||
|
||||
Common actions: `Upload STL`, `Download GCode`, `Delete`.
|
||||
|
||||
---
|
||||
|
||||
## Plater (Build Plate)
|
||||
|
||||
Arrange models on the build plate before slicing. Use translate/rotate/scale tools and `Merge & Slice`.
|
||||
|
||||

|
||||
|
||||
Tip: ensure all models fit the printable area before slicing.
|
||||
|
||||
---
|
||||
|
||||
## Account Management
|
||||
|
||||
Available when logged in. Update profile, change password, and manage active sessions.
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## Slice Helper (this page)
|
||||
|
||||
This page explains slice workflows and recommended settings. Choose a `Quality Profile`, set `Support` and `Infill Density` then `Upload & Slice`.
|
||||
|
||||

|
||||
|
||||
Status messages: `Waiting`, `Slicing`, `Sliced`, `Failed`.
|
||||
|
||||
---
|
||||
|
||||
## System Settings (Admin)
|
||||
|
||||
Admins can configure global slicer engines and default profiles under `System Settings`.
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## User Management (Admin)
|
||||
|
||||
Admins can add/edit users, set quotas and roles (`User`, `Admin`).
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## API Keys (Admin)
|
||||
|
||||
Manage API keys used by external tools. `Create New API Key`, name it and `Generate Key`.
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
If you need example workflows or screenshots, tell me which page to expand.
|
||||
|
||||
84
app/assets/doc/slice_helper_zh-cn.md
Normal file
@@ -0,0 +1,84 @@
|
||||
# 切片助手 — 快速指南
|
||||
|
||||
## 目录
|
||||
- 主页
|
||||
- 我的文件
|
||||
- 构建板 (Plater)
|
||||
- 账号管理
|
||||
- 切片助手(本页)
|
||||
- 系统设置(管理员)
|
||||
- 用户管理(管理员)
|
||||
- API 密钥(管理员)
|
||||
|
||||
---
|
||||
|
||||
## 主页
|
||||
|
||||
切片仪表盘概览与快速操作入口。
|
||||
|
||||

|
||||
|
||||
使用导航栏进入“主页”,通过 `上传并切片 STL` 开始新切片。
|
||||
|
||||
---
|
||||
|
||||
## 我的文件
|
||||
|
||||
管理已上传的 STL 与 GCode,可上传、下载或删除文件。
|
||||
|
||||

|
||||
|
||||
常用操作:`上传STL`、`下载 GCode`、`删除`。
|
||||
|
||||
---
|
||||
|
||||
## 构建板 (Plater)
|
||||
|
||||
在构建板上放置与调整模型(平移/旋转/缩放),确认位置后使用 `合并并切片`。
|
||||
|
||||

|
||||
|
||||
提示:切片前确保模型均在可打印范围内。
|
||||
|
||||
---
|
||||
|
||||
## 账号管理
|
||||
|
||||
登录用户可在此更新资料、修改密码并管理活跃会话。
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## 切片助手(本页)
|
||||
|
||||
本页说明推荐的切片流程与设置:选择 `质量配置`、设置 `支撑` 与 `填充密度`,然后 `上传 & 切片`。
|
||||
|
||||

|
||||
|
||||
状态提示:`等待中`、`切片中`、`已切片`、`失败`。
|
||||
|
||||
---
|
||||
|
||||
## 系统设置(管理员)
|
||||
|
||||
管理员可在此配置全局切片引擎与默认配置文件。
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## 用户管理(管理员)
|
||||
|
||||
管理员可添加/编辑用户并设置配额与角色(`普通用户`、`管理员`)。
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## API 密钥(管理员)
|
||||
|
||||
管理外部工具使用的 API 密钥;点击 `创建新的 API 密钥`,输入名称并 `生成密钥`。
|
||||
|
||||

|
||||
|
||||
@@ -236,5 +236,46 @@
|
||||
"Internal infill": "Interne Füllung",
|
||||
"Bridge infill": "Brückefüllung",
|
||||
"Top solid infill": "Oberste solide Füllung",
|
||||
"Others": "Andere"
|
||||
"Others": "Andere",
|
||||
"Are you sure you want to clear the board?": "Sind Sie sicher, dass Sie das Brett leeren möchten?",
|
||||
"d": "t",
|
||||
"h": "std",
|
||||
"m": "m",
|
||||
"s": "s",
|
||||
"Auto Leveling": "Auto-Nivellierung",
|
||||
"Account Management": "Kontoverwaltung",
|
||||
"Change Password": "Passwort ändern",
|
||||
"Current Password": "Aktuelles Passwort",
|
||||
"Confirm New Password": "Neues Passwort bestätigen",
|
||||
"Update Password": "Passwort aktualisieren",
|
||||
"Active Sessions": "Aktive Sitzungen",
|
||||
"Device": "Gerät",
|
||||
"IP Address": "IP-Adresse",
|
||||
"Last Active": "Zuletzt aktiv",
|
||||
"Action": "Aktion",
|
||||
"This Device": "Dieses Gerät",
|
||||
"Unknown Device": "Unbekanntes Gerät",
|
||||
"Are you sure you want to terminate this session?": "Sind Sie sicher, dass Sie diese Sitzung beenden möchten?",
|
||||
"Logout from this device?": "Von diesem Gerät abmelden?",
|
||||
"No active sessions found.": "Keine aktiven Sitzungen gefunden.",
|
||||
"Please login to view the webcam stream.": "Bitte melden Sie sich an, um die Live-Kamera zu sehen.",
|
||||
"Remember Me": "Erinnere dich an mich",
|
||||
"Merge Guest Data": "Gästendaten zusammenführen",
|
||||
"Main configuration for the printer dimensions, limits and base profiles.": "Hauptkonfiguration für die Druckerabmessungen, -grenzen und Basisprofile.",
|
||||
"API Keys Management": "API-Schlüsselverwaltung",
|
||||
"Create New API Key": "Neuen API-Schlüssel erstellen",
|
||||
"Key Name": "Schlüsselname",
|
||||
"Generate Key": "Schlüssel generieren",
|
||||
"Are you sure you want to delete this API Key?": "Sind Sie sicher, dass Sie diesen API-Schlüssel löschen möchten?",
|
||||
"API Key Name": "API-Schlüsselname",
|
||||
"No API keys found.": "Keine API-Schlüssel gefunden.",
|
||||
"API Keys": "API-Schlüssel",
|
||||
"Slice Helper": "Slice-Helfer",
|
||||
"Printer Helper": "Drucker-Helfer",
|
||||
"For security reasons, please change your default admin password.": "Aus Sicherheitsgründen ändern Sie bitte Ihr Standard-Administratorpasswort.",
|
||||
"Your new password cannot be the default \"admin123\".": "Ihr neues Passwort darf nicht das Standardpasswort \"admin123\" sein.",
|
||||
"Current password is incorrect.": "Das aktuelle Passwort ist falsch.",
|
||||
"New passwords do not match.": "Die neuen Passwörter stimmen nicht überein.",
|
||||
"New password must be at least 6 characters.": "Das neue Passwort muss mindestens 6 Zeichen lang sein.",
|
||||
"Password updated successfully.": "Passwort erfolgreich aktualisiert."
|
||||
}
|
||||
@@ -236,5 +236,46 @@
|
||||
"Internal infill": "Internal infill",
|
||||
"Bridge infill": "Bridge infill",
|
||||
"Top solid infill": "Top solid infill",
|
||||
"Others": "Others"
|
||||
"Others": "Others",
|
||||
"Are you sure you want to clear the board?": "Are you sure you want to clear the board?",
|
||||
"d": "d",
|
||||
"h": "h",
|
||||
"m": "m",
|
||||
"s": "s",
|
||||
"Auto Leveling": "Auto Leveling",
|
||||
"Account Management": "Account Management",
|
||||
"Change Password": "Change Password",
|
||||
"Current Password": "Current Password",
|
||||
"Confirm New Password": "Confirm New Password",
|
||||
"Update Password": "Update Password",
|
||||
"Active Sessions": "Active Sessions",
|
||||
"Device": "Device",
|
||||
"IP Address": "IP Address",
|
||||
"Last Active": "Last Active",
|
||||
"Action": "Action",
|
||||
"This Device": "This Device",
|
||||
"Unknown Device": "Unknown Device",
|
||||
"Are you sure you want to terminate this session?": "Are you sure you want to terminate this session?",
|
||||
"Logout from this device?": "Logout from this device?",
|
||||
"No active sessions found.": "No active sessions found.",
|
||||
"Please login to view the webcam stream.": "Please login to view the webcam stream.",
|
||||
"Remember Me": "Remember Me",
|
||||
"Merge Guest Data": "Merge Guest Data",
|
||||
"Main configuration for the printer dimensions, limits and base profiles.": "Main configuration for the printer dimensions, limits and base profiles.",
|
||||
"API Keys Management": "API Keys Management",
|
||||
"Create New API Key": "Create New API Key",
|
||||
"Key Name": "Key Name",
|
||||
"Generate Key": "Generate Key",
|
||||
"Are you sure you want to delete this API Key?": "Are you sure you want to delete this API Key?",
|
||||
"API Key Name": "API Key Name",
|
||||
"No API keys found.": "No API keys found.",
|
||||
"API Keys": "API Keys",
|
||||
"Slice Helper": "Slice Helper",
|
||||
"Printer Helper": "Printer Helper",
|
||||
"For security reasons, please change your default admin password.": "For security reasons, please change your default admin password.",
|
||||
"Your new password cannot be the default \"admin123\".": "Your new password cannot be the default \"admin123\".",
|
||||
"Current password is incorrect.": "Current password is incorrect.",
|
||||
"New passwords do not match.": "New passwords do not match.",
|
||||
"New password must be at least 6 characters.": "New password must be at least 6 characters.",
|
||||
"Password updated successfully.": "Password updated successfully."
|
||||
}
|
||||
@@ -236,5 +236,46 @@
|
||||
"Internal infill": "内部填充",
|
||||
"Bridge infill": "桥接填充",
|
||||
"Top solid infill": "顶部实体填充",
|
||||
"Others": "其他"
|
||||
"Others": "其他",
|
||||
"Are you sure you want to clear the board?": "您确定要清空构建板吗?",
|
||||
"d": "天",
|
||||
"h": "时",
|
||||
"m": "分",
|
||||
"s": "秒",
|
||||
"Auto Leveling": "自动调平",
|
||||
"Account Management": "账号管理",
|
||||
"Change Password": "修改密码",
|
||||
"Current Password": "当前密码",
|
||||
"Confirm New Password": "确认新密码",
|
||||
"Update Password": "更新密码",
|
||||
"Active Sessions": "活跃会话",
|
||||
"Device": "设备",
|
||||
"IP Address": "IP 地址",
|
||||
"Last Active": "最后活跃",
|
||||
"Action": "操作",
|
||||
"This Device": "当前设备",
|
||||
"Unknown Device": "未知设备",
|
||||
"Are you sure you want to terminate this session?": "您确定要终止此会话吗?",
|
||||
"Logout from this device?": "从此设备注销?",
|
||||
"No active sessions found.": "未找到活跃的会话。",
|
||||
"Please login to view the webcam stream.": "请登录以查看实时摄像头。",
|
||||
"Remember Me": "记住我",
|
||||
"Merge Guest Data": "合并访客数据",
|
||||
"Main configuration for the printer dimensions, limits and base profiles.": "打印机尺寸、限制和基础配置的主要配置。",
|
||||
"API Keys Management": "API 密钥管理",
|
||||
"Create New API Key": "创建新的 API 密钥",
|
||||
"Key Name": "密钥名称",
|
||||
"Generate Key": "生成密钥",
|
||||
"Are you sure you want to delete this API Key?": "您确定要删除此 API 密钥吗?",
|
||||
"API Key Name": "API 密钥名称",
|
||||
"No API keys found.": "未找到 API 密钥。",
|
||||
"API Keys": "API 密钥",
|
||||
"Slice Helper": "切片助手",
|
||||
"Printer Helper": "打印助手",
|
||||
"For security reasons, please change your default admin password.": "出于安全原因,请修改您的默认管理员密码。",
|
||||
"Your new password cannot be the default \"admin123\".": "新密码不能设置为系统默认的 \"admin123\"。",
|
||||
"Current password is incorrect.": "当前密码不正确。",
|
||||
"New passwords do not match.": "新密码不匹配。",
|
||||
"New password must be at least 6 characters.": "新密码必须至少6个字符。",
|
||||
"Password updated successfully.": "密码更新成功。"
|
||||
}
|
||||
BIN
app/assets/img/favicon.ico
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
app/assets/img/favicon.jpg
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
app/assets/img/logo.jpg
Normal file
|
After Width: | Height: | Size: 1.3 MiB |
BIN
app/assets/img/slice_helper/account-management_de.png
Normal file
|
After Width: | Height: | Size: 257 KiB |
BIN
app/assets/img/slice_helper/account-management_en.png
Normal file
|
After Width: | Height: | Size: 250 KiB |
BIN
app/assets/img/slice_helper/account-management_zh-cn.png
Normal file
|
After Width: | Height: | Size: 249 KiB |
BIN
app/assets/img/slice_helper/api-keys_de.png
Normal file
|
After Width: | Height: | Size: 118 KiB |
BIN
app/assets/img/slice_helper/api-keys_en.png
Normal file
|
After Width: | Height: | Size: 110 KiB |
BIN
app/assets/img/slice_helper/api-keys_zh-cn.png
Normal file
|
After Width: | Height: | Size: 118 KiB |
BIN
app/assets/img/slice_helper/home_de.png
Normal file
|
After Width: | Height: | Size: 133 KiB |
BIN
app/assets/img/slice_helper/home_en.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
app/assets/img/slice_helper/home_zh-cn.png
Normal file
|
After Width: | Height: | Size: 121 KiB |
BIN
app/assets/img/slice_helper/my-files_de.png
Normal file
|
After Width: | Height: | Size: 297 KiB |
BIN
app/assets/img/slice_helper/my-files_en.png
Normal file
|
After Width: | Height: | Size: 291 KiB |
BIN
app/assets/img/slice_helper/my-files_zh-cn.png
Normal file
|
After Width: | Height: | Size: 297 KiB |
BIN
app/assets/img/slice_helper/plater_de.png
Normal file
|
After Width: | Height: | Size: 410 KiB |
BIN
app/assets/img/slice_helper/plater_en.png
Normal file
|
After Width: | Height: | Size: 404 KiB |
BIN
app/assets/img/slice_helper/plater_zh-cn.png
Normal file
|
After Width: | Height: | Size: 407 KiB |
BIN
app/assets/img/slice_helper/slice-helper_de.png
Normal file
|
After Width: | Height: | Size: 193 KiB |
BIN
app/assets/img/slice_helper/slice-helper_en.png
Normal file
|
After Width: | Height: | Size: 177 KiB |
BIN
app/assets/img/slice_helper/slice-helper_zh-cn.png
Normal file
|
After Width: | Height: | Size: 184 KiB |
BIN
app/assets/img/slice_helper/system-settings_de.png
Normal file
|
After Width: | Height: | Size: 185 KiB |
BIN
app/assets/img/slice_helper/system-settings_en.png
Normal file
|
After Width: | Height: | Size: 182 KiB |
BIN
app/assets/img/slice_helper/system-settings_zh-cn.png
Normal file
|
After Width: | Height: | Size: 211 KiB |
BIN
app/assets/img/slice_helper/user-management_de.png
Normal file
|
After Width: | Height: | Size: 345 KiB |
BIN
app/assets/img/slice_helper/user-management_en.png
Normal file
|
After Width: | Height: | Size: 326 KiB |
BIN
app/assets/img/slice_helper/user-management_zh-cn.png
Normal file
|
After Width: | Height: | Size: 344 KiB |
@@ -26,7 +26,22 @@ class PrintFile(db.Model):
|
||||
status = db.Column(db.String(50), default='waiting') # waiting, slicing, sliced, failed
|
||||
transform_matrix = db.Column(db.Text, nullable=True) # json format of 16-element array
|
||||
|
||||
class UserSession(db.Model):
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
|
||||
session_token = db.Column(db.String(100), unique=True, nullable=False)
|
||||
ip_address = db.Column(db.String(50))
|
||||
user_agent = db.Column(db.String(255))
|
||||
last_active = db.Column(db.DateTime, default=datetime.utcnow)
|
||||
is_active = db.Column(db.Boolean, default=True)
|
||||
|
||||
class SystemConfig(db.Model):
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
key = db.Column(db.String(50), unique=True, nullable=False)
|
||||
value = db.Column(db.String(255), nullable=False)
|
||||
|
||||
class ApiKey(db.Model):
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
key = db.Column(db.String(100), unique=True, nullable=False)
|
||||
name = db.Column(db.String(100), nullable=False)
|
||||
created_at = db.Column(db.DateTime, default=datetime.utcnow)
|
||||
|
||||
@@ -1,17 +1,16 @@
|
||||
import json
|
||||
import trimesh
|
||||
import uuid
|
||||
import os
|
||||
import configparser
|
||||
import secrets
|
||||
from datetime import datetime
|
||||
from flask import Blueprint, render_template, request, redirect, url_for, flash, current_app, session, make_response, send_file, abort, jsonify
|
||||
from flask_login import login_user, logout_user, login_required, current_user
|
||||
from werkzeug.security import generate_password_hash, check_password_hash
|
||||
from werkzeug.utils import secure_filename
|
||||
from app.models import db, User, PrintFile, SystemConfig
|
||||
from app.models import db, User, PrintFile, SystemConfig, ApiKey
|
||||
from app.utils.tasks import merge_and_slice_task, slice_stl_task, simplify_stl_task
|
||||
from app import i18n_dict
|
||||
# import trimesh.repair
|
||||
from app.utils.stl_simplifier import simplify_stl
|
||||
from app.utils.slice_engines import get_all_engines
|
||||
|
||||
@@ -47,6 +46,7 @@ def settings():
|
||||
default_support_pattern = request.form.get('default_support_pattern', 'tree')
|
||||
default_quality = request.form.get('default_quality', 'base_global_standard.inst.cfg')
|
||||
default_material = request.form.get('default_material', '')
|
||||
default_printer = request.form.get('default_printer', '')
|
||||
gcode_upload_folder = request.form.get('gcode_upload_folder', '').strip()
|
||||
slicer_engine = request.form.get('slicer_engine', 'cura')
|
||||
build_plate_model_path = request.form.get('build_plate_model_path', '').strip()
|
||||
@@ -61,6 +61,7 @@ def settings():
|
||||
('default_support_pattern', default_support_pattern),
|
||||
('default_quality', default_quality),
|
||||
('default_material', default_material),
|
||||
('default_printer', default_printer),
|
||||
('gcode_upload_folder', gcode_upload_folder),
|
||||
('slicer_engine', slicer_engine),
|
||||
('build_plate_model_path', build_plate_model_path),
|
||||
@@ -89,12 +90,40 @@ def settings():
|
||||
def users():
|
||||
all_users = User.query.order_by(User.created_at.desc()).all()
|
||||
user_quotas = {}
|
||||
|
||||
# Load defaults
|
||||
def_guest_stl = SystemConfig.query.filter_by(key="default_guest_stl_quota_mb").first()
|
||||
def_guest_stl_val = def_guest_stl.value if def_guest_stl else '0'
|
||||
def_guest_gcode = SystemConfig.query.filter_by(key="default_guest_gcode_quota_mb").first()
|
||||
def_guest_gcode_val = def_guest_gcode.value if def_guest_gcode else '0'
|
||||
|
||||
def_user_stl = SystemConfig.query.filter_by(key="default_user_stl_quota_mb").first()
|
||||
def_user_stl_val = def_user_stl.value if def_user_stl else '0'
|
||||
def_user_gcode = SystemConfig.query.filter_by(key="default_user_gcode_quota_mb").first()
|
||||
def_user_gcode_val = def_user_gcode.value if def_user_gcode else '0'
|
||||
|
||||
for u in all_users:
|
||||
if u.is_admin:
|
||||
eff_stl = '0'
|
||||
eff_gcode = '0'
|
||||
elif u.is_guest:
|
||||
eff_stl = def_guest_stl_val
|
||||
eff_gcode = def_guest_gcode_val
|
||||
else:
|
||||
eff_stl = def_user_stl_val
|
||||
eff_gcode = def_user_gcode_val
|
||||
|
||||
sq = SystemConfig.query.filter_by(key=f"user_{u.id}_stl_quota_mb").first()
|
||||
gq = SystemConfig.query.filter_by(key=f"user_{u.id}_gcode_quota_mb").first()
|
||||
|
||||
user_stl = sq.value if sq else '0'
|
||||
user_gcode = gq.value if gq else '0'
|
||||
|
||||
user_quotas[u.id] = {
|
||||
'stl': sq.value if sq else '0',
|
||||
'gcode': gq.value if gq else '0'
|
||||
'stl': user_stl,
|
||||
'gcode': user_gcode,
|
||||
'eff_stl': eff_stl if user_stl == '0' else user_stl,
|
||||
'eff_gcode': eff_gcode if user_gcode == '0' else user_gcode,
|
||||
}
|
||||
return render_template('admin/users.html', users=all_users, user_quotas=user_quotas)
|
||||
|
||||
@@ -187,15 +216,32 @@ def delete_user(user_id):
|
||||
flash(f'User {user.username} and all their files have been deleted.', 'success')
|
||||
return redirect(url_for('admin.users'))
|
||||
|
||||
def get_bed_dimensions():
|
||||
try:
|
||||
path = os.path.join(current_app.root_path, '..', 'print_config', 'printers', 'creality_ender3v3se.def.json')
|
||||
with open(path, 'r', encoding='utf-8') as f:
|
||||
data = json.load(f)
|
||||
w = data['overrides']['machine_width']['default_value']
|
||||
h = data['overrides']['machine_depth']['default_value']
|
||||
hd = data['overrides']['machine_height']['default_value']
|
||||
return w, h, hd
|
||||
except:
|
||||
return 200, 200, 200
|
||||
|
||||
|
||||
|
||||
@admin_bp.route('/api_keys')
|
||||
def api_keys():
|
||||
keys = ApiKey.query.order_by(ApiKey.created_at.desc()).all()
|
||||
return render_template('admin/api_keys.html', keys=keys)
|
||||
|
||||
@admin_bp.route('/api_key/add', methods=['POST'])
|
||||
def add_api_key():
|
||||
name = request.form.get('name')
|
||||
if not name:
|
||||
flash("Name is required", "danger")
|
||||
return redirect(url_for('admin.api_keys'))
|
||||
|
||||
key_value = secrets.token_urlsafe(32)
|
||||
new_key = ApiKey(name=name, key=key_value)
|
||||
db.session.add(new_key)
|
||||
db.session.commit()
|
||||
flash(f"API Key '{name}' created.", "success")
|
||||
return redirect(url_for('admin.api_keys'))
|
||||
|
||||
@admin_bp.route('/api_key/<int:key_id>/delete', methods=['POST'])
|
||||
def delete_api_key(key_id):
|
||||
key = ApiKey.query.get_or_404(key_id)
|
||||
db.session.delete(key)
|
||||
db.session.commit()
|
||||
flash(f'API Key {key.name} deleted.', 'success')
|
||||
return redirect(url_for('admin.api_keys'))
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import json
|
||||
import trimesh
|
||||
import uuid
|
||||
import os
|
||||
import configparser
|
||||
@@ -8,11 +7,12 @@ from flask import Blueprint, render_template, request, redirect, url_for, flash,
|
||||
from flask_login import login_user, logout_user, login_required, current_user
|
||||
from werkzeug.security import generate_password_hash, check_password_hash
|
||||
from werkzeug.utils import secure_filename
|
||||
from app.models import db, User, PrintFile, SystemConfig
|
||||
from app.models import db, User, PrintFile, SystemConfig, UserSession
|
||||
from app.utils.tasks import merge_and_slice_task, slice_stl_task, simplify_stl_task
|
||||
from app import i18n_dict
|
||||
# import trimesh.repair
|
||||
from app.utils.stl_simplifier import simplify_stl
|
||||
from app.routes.main_routes import get_quota_info
|
||||
from app.routes.admin_routes import get_gcode_dir
|
||||
|
||||
|
||||
main_bp = Blueprint('main', __name__)
|
||||
@@ -28,16 +28,119 @@ def login():
|
||||
username = request.form.get('username')
|
||||
password = request.form.get('password')
|
||||
user = User.query.filter_by(username=username, is_guest=False).first()
|
||||
|
||||
remember = bool(request.form.get('remember'))
|
||||
merge_data = bool(request.form.get('merge_data'))
|
||||
|
||||
|
||||
|
||||
if user and check_password_hash(user.password_hash, password):
|
||||
login_user(user)
|
||||
return redirect(url_for('main.index'))
|
||||
# Clear old password check flag
|
||||
session.pop('pwd_check_done', None)
|
||||
session.pop('must_change_password', None)
|
||||
login_user(user, remember=remember)
|
||||
session_token = str(uuid.uuid4())
|
||||
# 尝试获取反向代理传递的真实 IP
|
||||
client_ip = request.headers.get('X-Real-IP')
|
||||
if not client_ip:
|
||||
client_ip = request.remote_addr
|
||||
|
||||
user_session = UserSession(
|
||||
user_id=user.id,
|
||||
session_token=session_token,
|
||||
ip_address=client_ip,
|
||||
user_agent=request.user_agent.string
|
||||
)
|
||||
db.session.add(user_session)
|
||||
db.session.commit()
|
||||
session['user_session_token'] = session_token
|
||||
|
||||
if merge_data:
|
||||
guest_id = request.cookies.get('guest_id')
|
||||
if guest_id:
|
||||
guest_user = User.query.filter_by(guest_cookie_id=guest_id, is_guest=True).first()
|
||||
if guest_user:
|
||||
guest_files = PrintFile.query.filter_by(user_id=guest_user.id).all()
|
||||
|
||||
stl_quota, stl_used = get_quota_info(user, 'stl')
|
||||
gcode_quota, gcode_used = get_quota_info(user, 'gcode')
|
||||
|
||||
stl_quota_bytes = stl_quota * 1024 * 1024 if stl_quota > 0 else float('inf')
|
||||
gcode_quota_bytes = gcode_quota * 1024 * 1024 if gcode_quota > 0 else float('inf')
|
||||
|
||||
upload_dir = current_app.config.get('UPLOAD_FOLDER', 'uploads')
|
||||
gcode_dir = get_gcode_dir()
|
||||
|
||||
for pf in guest_files:
|
||||
file_size = 0
|
||||
file_type = 'stl'
|
||||
is_external_gcode = pf.original_filename.lower().endswith(('.gcode', '.gco', '.g'))
|
||||
if is_external_gcode or pf.status == 'sliced':
|
||||
file_type = 'gcode'
|
||||
g_filename = pf.filename.rsplit('.', 1)[0] + '.gcode'
|
||||
path = os.path.join(gcode_dir, g_filename)
|
||||
if os.path.exists(path):
|
||||
file_size = os.path.getsize(path)
|
||||
else:
|
||||
p2 = os.path.join(upload_dir, g_filename)
|
||||
if os.path.exists(p2): file_size = os.path.getsize(p2)
|
||||
else:
|
||||
path = os.path.join(upload_dir, pf.filename)
|
||||
if os.path.exists(path):
|
||||
file_size = os.path.getsize(path)
|
||||
|
||||
# Check quota
|
||||
can_merge = True
|
||||
if not user.is_admin:
|
||||
if file_type == 'stl' and (stl_used + file_size > stl_quota_bytes):
|
||||
can_merge = False
|
||||
elif file_type == 'gcode' and (gcode_used + file_size > gcode_quota_bytes):
|
||||
can_merge = False
|
||||
|
||||
if can_merge:
|
||||
pf.user_id = user.id
|
||||
if file_type == 'stl': stl_used += file_size
|
||||
else: gcode_used += file_size
|
||||
else:
|
||||
# delete from disk to prevent orphans
|
||||
stl_path = os.path.join(upload_dir, pf.filename)
|
||||
proxy_path = stl_path + '.proxy.stl'
|
||||
gcode_filename = pf.filename.rsplit('.', 1)[0] + '.gcode'
|
||||
gp = os.path.join(gcode_dir, gcode_filename)
|
||||
fp = os.path.join(upload_dir, gcode_filename)
|
||||
if os.path.exists(stl_path): os.remove(stl_path)
|
||||
if os.path.exists(proxy_path): os.remove(proxy_path)
|
||||
if os.path.exists(gp): os.remove(gp)
|
||||
if os.path.exists(fp): os.remove(fp)
|
||||
db.session.delete(pf)
|
||||
|
||||
# Save changes to files first so SQLAlchemy doesn't try to nullify related keys
|
||||
db.session.commit()
|
||||
|
||||
# Delete guest user after merge
|
||||
db.session.delete(guest_user)
|
||||
db.session.commit()
|
||||
|
||||
response = make_response(redirect(url_for('main.index')))
|
||||
if merge_data:
|
||||
response.delete_cookie('guest_id')
|
||||
return response
|
||||
flash('Invalid username or password', 'danger')
|
||||
return render_template('auth/login.html')
|
||||
|
||||
|
||||
@auth_bp.route('/logout')
|
||||
@login_required
|
||||
def logout():
|
||||
session_token = session.get('user_session_token')
|
||||
if session_token:
|
||||
user_session = UserSession.query.filter_by(session_token=session_token).first()
|
||||
if user_session:
|
||||
user_session.is_active = False
|
||||
db.session.commit()
|
||||
logout_user()
|
||||
session.pop('user_session_token', None)
|
||||
|
||||
response = make_response(redirect(url_for('main.index')))
|
||||
response.delete_cookie('guest_id') # Optionally clear guest cookie
|
||||
return response
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import json
|
||||
import trimesh
|
||||
import uuid
|
||||
import os
|
||||
import configparser
|
||||
@@ -8,16 +7,63 @@ from flask import Blueprint, render_template, request, redirect, url_for, flash,
|
||||
from flask_login import login_user, logout_user, login_required, current_user
|
||||
from werkzeug.security import generate_password_hash, check_password_hash
|
||||
from werkzeug.utils import secure_filename
|
||||
from app.models import db, User, PrintFile, SystemConfig
|
||||
from app.models import db, User, PrintFile, SystemConfig, UserSession
|
||||
from app.utils.tasks import merge_and_slice_task, slice_stl_task, simplify_stl_task
|
||||
from app import i18n_dict
|
||||
# import trimesh.repair
|
||||
from app.utils.stl_simplifier import simplify_stl
|
||||
from app.routes.admin_routes import get_gcode_dir
|
||||
|
||||
from app.utils.slice_engines import get_slicer_engine
|
||||
from app.utils.gcode_parser import get_gcode_metadata
|
||||
|
||||
main_bp = Blueprint('main', __name__)
|
||||
|
||||
@main_bp.before_app_request
|
||||
def check_user_session():
|
||||
if current_user.is_authenticated and not current_user.is_guest:
|
||||
session_token = session.get('user_session_token')
|
||||
client_ip = request.headers.get('X-Real-IP') or request.remote_addr
|
||||
|
||||
if session_token:
|
||||
user_session = UserSession.query.filter_by(session_token=session_token).first()
|
||||
if not user_session or not user_session.is_active:
|
||||
logout_user()
|
||||
session.pop('user_session_token', None)
|
||||
flash('Your session has been terminated.', 'warning')
|
||||
return redirect(url_for('auth.login'))
|
||||
else:
|
||||
user_session.last_active = datetime.utcnow()
|
||||
user_session.ip_address = client_ip
|
||||
db.session.commit()
|
||||
else:
|
||||
# Re-authenticated via remember me, but no session token
|
||||
new_session_token = str(uuid.uuid4())
|
||||
user_session = UserSession(
|
||||
user_id=current_user.id,
|
||||
session_token=new_session_token,
|
||||
ip_address=client_ip,
|
||||
user_agent=request.user_agent.string,
|
||||
last_active=datetime.utcnow()
|
||||
)
|
||||
db.session.add(user_session)
|
||||
db.session.commit()
|
||||
session['user_session_token'] = new_session_token
|
||||
|
||||
# Check default admin password securely without checking hash on every request
|
||||
if current_user.is_admin:
|
||||
if session.get('pwd_check_done') is None:
|
||||
session['pwd_check_done'] = True
|
||||
if check_password_hash(current_user.password_hash, 'admin123'):
|
||||
session['must_change_password'] = True
|
||||
else:
|
||||
session.pop('must_change_password', None)
|
||||
|
||||
if session.get('must_change_password'):
|
||||
if request.endpoint and request.endpoint not in ['main.account', 'auth.logout', 'static']:
|
||||
flash('For security reasons, please change your default admin password.', 'warning')
|
||||
return redirect(url_for('main.account'))
|
||||
|
||||
|
||||
|
||||
|
||||
auth_bp = Blueprint('auth', __name__, url_prefix='/auth')
|
||||
admin_bp = Blueprint('admin', __name__, url_prefix='/admin')
|
||||
@@ -72,6 +118,8 @@ def check_quota(user, file_type, size_bytes):
|
||||
# Guest User Middleware
|
||||
@main_bp.before_app_request
|
||||
def assign_guest_cookie():
|
||||
if request.path.startswith('/api/'):
|
||||
return
|
||||
if not current_user.is_authenticated:
|
||||
guest_id = request.cookies.get('guest_id')
|
||||
if not guest_id:
|
||||
@@ -280,7 +328,17 @@ def preview_gcode(file_id):
|
||||
|
||||
content = "File not found or not ready."
|
||||
line_count = 0
|
||||
|
||||
time_info = "-"
|
||||
layer1_time = "-"
|
||||
filament_used = "-"
|
||||
|
||||
if os.path.exists(filepath):
|
||||
metadata = get_gcode_metadata(filepath)
|
||||
time_info = metadata.get('print_time', '-')
|
||||
layer1_time = metadata.get('first_layer_time', '-')
|
||||
filament_used = metadata.get('filament_used', '-')
|
||||
|
||||
with open(filepath, 'r') as f:
|
||||
lines = f.readlines()
|
||||
line_count = len(lines)
|
||||
@@ -288,11 +346,15 @@ def preview_gcode(file_id):
|
||||
if line_count > 500:
|
||||
content += f"\n... \n[Preview truncated. Total lines: {line_count}. Please download to view full file.]"
|
||||
|
||||
w, h, hd = get_bed_dimensions()
|
||||
engine_name = SystemConfig.query.filter_by(key='slicer_engine').first()
|
||||
if engine_name:
|
||||
engine = get_slicer_engine(str(engine_name.value), current_app.config['PRINT_CONFIG_FOLDER'], current_app.config['PRUSA_SLICE_BIN'])
|
||||
w, h, hd = engine.get_bed_dimensions()
|
||||
configs = {c.key: c.value for c in SystemConfig.query.all()}
|
||||
offset_x = float(configs.get('offset_x', '0.0'))
|
||||
offset_y = float(configs.get('offset_y', '0.0'))
|
||||
return render_template('slice/gcode_preview.html', file=print_file, content=content, line_count=line_count, machine_width=w, machine_depth=h, machine_height=hd, offset_x=offset_x, offset_y=offset_y)
|
||||
return render_template('slice/gcode_preview.html', file=print_file, content=content, line_count=line_count, machine_width=w, machine_depth=h, machine_height=hd, offset_x=offset_x, offset_y=offset_y,
|
||||
time_info=time_info, layer1_time=layer1_time, filament_used=filament_used)
|
||||
|
||||
@main_bp.route('/delete_file/<int:file_id>', methods=['POST'])
|
||||
@login_required
|
||||
@@ -326,25 +388,17 @@ def delete_file(file_id):
|
||||
|
||||
# --- Auth Routes ---
|
||||
|
||||
def get_bed_dimensions():
|
||||
try:
|
||||
path = os.path.join(current_app.root_path, '..', 'print_config', 'printers', 'creality_ender3v3se.def.json')
|
||||
with open(path, 'r', encoding='utf-8') as f:
|
||||
data = json.load(f)
|
||||
w = data['overrides']['machine_width']['default_value']
|
||||
h = data['overrides']['machine_depth']['default_value']
|
||||
hd = data['overrides']['machine_height']['default_value']
|
||||
return w, h, hd
|
||||
except:
|
||||
return 200, 200, 200
|
||||
|
||||
@main_bp.route('/plater')
|
||||
@login_required
|
||||
def plater():
|
||||
quota_mb, current_size = get_quota_info(current_user, 'gcode')
|
||||
quota_exceeded = (quota_mb > 0 and current_size >= quota_mb * 1024 * 1024)
|
||||
|
||||
w, h, hd = get_bed_dimensions()
|
||||
engine_name = SystemConfig.query.filter_by(key='slicer_engine').first()
|
||||
if engine_name:
|
||||
engine = get_slicer_engine(str(engine_name.value), current_app.config['PRINT_CONFIG_FOLDER'], current_app.config['PRUSA_SLICE_BIN'])
|
||||
w, h, hd = engine.get_bed_dimensions()
|
||||
print(f"Bed dimensions: {w}x{h}x{hd}")
|
||||
|
||||
|
||||
configs = {c.key: c.value for c in SystemConfig.query.all()}
|
||||
@@ -361,6 +415,27 @@ def plater():
|
||||
models = [{'id': f.id, 'name': f.original_filename, 'status': f.status, 'url': url_for('main.serve_proxy_file', file_id=f.id), 'transform_matrix': f.transform_matrix} for f in user_files]
|
||||
return render_template('slice/plater.html', w=w, h=h, hd=hd, last_quality=default_quality, last_material=default_material, models=models, offset_x=offset_x, offset_y=offset_y, default_infill=default_infill, default_support=default_support, default_support_pattern=default_support_pattern, quota_exceeded=quota_exceeded, configs=configs)
|
||||
|
||||
|
||||
import re
|
||||
import markdown
|
||||
|
||||
@main_bp.route('/helper_slice')
|
||||
def helper_slice():
|
||||
lang = request.cookies.get('lang', 'en')
|
||||
filepath = os.path.join(current_app.root_path, 'assets', 'doc', f'slice_helper_{lang}.md')
|
||||
if not os.path.exists(filepath):
|
||||
filepath = os.path.join(current_app.root_path, 'assets', 'doc', 'slice_helper_en.md')
|
||||
|
||||
content_html = ""
|
||||
if os.path.exists(filepath):
|
||||
with open(filepath, 'r', encoding='utf-8') as f:
|
||||
md_text = f.read()
|
||||
content_html = markdown.markdown(md_text, extensions=['fenced_code', 'tables'])
|
||||
# Rewrite relative image links to /assets/doc/
|
||||
content_html = re.sub(r'src="(?!http|/)([^"]+)"', r'src="/assets/doc/\1"', content_html)
|
||||
|
||||
return render_template('slice/helper_slice.html', content_html=content_html)
|
||||
|
||||
@main_bp.route('/file/<int:file_id>')
|
||||
@login_required
|
||||
def serve_file(file_id):
|
||||
@@ -556,9 +631,60 @@ def build_plate_model():
|
||||
@main_bp.route('/api/engine_options/<engine_name>')
|
||||
@login_required
|
||||
def engine_options(engine_name):
|
||||
from app.utils.slice_engines import get_slicer_engine
|
||||
engine = get_slicer_engine(engine_name)
|
||||
presets = engine.get_quality_presets(current_app)
|
||||
patterns = engine.get_support_patterns(current_app)
|
||||
materials = engine.get_materials(current_app) if hasattr(engine, 'get_materials') else []
|
||||
return jsonify({'presets': presets, 'support_patterns': patterns, 'materials': materials})
|
||||
engine = get_slicer_engine(engine_name, current_app.config['PRINT_CONFIG_FOLDER'], current_app.config['PRUSA_SLICE_BIN'])
|
||||
presets = engine.get_quality_presets()
|
||||
patterns = engine.get_support_patterns()
|
||||
materials = engine.get_materials() if hasattr(engine, 'get_materials') else []
|
||||
printers = engine.get_all_printers() if hasattr(engine, 'get_all_printers') else []
|
||||
return jsonify({'presets': presets, 'support_patterns': patterns, 'materials': materials, 'printers': printers})
|
||||
|
||||
@main_bp.route('/account', methods=['GET', 'POST'])
|
||||
@login_required
|
||||
def account():
|
||||
if current_user.is_guest:
|
||||
flash('Guests cannot manage accounts.', 'danger')
|
||||
return redirect(url_for('main.index'))
|
||||
|
||||
if request.method == 'POST':
|
||||
action = request.form.get('action')
|
||||
|
||||
if action == 'change_password':
|
||||
current_pass = request.form.get('current_password')
|
||||
new_pass = request.form.get('new_password')
|
||||
confirm_pass = request.form.get('confirm_password')
|
||||
|
||||
if not check_password_hash(current_user.password_hash, current_pass):
|
||||
flash('Current password is incorrect.', 'danger')
|
||||
elif new_pass != confirm_pass:
|
||||
flash('New passwords do not match.', 'danger')
|
||||
elif len(new_pass) < 6:
|
||||
flash('New password must be at least 6 characters.', 'danger')
|
||||
elif current_user.is_admin and new_pass == 'admin123':
|
||||
flash('Your new password cannot be the default "admin123".', 'danger')
|
||||
else:
|
||||
current_user.password_hash = generate_password_hash(new_pass)
|
||||
db.session.commit()
|
||||
# If they just changed it, clear the must change flag
|
||||
session.pop('must_change_password', None)
|
||||
flash('Password updated successfully.', 'success')
|
||||
|
||||
elif action == 'terminate_session':
|
||||
session_id = request.form.get('session_id')
|
||||
token_to_terminate = request.form.get('session_token')
|
||||
|
||||
my_session_token = session.get('user_session_token')
|
||||
if token_to_terminate == my_session_token:
|
||||
flash('You cannot terminate your current session from here. Please logout instead.', 'warning')
|
||||
else:
|
||||
us = UserSession.query.filter_by(id=session_id, user_id=current_user.id).first()
|
||||
if us:
|
||||
us.is_active = False
|
||||
db.session.commit()
|
||||
flash('Session terminated.', 'success')
|
||||
|
||||
return redirect(url_for('main.account'))
|
||||
|
||||
sessions = UserSession.query.filter_by(user_id=current_user.id, is_active=True).order_by(UserSession.last_active.desc()).all()
|
||||
current_token = session.get('user_session_token')
|
||||
|
||||
return render_template('slice/account.html', sessions=sessions, current_token=current_token)
|
||||
|
||||
@@ -1,14 +1,18 @@
|
||||
from flask import Blueprint, render_template, request, jsonify, flash, redirect, url_for, current_app, Response
|
||||
from flask_login import login_required, current_user
|
||||
from websockets.sync.client import connect as ws_connect
|
||||
import os
|
||||
import websockets.exceptions
|
||||
import threading
|
||||
import requests
|
||||
from urllib.parse import urlparse
|
||||
from app.models import SystemConfig, db
|
||||
import uuid
|
||||
import traceback
|
||||
from werkzeug.utils import secure_filename
|
||||
from flask import Blueprint, render_template, request, jsonify, flash, redirect, url_for, current_app, Response
|
||||
from flask_login import login_required, current_user
|
||||
from flask_sock import Server, ConnectionClosed
|
||||
from websockets.sync.client import connect as ws_connect
|
||||
from urllib.parse import urlparse, urlencode
|
||||
from app.models import SystemConfig, db, PrintFile
|
||||
from app.utils.octoprint_client import OctoPrintClient
|
||||
from app.models import PrintFile
|
||||
import os
|
||||
from app.utils.gcode_parser import get_gcode_metadata
|
||||
|
||||
printer_bp = Blueprint('printer', __name__, url_prefix='/printer')
|
||||
|
||||
@@ -19,6 +23,23 @@ def get_octo_client():
|
||||
return OctoPrintClient(url.value, apikey.value)
|
||||
return None
|
||||
|
||||
def _enrich_job_data(job_data):
|
||||
if job_data and job_data.get('job', {}).get('file', {}).get('name'):
|
||||
internal_name = job_data['job']['file']['name']
|
||||
internal_stl_name = str(internal_name)[:-5]+"stl"
|
||||
if current_user.is_authenticated and current_user.is_admin:
|
||||
pf = PrintFile.query.filter_by(filename=internal_stl_name).first()
|
||||
elif current_user.is_authenticated:
|
||||
pf = PrintFile.query.filter_by(filename=internal_stl_name, user_id=current_user.id).first()
|
||||
else:
|
||||
pf = None
|
||||
|
||||
if pf:
|
||||
job_data['job']['file']['display_name'] = pf.original_filename
|
||||
else:
|
||||
job_data['job']['file']['display_name'] = internal_name
|
||||
return job_data
|
||||
|
||||
@printer_bp.route('/status')
|
||||
@login_required
|
||||
def status():
|
||||
@@ -29,14 +50,32 @@ def status():
|
||||
if client:
|
||||
try:
|
||||
status_data = client.get_printer_status()
|
||||
job_data = client.get_job_info()
|
||||
print(status_data)
|
||||
print(client.get_job_info())
|
||||
job_data = _enrich_job_data(client.get_job_info())
|
||||
|
||||
except Exception as e:
|
||||
error = str(e)
|
||||
print(error)
|
||||
else:
|
||||
error = "OctoPrint is not configured."
|
||||
|
||||
return render_template('printer/status.html', status=status_data, job=job_data, error=error)
|
||||
|
||||
@printer_bp.route('/api/status_data')
|
||||
@login_required
|
||||
def api_status_data():
|
||||
client = get_octo_client()
|
||||
if client:
|
||||
try:
|
||||
status_data = client.get_printer_status()
|
||||
job_data = _enrich_job_data(client.get_job_info())
|
||||
return jsonify({'success': True, 'status': status_data, 'job': job_data})
|
||||
except Exception as e:
|
||||
return jsonify({'success': False, 'error': str(e)})
|
||||
return jsonify({'success': False, 'error': 'OctoPrint is not configured.'})
|
||||
|
||||
|
||||
def get_gcode_dir():
|
||||
conf = SystemConfig.query.filter_by(key='gcode_upload_folder').first()
|
||||
if conf and conf.value and os.path.exists(conf.value):
|
||||
@@ -46,8 +85,6 @@ def get_gcode_dir():
|
||||
@printer_bp.route('/prepare')
|
||||
@login_required
|
||||
def prepare():
|
||||
from app.models import PrintFile
|
||||
import os
|
||||
|
||||
# Query only the sliced GCode files belonging to the current user
|
||||
user_files = PrintFile.query.filter_by(user_id=current_user.id, status='sliced').order_by(PrintFile.created_at.desc()).all()
|
||||
@@ -70,8 +107,16 @@ def prepare():
|
||||
gcode_path = os.path.join(gcode_dir, gcode_filename)
|
||||
|
||||
size = 0
|
||||
f.meta_print_time = '-'
|
||||
f.meta_first_layer_time = '-'
|
||||
f.meta_filament_used = '-'
|
||||
|
||||
if os.path.exists(gcode_path):
|
||||
size = os.path.getsize(gcode_path)
|
||||
metadata = get_gcode_metadata(gcode_path)
|
||||
f.meta_print_time = metadata.get('print_time', '-')
|
||||
f.meta_first_layer_time = metadata.get('first_layer_time', '-')
|
||||
f.meta_filament_used = metadata.get('filament_used', '-')
|
||||
|
||||
# Upload to OctoPrint if not found but exists locally
|
||||
if client and gcode_filename not in octo_files_dict and size > 0:
|
||||
@@ -93,7 +138,10 @@ def prepare():
|
||||
'size': size,
|
||||
'origin': 'local',
|
||||
'path': gcode_filename,
|
||||
'gcodeAnalysis': analysis
|
||||
'gcodeAnalysis': analysis,
|
||||
'meta_print_time': f.meta_print_time,
|
||||
'meta_first_layer_time': f.meta_first_layer_time,
|
||||
'meta_filament_used': f.meta_filament_used
|
||||
})
|
||||
|
||||
error = None
|
||||
@@ -102,13 +150,43 @@ def prepare():
|
||||
|
||||
return render_template('printer/prepare.html', files=files, error=error)
|
||||
|
||||
|
||||
def check_printer_control_permission(client):
|
||||
if current_user.is_admin:
|
||||
return True, None
|
||||
|
||||
try:
|
||||
status_data = client.get_printer_status()
|
||||
state = status_data.get('state', {}).get('text', '')
|
||||
active_states = ['Printing', 'Paused', 'Pausing', 'Resuming', 'Cancelling']
|
||||
if state not in active_states:
|
||||
return True, None
|
||||
|
||||
job_info = client.get_job_info()
|
||||
internal_name = job_info.get('job', {}).get('file', {}).get('name')
|
||||
if not internal_name:
|
||||
return False, "现在有任务正在运行,非管理员无法进行控制。"
|
||||
|
||||
pf = PrintFile.query.filter_by(filename=internal_name).first()
|
||||
if pf and pf.user_id == current_user.id:
|
||||
return True, None
|
||||
else:
|
||||
return False, "现在有任务正在运行,您无权进行此操作。只有管理员或任务发起者可以进行控制。"
|
||||
except Exception:
|
||||
pass
|
||||
return True, None
|
||||
|
||||
@printer_bp.route('/api/print_file', methods=['POST'])
|
||||
|
||||
@login_required
|
||||
def api_print_file():
|
||||
path = request.json.get('path')
|
||||
location = request.json.get('origin', 'local')
|
||||
client = get_octo_client()
|
||||
if client and path:
|
||||
allowed, err_msg = check_printer_control_permission(client)
|
||||
if not allowed:
|
||||
return jsonify({"success": False, "error": err_msg})
|
||||
try:
|
||||
client.select_file(location, path, print_after_select=True)
|
||||
return jsonify({"success": True})
|
||||
@@ -117,29 +195,73 @@ def api_print_file():
|
||||
return jsonify({"success": False, "error": "Not configured or missing path"})
|
||||
|
||||
@printer_bp.route('/control')
|
||||
@login_required
|
||||
def control():
|
||||
client = get_octo_client()
|
||||
webcam_url = None
|
||||
error = None
|
||||
if client:
|
||||
try:
|
||||
webcam_url = client.get_webcam_stream_url()
|
||||
raw_url = client.get_webcam_stream_url()
|
||||
# If it's an absolute url pointing to the base url, strip it or proxy it via octo_proxy
|
||||
parsed_raw = urlparse(raw_url)
|
||||
base_config = SystemConfig.query.filter_by(key='octoprint_url').first()
|
||||
if base_config and base_config.value:
|
||||
base_url = base_config.value.rstrip('/')
|
||||
parsed_base = urlparse(base_url)
|
||||
# If they share the same host, replace with proxy
|
||||
# Usually OctoPrint webcam streams are on the same host or relative
|
||||
path = parsed_raw.path
|
||||
if path.startswith('/'):
|
||||
path = path[1:]
|
||||
query = parsed_raw.query
|
||||
|
||||
# build proxy url
|
||||
if query:
|
||||
webcam_url = url_for('printer.octo_proxy', path=path) + '?' + query
|
||||
else:
|
||||
webcam_url = url_for('printer.octo_proxy', path=path)
|
||||
else:
|
||||
webcam_url = raw_url
|
||||
except Exception as e:
|
||||
error = str(e)
|
||||
else:
|
||||
error = "OctoPrint is not configured."
|
||||
return render_template('printer/control.html', webcam_url=webcam_url, error=error)
|
||||
|
||||
import re
|
||||
import markdown
|
||||
|
||||
@printer_bp.route('/helper_printer')
|
||||
def helper_printer():
|
||||
lang = request.cookies.get('lang', 'en')
|
||||
filepath = os.path.join(current_app.root_path, 'assets', 'doc', f'printer_helper_{lang}.md')
|
||||
if not os.path.exists(filepath):
|
||||
filepath = os.path.join(current_app.root_path, 'assets', 'doc', 'printer_helper_en.md')
|
||||
|
||||
content_html = ""
|
||||
if os.path.exists(filepath):
|
||||
with open(filepath, 'r', encoding='utf-8') as f:
|
||||
md_text = f.read()
|
||||
content_html = markdown.markdown(md_text, extensions=['fenced_code', 'tables'])
|
||||
# Rewrite relative image links to /assets/doc/
|
||||
content_html = re.sub(r'src="(?!http|/)([^"]+)"', r'src="/assets/doc/\1"', content_html)
|
||||
|
||||
return render_template('printer/helper_printer.html', content_html=content_html)
|
||||
|
||||
@printer_bp.route('/api/command', methods=['POST'])
|
||||
@login_required
|
||||
def api_command():
|
||||
cmd = request.json.get('command')
|
||||
client = get_octo_client()
|
||||
if client and cmd:
|
||||
allowed, err_msg = check_printer_control_permission(client)
|
||||
if not allowed:
|
||||
return jsonify({"success": False, "error": err_msg})
|
||||
try:
|
||||
if cmd == 'home':
|
||||
client.home_axes()
|
||||
elif cmd == 'auto_level':
|
||||
client.auto_leveling()
|
||||
elif cmd == 'pause':
|
||||
client.pause_print()
|
||||
elif cmd == 'cancel':
|
||||
@@ -152,11 +274,6 @@ def api_command():
|
||||
@printer_bp.route('/api/upload_gcode', methods=['POST'])
|
||||
@login_required
|
||||
def upload_gcode():
|
||||
from app.models import PrintFile
|
||||
import os
|
||||
import uuid
|
||||
from werkzeug.utils import secure_filename
|
||||
|
||||
if 'file' not in request.files:
|
||||
return jsonify({"success": False, "error": "No file part"}), 400
|
||||
|
||||
@@ -246,7 +363,7 @@ def octo_embed():
|
||||
@printer_bp.route('/proxy/<path:path>', methods=['GET', 'POST', 'PUT', 'DELETE', 'PATCH'])
|
||||
@login_required
|
||||
def octo_proxy(path):
|
||||
if not current_user.is_admin:
|
||||
if current_user.is_guest:
|
||||
return "Unauthorized", 403
|
||||
|
||||
url_config = SystemConfig.query.filter_by(key='octoprint_url').first()
|
||||
@@ -262,8 +379,6 @@ def octo_proxy(path):
|
||||
|
||||
# --- WebSocket Proxy Logic ---
|
||||
if request.headers.get('Upgrade', '').lower() == 'websocket':
|
||||
from flask_sock import Server, ConnectionClosed
|
||||
|
||||
# Check if environment supports WebSockets
|
||||
try:
|
||||
ws = Server(request.environ)
|
||||
@@ -309,7 +424,6 @@ def octo_proxy(path):
|
||||
remote_ws = ws_connect(target_url, additional_headers=ws_headers)
|
||||
print("WS Proxy connected to remote.")
|
||||
except Exception as e:
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
print(f"Remote WS Connection Error: {e}")
|
||||
ws.close(1011, str(e))
|
||||
@@ -362,14 +476,15 @@ def octo_proxy(path):
|
||||
class WebSocketResponse(Response):
|
||||
def __call__(self, *args, **kwargs):
|
||||
print("WS Response __call__")
|
||||
if getattr(ws, 'mode', 'werkzeug') == 'werkzeug':
|
||||
if getattr(ws, 'mode', 'werkzeug') == 'gunicorn':
|
||||
raise StopIteration()
|
||||
elif getattr(ws, 'mode', 'werkzeug') == 'werkzeug':
|
||||
return super().__call__(*args, **kwargs)
|
||||
return []
|
||||
|
||||
return WebSocketResponse()
|
||||
|
||||
# --- Standard HTTP Proxy Logic ---
|
||||
# from urllib.parse import urlparse
|
||||
target_url = f"{base_url}/{path}"
|
||||
|
||||
if request.query_string:
|
||||
|
||||
48
app/templates/admin/api_keys.html
Normal file
@@ -0,0 +1,48 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div class="container mt-4">
|
||||
<h2>{{ _('API Keys Management') }}</h2>
|
||||
|
||||
<div class="card mb-4">
|
||||
<div class="card-header">{{ _('Create New API Key') }}</div>
|
||||
<div class="card-body">
|
||||
<form action="{{ url_for('admin.add_api_key') }}" method="POST" class="form-inline">
|
||||
<input type="text" name="name" class="form-control mb-2 mr-sm-2" placeholder="{{ _('Key Name') }}" required>
|
||||
<button type="submit" class="btn btn-primary mb-2">{{ _('Generate Key') }}</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<table class="table table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ _('ID') }}</th>
|
||||
<th>{{ _('API Key Name') }}</th>
|
||||
<th>{{ _('API Key') }}</th>
|
||||
<th>{{ _('Created At') }}</th>
|
||||
<th>{{ _('Action') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for key in keys %}
|
||||
<tr>
|
||||
<td>{{ key.id }}</td>
|
||||
<td>{{ key.name }}</td>
|
||||
<td><code>{{ key.key }}</code></td>
|
||||
<td>{{ key.created_at.strftime('%Y-%m-%d %H:%M:%S') }}</td>
|
||||
<td>
|
||||
<form action="{{ url_for('admin.delete_api_key', key_id=key.id) }}" method="POST" style="display:inline;" onsubmit="event.preventDefault(); window.customConfirm('{{ _('Are you sure you want to delete this API Key?') }}', () => { this.submit(); });">
|
||||
<button type="submit" class="btn btn-danger btn-sm">{{ _('Delete') }}</button>
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
{% else %}
|
||||
<tr>
|
||||
<td colspan="5" class="text-center">{{ _('No API keys found.') }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -41,6 +41,14 @@
|
||||
<div class="form-text"><i class="bi bi-info-circle me-1"></i>{{ _('Absolute path to a custom build plate STL model to show in the plater. Leave empty to use none.') }}</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="default_printer" class="form-label">{{ _('Default Printer Profile') }}</label>
|
||||
<select class="form-select" name="default_printer" id="default_printer" data-selected="{{ configs.get('default_printer', '') }}">
|
||||
<!-- Loaded via JS -->
|
||||
</select>
|
||||
<div class="form-text"><i class="bi bi-info-circle me-1"></i>{{ _('Main configuration for the printer dimensions, limits and base profiles.') }}</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="default_infill" class="form-label">{{ _('Default Infill Density (%)') }}</label>
|
||||
<input type="number" class="form-control" name="default_infill" id="default_infill" value="{{ configs.get('default_infill', '20') }}" min="0" max="100">
|
||||
@@ -160,11 +168,22 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||
const qualitySelect = document.getElementById('default_quality');
|
||||
const materialSelect = document.getElementById('default_material');
|
||||
const patternSelect = document.getElementById('default_support_pattern');
|
||||
const printerSelect = document.getElementById('default_printer');
|
||||
|
||||
function updateOptions(engine) {
|
||||
fetch(`/api/engine_options/${engine}`)
|
||||
.then(res => res.json())
|
||||
.then(data => {
|
||||
const selPtr = printerSelect.getAttribute('data-selected');
|
||||
printerSelect.innerHTML = '';
|
||||
if(data.printers) {
|
||||
data.printers.forEach(p => {
|
||||
const opt = document.createElement('option');
|
||||
opt.value = p.id; opt.textContent = p.name;
|
||||
printerSelect.appendChild(opt);
|
||||
});
|
||||
}
|
||||
if(selPtr) printerSelect.value = selPtr;
|
||||
const selQ = qualitySelect.getAttribute('data-selected');
|
||||
qualitySelect.innerHTML = '';
|
||||
data.presets.forEach(p => {
|
||||
|
||||
@@ -35,8 +35,25 @@
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
<small class="text-muted d-block">STL: {{ user_quotas[user.id]['stl'] if user_quotas[user.id]['stl'] != '0' else _('Unlimited') }} MB</small>
|
||||
<small class="text-muted d-block">GCode: {{ user_quotas[user.id]['gcode'] if user_quotas[user.id]['gcode'] != '0' else _('Unlimited') }} MB</small>
|
||||
{% if user.is_admin %}
|
||||
<small class="text-muted d-block">STL: {{ _('Unlimited') }}</small>
|
||||
<small class="text-muted d-block">GCode: {{ _('Unlimited') }}</small>
|
||||
{% else %}
|
||||
<small class="text-muted d-block">STL:
|
||||
{% if user_quotas[user.id]['stl'] == '0' %}
|
||||
{{ _('Default') }} ({{ user_quotas[user.id]['eff_stl'] if user_quotas[user.id]['eff_stl'] != '0' else _('Unlimited') }} MB)
|
||||
{% else %}
|
||||
{{ user_quotas[user.id]['stl'] }} MB
|
||||
{% endif %}
|
||||
</small>
|
||||
<small class="text-muted d-block">GCode:
|
||||
{% if user_quotas[user.id]['gcode'] == '0' %}
|
||||
{{ _('Default') }} ({{ user_quotas[user.id]['eff_gcode'] if user_quotas[user.id]['eff_gcode'] != '0' else _('Unlimited') }} MB)
|
||||
{% else %}
|
||||
{{ user_quotas[user.id]['gcode'] }} MB
|
||||
{% endif %}
|
||||
</small>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>{{ user.created_at.strftime('%Y-%m-%d %H:%M') }}</td>
|
||||
<td>
|
||||
@@ -66,11 +83,11 @@
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="mb-3">
|
||||
<label class="form-label">{{ _('STL Quota') }} (MB) <small class="text-muted">(0 = {{ _('Unlimited') }})</small></label>
|
||||
<label class="form-label">{{ _('STL Quota') }} (MB) <small class="text-muted">(0 = {{ _('Default') }})</small></label>
|
||||
<input type="number" class="form-control" name="stl_quota_mb" value="{{ user_quotas[user.id]['stl'] }}" min="0">
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label class="form-label">{{ _('GCode Quota') }} (MB) <small class="text-muted">(0 = {{ _('Unlimited') }})</small></label>
|
||||
<label class="form-label">{{ _('GCode Quota') }} (MB) <small class="text-muted">(0 = {{ _('Default') }})</small></label>
|
||||
<input type="number" class="form-control" name="gcode_quota_mb" value="{{ user_quotas[user.id]['gcode'] }}" min="0">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -5,19 +5,27 @@
|
||||
<div class="col-md-6 mt-5">
|
||||
<div class="card shadow-sm">
|
||||
<div class="card-header bg-primary text-white">
|
||||
<h4 class="mb-0">Login</h4>
|
||||
<h4 class="mb-0">{{ _('Login') }}</h4>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<form method="POST" action="{{ url_for('auth.login') }}">
|
||||
<div class="mb-3">
|
||||
<label for="username" class="form-label">Username</label>
|
||||
<label for="username" class="form-label">{{ _('Username') }}</label>
|
||||
<input type="text" class="form-control" name="username" id="username" required>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="password" class="form-label">Password</label>
|
||||
<label for="password" class="form-label">{{ _('Password') }}</label>
|
||||
<input type="password" class="form-control" name="password" id="password" required>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary w-100">Login</button>
|
||||
<div class="mb-3 form-check">
|
||||
<input type="checkbox" class="form-check-input" name="remember" id="remember">
|
||||
<label class="form-check-label" for="remember">{{ _('Remember Me') }}</label>
|
||||
</div>
|
||||
<div class="mb-3 form-check">
|
||||
<input type="checkbox" class="form-check-input" name="merge_data" id="merge_data" checked>
|
||||
<label class="form-check-label" for="merge_data">{{ _('Merge Guest Data') }}</label>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary w-100">{{ _('Login') }}</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>AIO 3D Slicer</title>
|
||||
<link href="{{ url_for('static', filename='img/favicon.ico') }}" rel="icon" type="image/x-icon">
|
||||
<!-- Bootstrap 5 CSS -->
|
||||
<link href="{{ url_for('static', filename='css/bootstrap.min.css') }}" rel="stylesheet">
|
||||
<!-- Bootstrap Icons -->
|
||||
@@ -43,11 +44,23 @@
|
||||
|
||||
/* 提升 Accordion 折叠栏动画更平滑 */
|
||||
.collapsing { transition: height 0.35s cubic-bezier(0.25, 0.8, 0.25, 1) !important; }
|
||||
|
||||
/* 移动端适配 */
|
||||
@media (max-width: 767.98px) {
|
||||
body { padding-top: 126px !important; }
|
||||
.sidebar { top: 126px; width: 100%; border-bottom: 1px solid #ddd; box-shadow: 0 4px 6px rgba(0,0,0,.1); }
|
||||
.sidebar-sticky { height: calc(100vh - 126px); }
|
||||
.mobile-subnav { display: flex !important; }
|
||||
}
|
||||
@media (max-width: 454.98px) {
|
||||
.navbar-brand { display: none !important; }
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<nav class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top shadow-sm">
|
||||
<div class="container-fluid position-relative d-flex justify-content-between align-items-center">
|
||||
<div class="fixed-top">
|
||||
<nav class="navbar navbar-expand-lg navbar-dark bg-dark shadow-sm">
|
||||
<div class="container-fluid position-relative d-flex justify-content-between align-items-center">
|
||||
<a class="navbar-brand fw-bold" href="{{ url_for('main.index') }}"><i class="bi bi-printer me-2"></i>AIO 3D Slicer</a>
|
||||
|
||||
<div class="d-none d-md-flex mx-auto" style="position: absolute; left: 50%; transform: translateX(-50%);">
|
||||
@@ -82,6 +95,18 @@
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<!-- 移动端专属二级导航栏 -->
|
||||
<div class="d-none mobile-subnav align-items-center bg-white border-bottom px-3 py-2 shadow-sm d-md-none" style="justify-content: space-between;">
|
||||
<button class="btn btn-outline-secondary btn-sm" type="button" data-bs-toggle="collapse" data-bs-target="#sidebarMenu" aria-expanded="false" aria-controls="sidebarMenu">
|
||||
<i class="bi bi-list fs-4"></i>
|
||||
</button>
|
||||
<div class="btn-group border border-secondary shadow-sm rounded-pill p-1 bg-dark" role="group" style="background-color: #1a1e21 !important;">
|
||||
<a href="{{ url_for('main.files') }}" class="btn btn-sm rounded-pill {% if not request.blueprint == 'printer' %}btn-primary active fw-bold text-white px-3{% else %}btn-transparent text-secondary border-0 px-2{% endif %}" style="transition: all 0.2s;"><i class="bi bi-layers me-1"></i>{{ _('Slicer') }}</a>
|
||||
<a href="{{ url_for('printer.status') }}" class="btn btn-sm rounded-pill {% if request.blueprint == 'printer' %}btn-primary active fw-bold text-white px-3{% else %}btn-transparent text-secondary border-0 px-2{% endif %}" style="transition: all 0.2s;"><i class="bi bi-printer-fill me-1"></i>{{ _('Printer') }}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<nav id="sidebarMenu" class="col-md-3 col-lg-2 d-md-block bg-white sidebar collapse border-end">
|
||||
@@ -107,6 +132,18 @@
|
||||
<i class="bi bi-arrows-move me-2"></i>{{ _('Control') }}
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item mb-1">
|
||||
<a class="nav-link text-dark {% if request.endpoint == 'printer.helper_printer' %}active text-white shadow-sm{% endif %}" href="{{ url_for('printer.helper_printer') }}">
|
||||
<i class="bi bi-question-square me-2"></i>{{ _('Printer Helper') }}
|
||||
</a>
|
||||
</li>
|
||||
<!-- {% if current_user.is_authenticated and not current_user.is_guest %}
|
||||
<li class="nav-item mb-1">
|
||||
<a class="nav-link text-dark {% if request.endpoint == 'main.account' %}active text-white shadow-sm{% endif %}" href="{{ url_for('main.account') }}">
|
||||
<i class="bi bi-person-badge me-2"></i>{{ _('Account Management') }}
|
||||
</a>
|
||||
</li>
|
||||
{% endif %} -->
|
||||
</ul>
|
||||
|
||||
{% if current_user.is_authenticated and current_user.is_admin %}
|
||||
@@ -147,6 +184,18 @@
|
||||
<i class="bi bi-grid-3x3 me-2"></i>{{ _('Plater') }}
|
||||
</a>
|
||||
</li>
|
||||
{% if current_user.is_authenticated and not current_user.is_guest %}
|
||||
<li class="nav-item mb-1">
|
||||
<a class="nav-link text-dark {% if request.endpoint == 'main.account' %}active text-white shadow-sm{% endif %}" href="{{ url_for('main.account') }}">
|
||||
<i class="bi bi-person-badge me-2"></i>{{ _('Account Management') }}
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li class="nav-item mb-1">
|
||||
<a class="nav-link text-dark {% if request.endpoint == 'main.helper_slice' %}active text-white shadow-sm{% endif %}" href="{{ url_for('main.helper_slice') }}">
|
||||
<i class="bi bi-question-square me-2"></i>{{ _('Slice Helper') }}
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
{% if current_user.is_authenticated and current_user.is_admin %}
|
||||
@@ -164,6 +213,11 @@
|
||||
<i class="bi bi-people me-2"></i>{{ _('User Management') }}
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link text-dark {% if request.endpoint == 'admin.api_keys' %}active text-white shadow-sm{% endif %}" href="{{ url_for('admin.api_keys') }}">
|
||||
<i class="bi bi-key me-2"></i>{{ _('API Keys') }}
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
@@ -17,8 +17,15 @@
|
||||
<div class="card-header bg-dark text-light fw-bold rounded-top">
|
||||
<i class="bi bi-camera-video me-1"></i>{{ _('Live Webcam') }}
|
||||
</div>
|
||||
<div class="card-body p-0 ratio ratio-16x9">
|
||||
<div class="card-body p-0 ratio ratio-16x9 bg-secondary bg-opacity-25 d-flex align-items-center justify-content-center">
|
||||
{% if current_user.is_guest %}
|
||||
<div class="text-center text-dark">
|
||||
<i class="bi bi-lock-fill display-4 d-block mb-3"></i>
|
||||
<h5 class="mb-0">{{ _('Please login to view the webcam stream.') }}</h5>
|
||||
</div>
|
||||
{% else %}
|
||||
<img src="{{ webcam_url }}" alt="{{ _('Loading webcam stream...') }}" class="w-100 h-100 object-fit-cover">
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -30,11 +37,23 @@
|
||||
<i class="bi bi-dpad me-1"></i>{{ _('Basic Control') }}
|
||||
</div>
|
||||
<div class="card-body text-center d-flex flex-column justify-content-center align-items-center">
|
||||
<!-- Home button -->
|
||||
<button class="btn btn-lg btn-primary rounded-circle mb-4 shadow" style="width: 80px; height: 80px;" onclick="sendCommand('home')" title="{{ _('Home All Axes') }}">
|
||||
<i class="bi bi-house-door fs-2"></i>
|
||||
</button>
|
||||
<div class="text-muted mb-4">{{ _('Home All Axes') }} (G28)</div>
|
||||
<!-- Motion Controls -->
|
||||
<div class="d-flex gap-4 justify-content-center mb-4 w-100">
|
||||
<!-- Home button -->
|
||||
<div>
|
||||
<button class="btn btn-lg btn-primary rounded-circle shadow mb-2" style="width: 80px; height: 80px;" onclick="sendCommand('home')" title="{{ _('Home All Axes') }}">
|
||||
<i class="bi bi-house-door fs-2"></i>
|
||||
</button>
|
||||
<div class="text-muted small">{{ _('Home All Axes') }}<br>(G28)</div>
|
||||
</div>
|
||||
<!-- Auto Level button -->
|
||||
<div>
|
||||
<button class="btn btn-lg btn-info rounded-circle shadow mb-2 text-white" style="width: 80px; height: 80px;" onclick="sendCommand('auto_level')" title="{{ _('Auto Leveling') }}">
|
||||
<i class="bi bi-grid-3x3 fs-2"></i>
|
||||
</button>
|
||||
<div class="text-muted small">{{ _('Auto Leveling') }}<br>(G29)</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Quick macros -->
|
||||
<div class="d-flex gap-3 justify-content-center flex-wrap w-100">
|
||||
@@ -52,7 +71,7 @@
|
||||
|
||||
<script>
|
||||
function sendCommand(cmdName) {
|
||||
if (cmdName === 'cancel' || cmdName === 'home') {
|
||||
if (cmdName === 'cancel' || cmdName === 'home' || cmdName === 'auto_level') {
|
||||
window.customConfirm("{{ _('Are you sure you want to perform this action?') }}", () => doSendCommand(cmdName));
|
||||
} else {
|
||||
doSendCommand(cmdName);
|
||||
|
||||
56
app/templates/printer/helper_printer.html
Normal file
@@ -0,0 +1,56 @@
|
||||
{% extends 'base.html' %}
|
||||
|
||||
{% block content %}
|
||||
<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">
|
||||
<h1 class="h2">{{ _('Printer Helper') }}</h1>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<!-- Helper Content -->
|
||||
<div class="col-12 markdown-body p-4 bg-white rounded shadow-sm">
|
||||
{% if content_html %}
|
||||
{{ content_html|safe }}
|
||||
{% else %}
|
||||
<p class="text-muted">{{ _('Documentation not available.') }}</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
/* 简单的 Markdown 样式优化 */
|
||||
.markdown-body h1, .markdown-body h2, .markdown-body h3 {
|
||||
margin-top: 24px;
|
||||
margin-bottom: 16px;
|
||||
font-weight: 600;
|
||||
}
|
||||
.markdown-body h1 {
|
||||
font-size: 2em;
|
||||
padding-bottom: .3em;
|
||||
border-bottom: 1px solid #eaecef;
|
||||
}
|
||||
.markdown-body img {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
border-radius: 6px;
|
||||
}
|
||||
.markdown-body pre {
|
||||
background-color: #f6f8fa;
|
||||
padding: 16px;
|
||||
border-radius: 6px;
|
||||
overflow-x: auto;
|
||||
}
|
||||
.markdown-body code {
|
||||
font-family: SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;
|
||||
}
|
||||
.markdown-body table {
|
||||
width: 100%;
|
||||
margin-bottom: 1rem;
|
||||
color: #212529;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
.markdown-body table th, .markdown-body table td {
|
||||
padding: 0.5rem;
|
||||
border: 1px solid #dee2e6;
|
||||
}
|
||||
</style>
|
||||
{% endblock %}
|
||||
@@ -41,7 +41,7 @@
|
||||
<div id="file-{{ f.id }}" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center py-3 transition-style">
|
||||
<div class="me-auto text-truncate" style="max-width: 80%;">
|
||||
<h6 class="mb-1"><i class="bi bi-file-earmark-code text-primary me-2"></i>{{ f.name }}</h6>
|
||||
<small class="text-muted d-block">{{ _('Size:') }} {{ f.size }} bytes, {{ _('Time:') }} {{ f.gcodeAnalysis.estimatedPrintTime if f.gcodeAnalysis else 'Unknown' }}s</small>
|
||||
<small class="text-muted d-block pb-1">{{ _('Size:') }} {{ f.size | filesizeformat }}, {% if f.meta_print_time and f.meta_print_time != '-' %}{{ _('Estimated Time:') }} {{ f.meta_print_time }}{% else %}{{ _('Time:') }} {{ f.gcodeAnalysis.estimatedPrintTime if f.gcodeAnalysis else 'Unknown' }}s{% endif %}</small>
|
||||
</div>
|
||||
<div>
|
||||
<a href="{{ url_for('main.preview_gcode', file_id=f.id) }}" class="btn btn-sm btn-outline-info rounded-pill px-3 shadow-sm me-2"><i class="bi bi-eye me-1"></i>{{ _('Preview') }}</a>
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
<i class="bi bi-info-circle me-1"></i>{{ _('Current State') }}
|
||||
</div>
|
||||
<div class="card-body text-center">
|
||||
<h3 class="display-6 mt-3 text-primary">{{ status.get('state', {}).get('text', 'Unknown') }}</h3>
|
||||
<h3 class="display-6 mt-3 text-primary" id="printer-state-text">{{ status.get('state', {}).get('text', 'Unknown') if status else 'Unknown' }}</h3>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -33,43 +33,42 @@
|
||||
<i class="bi bi-thermometer-half me-1"></i>{{ _('Temperatures') }}
|
||||
</div>
|
||||
<div class="card-body">
|
||||
{% set temps = status.get('temperature', {}) %}
|
||||
{% set temps = status.get('temperature', {}) if status else {} %}
|
||||
|
||||
<h5 class="mb-1"><i class="bi bi-fire text-danger me-2"></i>{{ _('Tool/Nozzle') }}</h5>
|
||||
<h4 class="ms-4 mb-4">
|
||||
{{ temps.get('tool0', {}).get('actual', 0) }} °C
|
||||
<small class="text-muted fs-6">/ {{ temps.get('tool0', {}).get('target', 0) }} °C</small>
|
||||
<span id="tool-actual">{{ temps.get('tool0', {}).get('actual', 0) }}</span> °C
|
||||
<small class="text-muted fs-6">/ <span id="tool-target">{{ temps.get('tool0', {}).get('target', 0) }}</span> °C</small>
|
||||
</h4>
|
||||
|
||||
<h5 class="mb-1"><i class="bi bi-square-fill text-warning me-2"></i>{{ _('Bed') }}</h5>
|
||||
<h4 class="ms-4">
|
||||
{{ temps.get('bed', {}).get('actual', 0) }} °C
|
||||
<small class="text-muted fs-6">/ {{ temps.get('bed', {}).get('target', 0) }} °C</small>
|
||||
<span id="bed-actual">{{ temps.get('bed', {}).get('actual', 0) }}</span> °C
|
||||
<small class="text-muted fs-6">/ <span id="bed-target">{{ temps.get('bed', {}).get('target', 0) }}</span> °C</small>
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if job and job.get('job', {}).get('file', {}).get('name') %}
|
||||
<div class="card shadow-sm mt-4 border-success">
|
||||
<div class="card shadow-sm mt-4 border-success" id="active-job-card" style="display: {% if job and job.get('job', {}).get('file', {}).get('name') %}block{% else %}none{% endif %};">
|
||||
<div class="card-header bg-success text-white fw-bold">
|
||||
<i class="bi bi-play-circle me-1"></i>{{ _('Active Print Job') }}
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<h5>{{ job.get('job', {}).get('file', {}).get('name') }}</h5>
|
||||
<h5 id="job-file-name">{{ job.get('job', {}).get('file', {}).get('display_name') or job.get('job', {}).get('file', {}).get('name') if job else '' }}</h5>
|
||||
|
||||
{% set progress = job.get('progress', {}).get('completion', 0) %}
|
||||
{% set progress = job.get('progress', {}).get('completion', 0) if job else 0 %}
|
||||
{% if progress == None %}{% set progress = 0 %}{% endif %}
|
||||
<div class="progress mt-3 mb-2" style="height: 25px;">
|
||||
<div class="progress-bar progress-bar-striped progress-bar-animated bg-success" role="progressbar" style="width: {{ progress }}%;" aria-valuenow="{{ progress }}" aria-valuemin="0" aria-valuemax="100">
|
||||
{{ "%.1f"|format(progress) }}%
|
||||
<div id="job-progress-bar" class="progress-bar progress-bar-striped progress-bar-animated bg-success" role="progressbar" style="width: {{ progress }}%;" aria-valuenow="{{ progress }}" aria-valuemin="0" aria-valuemax="100">
|
||||
<span id="job-progress-text">{{ "%.1f"|format(progress) }}%</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="d-flex justify-content-between text-muted small mt-2">
|
||||
<span><strong>{{ _('Print Time:') }}</strong> {{ job.get('progress', {}).get('printTime', 0) }}s</span>
|
||||
<span><strong>{{ _('Time Left:') }}</strong> {{ job.get('progress', {}).get('printTimeLeft', 0) }}s</span>
|
||||
<span><strong>{{ _('Print Time:') }}</strong> <span id="job-print-time"></span></span>
|
||||
<span><strong>{{ _('Time Left:') }}</strong> <span id="job-time-left"></span></span>
|
||||
</div>
|
||||
|
||||
<div class="mt-4 gap-2 d-flex">
|
||||
@@ -78,11 +77,65 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% endif %}
|
||||
|
||||
<script>
|
||||
function formatTime(seconds) {
|
||||
if (!seconds && seconds !== 0) return '0{{ _("s") }}';
|
||||
seconds = Math.round(seconds);
|
||||
let d = Math.floor(seconds / 86400);
|
||||
let h = Math.floor((seconds % 86400) / 3600);
|
||||
let m = Math.floor((seconds % 3600) / 60);
|
||||
let s = Math.floor(seconds % 60);
|
||||
|
||||
let res = [];
|
||||
if (d > 0) res.push(d + '{{ _("d") }}');
|
||||
if (h > 0 || d > 0) res.push(h + '{{ _("h") }}');
|
||||
if (m > 0 || h > 0 || d > 0) res.push(m + '{{ _("m") }}');
|
||||
if (s > 0 || res.length === 0) res.push(s + '{{ _("s") }}');
|
||||
return res.join(' ');
|
||||
}
|
||||
|
||||
function updateStatus() {
|
||||
fetch('{{ url_for("printer.api_status_data") }}')
|
||||
.then(res => res.json())
|
||||
.then(data => {
|
||||
if(data.success) {
|
||||
if(data.status && data.status.state) {
|
||||
document.getElementById('printer-state-text').innerText = data.status.state.text || 'Unknown';
|
||||
}
|
||||
if(data.status && data.status.temperature) {
|
||||
const tool = data.status.temperature.tool0 || {};
|
||||
const bed = data.status.temperature.bed || {};
|
||||
document.getElementById('tool-actual').innerText = tool.actual !== undefined ? tool.actual : 0;
|
||||
document.getElementById('tool-target').innerText = tool.target !== undefined ? tool.target : 0;
|
||||
document.getElementById('bed-actual').innerText = bed.actual !== undefined ? bed.actual : 0;
|
||||
document.getElementById('bed-target').innerText = bed.target !== undefined ? bed.target : 0;
|
||||
}
|
||||
const jobCard = document.getElementById('active-job-card');
|
||||
if(data.job && data.job.job && data.job.job.file && data.job.job.file.name) {
|
||||
jobCard.style.display = 'block';
|
||||
document.getElementById('job-file-name').innerText = data.job.job.file.display_name || data.job.job.file.name;
|
||||
let progress = data.job.progress && data.job.progress.completion ? data.job.progress.completion : 0;
|
||||
document.getElementById('job-progress-bar').style.width = progress + '%';
|
||||
document.getElementById('job-progress-bar').setAttribute('aria-valuenow', progress);
|
||||
document.getElementById('job-progress-text').innerText = progress.toFixed(1) + '%';
|
||||
document.getElementById('job-print-time').innerText = formatTime(data.job.progress ? data.job.progress.printTime : 0);
|
||||
document.getElementById('job-time-left').innerText = formatTime(data.job.progress ? data.job.progress.printTimeLeft : 0);
|
||||
} else {
|
||||
jobCard.style.display = 'none';
|
||||
}
|
||||
}
|
||||
})
|
||||
.catch(err => console.error("Error fetching status:", err));
|
||||
}
|
||||
{% if not error %}
|
||||
// Run once immediately to populate initial data consistently
|
||||
updateStatus();
|
||||
setInterval(updateStatus, 1000);
|
||||
{% endif %}
|
||||
|
||||
function sendCmd(cmd) {
|
||||
if(cmd === 'cancel') {
|
||||
window.customConfirm("{{ _('Are you sure you want to cancel the print?') }}", () => doSendCmd(cmd));
|
||||
@@ -99,12 +152,11 @@ function doSendCmd(cmd) {
|
||||
.then(res => res.json())
|
||||
.then(data => {
|
||||
if(data.success) {
|
||||
window.location.reload();
|
||||
updateStatus();
|
||||
} else {
|
||||
window.customAlert("Error: " + data.error);
|
||||
}
|
||||
});
|
||||
}
|
||||
setTimeout(() => { if (!window.pauseRefresh) window.location.reload(); }, 15000);
|
||||
</script>
|
||||
{% endblock %}
|
||||
134
app/templates/slice/account.html
Normal file
@@ -0,0 +1,134 @@
|
||||
{% extends 'base.html' %}
|
||||
|
||||
{% block content %}
|
||||
<div class="row g-4 mt-1">
|
||||
<div class="col-12 d-flex justify-content-between align-items-center">
|
||||
<h4 class="mb-0 fw-bold"><i class="bi bi-person-badge me-2"></i>{{ _('Account Management') }}</h4>
|
||||
</div>
|
||||
|
||||
<!-- Password Change Section -->
|
||||
<div class="col-lg-5">
|
||||
<div class="card shadow-sm border-0 h-100">
|
||||
<div class="card-header bg-white pt-3 pb-2 border-bottom-0">
|
||||
<h5 class="card-title fw-bold text-primary mb-0"><i class="bi bi-shield-lock me-2"></i>{{ _('Change Password') }}</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<form action="{{ url_for('main.account') }}" method="POST">
|
||||
<input type="hidden" name="action" value="change_password">
|
||||
<div class="mb-3">
|
||||
<label class="form-label text-muted small fw-bold">{{ _('Current Password') }}</label>
|
||||
<input type="password" name="current_password" class="form-control" required>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label class="form-label text-muted small fw-bold">{{ _('New Password') }}</label>
|
||||
<input type="password" name="new_password" class="form-control" required minlength="6">
|
||||
</div>
|
||||
<div class="mb-4">
|
||||
<label class="form-label text-muted small fw-bold">{{ _('Confirm New Password') }}</label>
|
||||
<input type="password" name="confirm_password" class="form-control" required minlength="6">
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary w-100 fw-bold rounded-pill"><i class="bi bi-check-circle me-2"></i>{{ _('Update Password') }}</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Active Sessions Section -->
|
||||
<div class="col-lg-7">
|
||||
<div class="card shadow-sm border-0 h-100">
|
||||
<div class="card-header bg-white pt-3 pb-2 border-bottom-0 d-flex justify-content-between align-items-center">
|
||||
<h5 class="card-title fw-bold text-success mb-0"><i class="bi bi-laptop me-2"></i>{{ _('Active Sessions') }}</h5>
|
||||
<span class="badge bg-success rounded-pill">{{ sessions|length }}</span>
|
||||
</div>
|
||||
<div class="card-body p-0">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-hover table-borderless align-middle mb-0">
|
||||
<thead class="table-light text-muted small">
|
||||
<tr>
|
||||
<th class="ps-4 fw-normal">{{ _('Device') }}</th>
|
||||
<th class="fw-normal">{{ _('IP Address') }}</th>
|
||||
<th class="fw-normal">{{ _('Last Active') }}</th>
|
||||
<th class="text-end pe-4 fw-normal">{{ _('Action') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for s in sessions %}
|
||||
<tr class="{% if s.session_token == current_token %}bg-light{% endif %}">
|
||||
<td class="ps-4">
|
||||
<div class="d-flex align-items-center">
|
||||
<i class="bi bi-display me-2 text-secondary fs-5"></i>
|
||||
<div>
|
||||
{% set device_name = _('Unknown Device') %}
|
||||
{% if s.user_agent %}
|
||||
{% set ua = s.user_agent|lower %}
|
||||
{% if 'windows' in ua %}
|
||||
{% set device_name = 'Windows' %}
|
||||
{% elif 'android' in ua %}
|
||||
{% set device_name = 'Android' %}
|
||||
{% elif 'iphone' in ua or 'ipad' in ua %}
|
||||
{% set device_name = 'iOS' %}
|
||||
{% elif 'mac' in ua or 'darwin' in ua %}
|
||||
{% set device_name = 'macOS' %}
|
||||
{% elif 'linux' in ua %}
|
||||
{% set device_name = 'Linux' %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
<div class="text-truncate" style="max-width: 150px; cursor: help;" title="{{ s.user_agent or _('Unknown Device') }}">{{ device_name }}</div>
|
||||
{% if s.session_token == current_token %}
|
||||
<span class="badge bg-primary mt-1">{{ _('This Device') }}</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<span class="badge bg-secondary font-monospace">{{ s.ip_address }}</span>
|
||||
</td>
|
||||
<td>
|
||||
<small class="text-muted local-time" data-utc="{{ s.last_active.isoformat() }}Z">{{ s.last_active.strftime('%Y-%m-%d %H:%M:%S') }}</small>
|
||||
</td>
|
||||
<td class="text-end pe-4">
|
||||
{% if s.session_token != current_token %}
|
||||
<form action="{{ url_for('main.account') }}" method="POST" class="d-inline" id="form-{{ s.id }}">
|
||||
<input type="hidden" name="action" value="terminate_session">
|
||||
<input type="hidden" name="session_id" value="{{ s.id }}">
|
||||
<input type="hidden" name="session_token" value="{{ s.session_token }}">
|
||||
<button type="button" class="btn btn-sm btn-outline-danger px-3 rounded-pill" onclick="customConfirm('{{ _('Are you sure you want to terminate this session?') }}', () => document.getElementById('form-{{ s.id }}').submit());"><i class="bi bi-x-octagon me-1"></i>{{ _('Logout') }}</button>
|
||||
</form>
|
||||
{% else %}
|
||||
<button class="btn btn-sm btn-outline-secondary px-3 rounded-pill" onclick="customConfirm('{{ _('Logout from this device?') }}', () => window.location.href='{{ url_for('auth.logout') }}');"><i class="bi bi-box-arrow-right me-1"></i>{{ _('Logout') }}</button>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% else %}
|
||||
<tr>
|
||||
<td colspan="4" class="text-center py-4 text-muted">{{ _('No active sessions found.') }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", function() {
|
||||
document.querySelectorAll('.local-time').forEach(function(el) {
|
||||
const utcDate = new Date(el.getAttribute('data-utc'));
|
||||
if (!isNaN(utcDate)) {
|
||||
|
||||
const pad = (n) => n.toString().padStart(2, '0');
|
||||
const yyyy = utcDate.getFullYear();
|
||||
const MM = pad(utcDate.getMonth() + 1);
|
||||
const dd = pad(utcDate.getDate());
|
||||
const HH = pad(utcDate.getHours());
|
||||
const mm = pad(utcDate.getMinutes());
|
||||
const ss = pad(utcDate.getSeconds());
|
||||
|
||||
el.textContent = `${yyyy}-${MM}-${dd} ${HH}:${mm}:${ss}`;
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
@@ -1,9 +1,16 @@
|
||||
{% extends 'base.html' %}
|
||||
|
||||
{% block content %}
|
||||
<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">
|
||||
<h1 class="h2"><i class="bi bi-eye text-primary me-2"></i>{{ _('GCode Preview') }}: {{ file.original_filename }}</h1>
|
||||
<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-2 border-bottom">
|
||||
<div>
|
||||
<h1 class="h2 mb-1"><i class="bi bi-eye text-primary me-2"></i>{{ _('GCode Preview') }}: {{ file.original_filename }}</h1>
|
||||
<div class="text-muted small">
|
||||
<span class="me-3"><i class="bi bi-clock-history me-1"></i>{{ _('Estimated Time:') }} <span class="fw-bold">{{ time_info }}</span></span>
|
||||
<span class="me-3"><i class="bi bi-layers me-1"></i>{{ _('First Layer Time:') }} <span class="fw-bold">{{ layer1_time }}</span></span>
|
||||
<span><i class="bi bi-rulers me-1"></i>{{ _('Filament Used [mm]:') }} <span class="fw-bold">{{ filament_used }}</span></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-2 mt-md-0">
|
||||
<a href="{{ url_for('printer.prepare') }}#file-{{ file.id }}" class="btn btn-warning btn-sm rounded shadow-sm fw-bold"><i class="bi bi-printer"></i> {{ _('Go to Print') }}</a>
|
||||
<a href="{{ url_for('main.download_gcode', file_id=file.id) }}" class="btn btn-primary btn-sm rounded shadow-sm ms-2"><i class="bi bi-download"></i> {{ _('Download GCode') }}</a>
|
||||
<a href="{{ url_for('main.files') }}" class="btn btn-outline-secondary btn-sm rounded ms-2 shadow-sm"><i class="bi bi-arrow-left"></i> {{ _('Back') }}</a>
|
||||
|
||||
56
app/templates/slice/helper_slice.html
Normal file
@@ -0,0 +1,56 @@
|
||||
{% extends 'base.html' %}
|
||||
|
||||
{% block content %}
|
||||
<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">
|
||||
<h1 class="h2">{{ _('Slice Helper') }}</h1>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<!-- Helper Content -->
|
||||
<div class="col-12 markdown-body p-4 bg-white rounded shadow-sm">
|
||||
{% if content_html %}
|
||||
{{ content_html|safe }}
|
||||
{% else %}
|
||||
<p class="text-muted">{{ _('Documentation not available.') }}</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
/* 简单的 Markdown 样式优化 */
|
||||
.markdown-body h1, .markdown-body h2, .markdown-body h3 {
|
||||
margin-top: 24px;
|
||||
margin-bottom: 16px;
|
||||
font-weight: 600;
|
||||
}
|
||||
.markdown-body h1 {
|
||||
font-size: 2em;
|
||||
padding-bottom: .3em;
|
||||
border-bottom: 1px solid #eaecef;
|
||||
}
|
||||
.markdown-body img {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
border-radius: 6px;
|
||||
}
|
||||
.markdown-body pre {
|
||||
background-color: #f6f8fa;
|
||||
padding: 16px;
|
||||
border-radius: 6px;
|
||||
overflow-x: auto;
|
||||
}
|
||||
.markdown-body code {
|
||||
font-family: SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;
|
||||
}
|
||||
.markdown-body table {
|
||||
width: 100%;
|
||||
margin-bottom: 1rem;
|
||||
color: #212529;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
.markdown-body table th, .markdown-body table td {
|
||||
padding: 0.5rem;
|
||||
border: 1px solid #dee2e6;
|
||||
}
|
||||
</style>
|
||||
{% endblock %}
|
||||
@@ -131,7 +131,7 @@
|
||||
</div> <!-- End of accordion wrapper -->
|
||||
|
||||
<div class="mt-auto pt-3 border-top d-flex flex-column gap-2 mb-1">
|
||||
<button class="btn btn-outline-danger w-100" onclick="clearPlate()"><i class="bi bi-trash me-2"></i>{{ _('Clear Board') }}</button>
|
||||
<button class="btn btn-outline-danger w-100" onclick="customConfirm('{{ _('Are you sure you want to clear the board?') }}', clearPlate)"><i class="bi bi-trash me-2"></i>{{ _('Clear Board') }}</button>
|
||||
<button class="btn btn-primary w-100 py-2 fs-5 shadow-sm" onclick="mergeAndSlice()" id="btn-merge"><i class="bi bi-gear-fill me-2" id="merge-icon"></i><span id="merge-text">{{ _('Merge & Slice') }}</span></button>
|
||||
</div>
|
||||
|
||||
|
||||
88
app/utils/api_handle.py
Normal file
@@ -0,0 +1,88 @@
|
||||
import functools
|
||||
from flask import Blueprint, request, jsonify
|
||||
from app.models import ApiKey, PrintFile, SystemConfig
|
||||
from app.utils.octoprint_client import OctoPrintClient
|
||||
|
||||
api_bp = Blueprint('api_handle', __name__, url_prefix='/api/v1')
|
||||
|
||||
def get_octo_client():
|
||||
url = SystemConfig.query.filter_by(key='octoprint_url').first()
|
||||
apikey = SystemConfig.query.filter_by(key='octoprint_apikey').first()
|
||||
if url and url.value and apikey and apikey.value:
|
||||
return OctoPrintClient(url.value, apikey.value)
|
||||
return None
|
||||
|
||||
def _enrich_job_data(job_data):
|
||||
if job_data and job_data.get('job', {}).get('file', {}).get('name'):
|
||||
internal_name = job_data['job']['file']['name']
|
||||
internal_stl_name = str(internal_name)[:-5]+"stl"
|
||||
pf = PrintFile.query.filter_by(filename=internal_stl_name).first()
|
||||
if pf:
|
||||
job_data['job']['file']['display_name'] = pf.original_filename
|
||||
else:
|
||||
job_data['job']['file']['display_name'] = internal_name
|
||||
return job_data
|
||||
|
||||
def require_api_key(f):
|
||||
@functools.wraps(f)
|
||||
def decorated(*args, **kwargs):
|
||||
api_key_header = request.headers.get('X-Api-Key')
|
||||
if not api_key_header:
|
||||
return jsonify({'error': 'Missing API Key in headers (X-Api-Key)'}), 401
|
||||
|
||||
key_record = ApiKey.query.filter_by(key=api_key_header).first()
|
||||
if not key_record:
|
||||
return jsonify({'error': 'Invalid API Key'}), 401
|
||||
|
||||
return f(*args, **kwargs)
|
||||
return decorated
|
||||
|
||||
@api_bp.route('/status', methods=['GET'])
|
||||
@require_api_key
|
||||
def get_status():
|
||||
client = get_octo_client()
|
||||
if not client:
|
||||
return jsonify({'error': 'Printer not configured'}), 503
|
||||
try:
|
||||
status_data = client.get_printer_status()
|
||||
job_data = client.get_job_info()
|
||||
job_data = _enrich_job_data(job_data)
|
||||
return jsonify({'status': status_data, 'job': job_data})
|
||||
except Exception as e:
|
||||
return jsonify({'error': str(e)}), 500
|
||||
|
||||
@api_bp.route('/octoprint_client', methods=['POST'])
|
||||
@require_api_key
|
||||
def invoke_octoprint_client():
|
||||
"""
|
||||
Expects JSON payload like:
|
||||
{
|
||||
"method": "pause_print",
|
||||
"kwargs": {"action": "pause"}
|
||||
}
|
||||
"""
|
||||
client = get_octo_client()
|
||||
if not client:
|
||||
return jsonify({'error': 'Printer not configured'}), 503
|
||||
|
||||
data = request.get_json()
|
||||
if not data or 'method' not in data:
|
||||
return jsonify({'error': 'Missing method in JSON payload'}), 400
|
||||
|
||||
method_name = data['method']
|
||||
kwargs = data.get('kwargs', {})
|
||||
args = data.get('args', [])
|
||||
|
||||
if not hasattr(client, method_name):
|
||||
return jsonify({'error': f'Method {method_name} not found on OctoPrintClient'}), 400
|
||||
|
||||
func = getattr(client, method_name)
|
||||
if not callable(func) or method_name.startswith('_'):
|
||||
return jsonify({'error': f'Method {method_name} is not allowed'}), 403
|
||||
|
||||
try:
|
||||
result = func(*args, **kwargs)
|
||||
return jsonify({'success': True, 'result': result})
|
||||
except Exception as e:
|
||||
return jsonify({'error': str(e)}), 500
|
||||
|
||||
@@ -143,7 +143,6 @@ class ConfParse:
|
||||
if evaluated != field_val and not isinstance(evaluated, type):
|
||||
if val_dict.get("type") == "str" and not isinstance(evaluated, str):
|
||||
if isinstance(evaluated, (list, dict)):
|
||||
import json
|
||||
val_dict[field] = json.dumps(evaluated).replace(" ", "")
|
||||
else:
|
||||
val_dict[field] = str(evaluated)
|
||||
|
||||
32
app/utils/gcode_parser.py
Normal file
@@ -0,0 +1,32 @@
|
||||
import os
|
||||
|
||||
def get_gcode_metadata(filepath):
|
||||
metadata = {
|
||||
'print_time': '-',
|
||||
'first_layer_time': '-',
|
||||
'filament_used': '-'
|
||||
}
|
||||
if not os.path.exists(filepath):
|
||||
return metadata
|
||||
|
||||
try:
|
||||
# Read the last few KB to find estimated time and filament used
|
||||
with open(filepath, 'rb') as f:
|
||||
f.seek(0, 2)
|
||||
file_size = f.tell()
|
||||
chunk_size = min(65536, file_size) # read last 64KB
|
||||
f.seek(file_size - chunk_size)
|
||||
chunk = f.read().decode('utf-8', errors='ignore')
|
||||
|
||||
lines = chunk.splitlines()
|
||||
for line in reversed(lines):
|
||||
if line.startswith('; estimated printing time (normal mode) ='):
|
||||
metadata['print_time'] = line.split('=')[1].strip()
|
||||
elif line.startswith('; estimated first layer printing time (normal mode) ='):
|
||||
metadata['first_layer_time'] = line.split('=')[1].strip()
|
||||
elif line.startswith('; filament used [mm] ='):
|
||||
metadata['filament_used'] = line.split('=')[1].strip()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
return metadata
|
||||
@@ -110,6 +110,10 @@ class OctoPrintClient:
|
||||
"""Get information about the current print job and progress."""
|
||||
return self._request("GET", "/api/job")
|
||||
|
||||
def get_printer_err_log(self):
|
||||
"""Fetch the printer error log, if available."""
|
||||
return self._request("GET", "/api/printer/error")
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# Printer Control
|
||||
# -------------------------------------------------------------------------
|
||||
@@ -141,6 +145,9 @@ class OctoPrintClient:
|
||||
"""Convenience method to home the printer axes."""
|
||||
return self._request("POST", "/api/printer/printhead", json={"command": "home", "axes": axes})
|
||||
|
||||
def auto_leveling(self):
|
||||
return self.send_gcode("G29")
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# Webcam / Video
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
@@ -8,7 +8,7 @@ def get_all_engines():
|
||||
PrusaSlicerEngine()
|
||||
]
|
||||
|
||||
def get_slicer_engine(engine_name="cura"):
|
||||
def get_slicer_engine(engine_name="prusa", print_config_folder=None, config_slice_bin_path=None):
|
||||
"""
|
||||
Factory function to retrieve the requested slicing engine instance.
|
||||
Valid names: 'cura', 'prusa_slicer'
|
||||
@@ -16,9 +16,9 @@ def get_slicer_engine(engine_name="cura"):
|
||||
engine_name = engine_name.lower().strip()
|
||||
|
||||
if engine_name in ['cura', 'cura_engine', 'curaengine']:
|
||||
return CuraEngine()
|
||||
return CuraEngine(print_config_folder)
|
||||
elif engine_name in ['prusa', 'prusa_slicer', 'prusaslicer']:
|
||||
return PrusaSlicerEngine()
|
||||
return PrusaSlicerEngine(print_config_folder, config_slice_bin_path)
|
||||
else:
|
||||
# Default fallback
|
||||
return CuraEngine()
|
||||
return PrusaSlicerEngine(print_config_folder, config_slice_bin_path)
|
||||
|
||||
@@ -4,12 +4,14 @@ import json
|
||||
import uuid
|
||||
import configparser
|
||||
from app.utils.conf_parse import ConfParse
|
||||
from app.models import SystemConfig
|
||||
|
||||
class CuraEngine:
|
||||
def __init__(self):
|
||||
def __init__(self, print_config_folder=None):
|
||||
self.name = "cura"
|
||||
self.display_name = "UltiMaker Cura"
|
||||
self.is_available = self._check_available()
|
||||
self.print_config_folder = os.path.join(print_config_folder, "cura_engine") if print_config_folder else None
|
||||
|
||||
def _check_available(self):
|
||||
try:
|
||||
@@ -18,16 +20,7 @@ class CuraEngine:
|
||||
return result.returncode == 0 or b"Usage:" in result.stdout or b"Usage:" in result.stderr
|
||||
except (FileNotFoundError, OSError):
|
||||
return False
|
||||
self.display_name = "UltiMaker Cura"
|
||||
self.is_available = self._check_available()
|
||||
|
||||
def _check_available(self):
|
||||
try:
|
||||
# check if CuraEngine is available in PATH
|
||||
result = subprocess.run(["CuraEngine", "help"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
return result.returncode == 0 or b"Usage:" in result.stdout or b"Usage:" in result.stderr
|
||||
except (FileNotFoundError, OSError):
|
||||
return False
|
||||
|
||||
def slice(self, app, stl_filepath, gcode_filepath, **kwargs):
|
||||
"""
|
||||
@@ -41,24 +34,27 @@ class CuraEngine:
|
||||
|
||||
tmp_def_path = None
|
||||
try:
|
||||
base_config_path = os.path.abspath(os.path.join(app.root_path, '..', 'print_config'))
|
||||
print_config_path = os.path.join(base_config_path, 'cura_engine')
|
||||
printers_path = os.path.join(print_config_path, 'printers')
|
||||
extruders_path = os.path.join(print_config_path, 'extruders')
|
||||
materials_path = os.path.join(print_config_path, 'materials')
|
||||
presets_path = os.path.join(print_config_path, 'quality')
|
||||
variants_path = os.path.join(print_config_path, 'variants')
|
||||
printers_path = os.path.join(self.print_config_folder, 'printers') if self.print_config_folder else None
|
||||
extruders_path = os.path.join(self.print_config_folder, 'extruders') if self.print_config_folder else None
|
||||
materials_path = os.path.join(self.print_config_folder, 'materials') if self.print_config_folder else None
|
||||
presets_path = os.path.join(self.print_config_folder, 'quality') if self.print_config_folder else None
|
||||
variants_path = os.path.join(self.print_config_folder, 'variants') if self.print_config_folder else None
|
||||
|
||||
env = os.environ.copy()
|
||||
env["CURA_ENGINE_SEARCH_PATH"] = f"{printers_path}:{extruders_path}:{materials_path}:{presets_path}:{variants_path}"
|
||||
|
||||
db_printer = SystemConfig.query.filter_by(key='default_printer').first()
|
||||
p_val = db_printer.value if db_printer and db_printer.value else 'creality_ender3v3se.def.json'
|
||||
if not p_val.endswith('.def.json'): p_val += '.def.json'
|
||||
|
||||
def_files = [
|
||||
os.path.join(printers_path, "fdmprinter.def.json"),
|
||||
os.path.join(printers_path, "fdmextruder.def.json"),
|
||||
os.path.join(printers_path, "creality_base.def.json"),
|
||||
os.path.join(printers_path, "creality_ender3v3se.def.json")
|
||||
os.path.join(printers_path, p_val)
|
||||
]
|
||||
|
||||
|
||||
inst_files_list = []
|
||||
quality_type = None
|
||||
preset_path = None
|
||||
@@ -82,19 +78,19 @@ class CuraEngine:
|
||||
if os.path.exists(m_path): inst_files_list.append(m_path)
|
||||
if variant_type:
|
||||
variant_d = variant_type.split("mm")[0]
|
||||
v_path = os.path.join(variants_path, "creality", f"creality_ender3v3se_{variant_d}.inst.cfg")
|
||||
v_path = os.path.join(variants_path, "creality", f"{p_val.replace('.def.json', '')}_{variant_d}.inst.cfg")
|
||||
if os.path.exists(v_path): inst_files_list.append(v_path)
|
||||
|
||||
if support_pattern == 'tree':
|
||||
t_path = os.path.join(print_config_path, 'supports', 'tree.inst.cfg')
|
||||
if os.path.exists(t_path): inst_files_list.append(t_path)
|
||||
t_path = os.path.join(self.print_config_folder, 'supports', 'tree.inst.cfg') if self.print_config_folder else None
|
||||
if t_path and os.path.exists(t_path): inst_files_list.append(t_path)
|
||||
elif support_pattern and support_pattern != 'false':
|
||||
n_path = os.path.join(print_config_path, 'supports', 'normal.inst.cfg')
|
||||
if os.path.exists(n_path): inst_files_list.append(n_path)
|
||||
n_path = os.path.join(self.print_config_folder, 'supports', 'normal.inst.cfg') if self.print_config_folder else None
|
||||
if n_path and os.path.exists(n_path): inst_files_list.append(n_path)
|
||||
|
||||
if quality_preset and quality_type:
|
||||
g_path = os.path.join(presets_path, 'creality', 'globals', f"{quality_type}.inst.cfg")
|
||||
if os.path.exists(g_path): inst_files_list.append(g_path)
|
||||
g_path = os.path.join(self.print_config_folder, 'creality', 'globals', f"{quality_type}.inst.cfg") if self.print_config_folder else None
|
||||
if g_path and os.path.exists(g_path): inst_files_list.append(g_path)
|
||||
|
||||
if quality_preset and preset_path and os.path.exists(preset_path):
|
||||
inst_files_list.append(preset_path)
|
||||
@@ -192,10 +188,10 @@ class CuraEngine:
|
||||
except Exception as e:
|
||||
app.logger.error(f"Failed to delete temp JSON config {tmp_def_path}: {e}")
|
||||
|
||||
def get_quality_presets(self, app):
|
||||
def get_quality_presets(self):
|
||||
try:
|
||||
path = os.path.join(app.root_path, '..', 'print_config', 'cura_engine', 'quality', 'creality', 'presets')
|
||||
if not os.path.exists(path): return []
|
||||
path = os.path.join(self.print_config_folder, 'quality', 'creality', 'presets') if self.print_config_folder else None
|
||||
if not path or not os.path.exists(path): return []
|
||||
files = [f for f in os.listdir(path) if f.endswith('.inst.cfg')]
|
||||
presets = []
|
||||
for f in files:
|
||||
@@ -205,7 +201,7 @@ class CuraEngine:
|
||||
except:
|
||||
return []
|
||||
|
||||
def get_support_patterns(self, app):
|
||||
def get_support_patterns(self):
|
||||
return [
|
||||
{'id': 'tree', 'name': 'Tree'},
|
||||
{'id': 'lines', 'name': 'Lines'},
|
||||
@@ -219,10 +215,10 @@ class CuraEngine:
|
||||
{'id': 'octagon', 'name': 'Octagon'}
|
||||
]
|
||||
|
||||
def get_materials(self, app):
|
||||
def get_materials(self):
|
||||
try:
|
||||
path = os.path.join(app.root_path, '..', 'print_config', 'cura_engine', 'materials')
|
||||
if not os.path.exists(path): return []
|
||||
path = os.path.join(self.print_config_folder, 'materials') if self.print_config_folder else None
|
||||
if not path or not os.path.exists(path): return []
|
||||
files = [f for f in os.listdir(path) if f.endswith('.inst.cfg')]
|
||||
materials = []
|
||||
for f in files:
|
||||
@@ -231,3 +227,31 @@ class CuraEngine:
|
||||
return materials
|
||||
except:
|
||||
return []
|
||||
|
||||
def get_bed_dimensions(self):
|
||||
try:
|
||||
db_printer = SystemConfig.query.filter_by(key='default_printer').first()
|
||||
p_val = db_printer.value if db_printer and db_printer.value else 'creality_ender3v3se.def.json'
|
||||
if not p_val.endswith('.def.json'): p_val += '.def.json'
|
||||
path = os.path.join(self.print_config_folder, 'printers', p_val)
|
||||
with open(path, 'r', encoding='utf-8') as f:
|
||||
data = json.load(f)
|
||||
w = data['overrides']['machine_width']['default_value']
|
||||
h = data['overrides']['machine_depth']['default_value']
|
||||
hd = data['overrides']['machine_height']['default_value']
|
||||
return w, h, hd
|
||||
except:
|
||||
pass
|
||||
return 220, 220, 250
|
||||
def get_all_printers(self):
|
||||
try:
|
||||
path = os.path.join(self.print_config_folder, 'printers') if self.print_config_folder else None
|
||||
if not path or not os.path.exists(path): return []
|
||||
files = [f for f in os.listdir(path) if f.endswith('.inst.cfg')]
|
||||
printers = []
|
||||
for f in files:
|
||||
printers.append({'id': f, 'name': f.replace('..def.json', '').replace('generic_', 'Generic ').replace('_', ' ').title()})
|
||||
printers.sort(key=lambda x: x['name'])
|
||||
return printers
|
||||
except:
|
||||
return []
|
||||
@@ -2,18 +2,27 @@ import os
|
||||
import subprocess
|
||||
import configparser
|
||||
import uuid
|
||||
import shutil
|
||||
from app.models import SystemConfig
|
||||
|
||||
|
||||
class PrusaSlicerEngine:
|
||||
def __init__(self):
|
||||
def __init__(self, print_config_folder=None, config_slice_bin_path=None):
|
||||
self.name = "prusa_slicer"
|
||||
self.display_name = "PrusaSlicer"
|
||||
self.config_slice_bin_path = config_slice_bin_path
|
||||
self.is_available = self._check_available()
|
||||
self.print_config_folder = os.path.join(print_config_folder, 'prusa_slicer') if print_config_folder else None
|
||||
|
||||
def _check_available(self):
|
||||
try:
|
||||
result = subprocess.run(["prusa-slicer", "--help"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
# Prefer explicit environment variable, then PATH, then a bundled AppImage under the repo
|
||||
prusa_bin = self.config_slice_bin_path or shutil.which('prusa-slicer') or shutil.which('prusa-slicer.exe')
|
||||
if not prusa_bin:
|
||||
return False
|
||||
result = subprocess.run([prusa_bin, "--help"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
return b"Usage:" in result.stdout or b"Slic3r" in result.stdout or b"PrusaSlicer" in result.stdout or result.returncode == 0
|
||||
except (FileNotFoundError, OSError):
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
def add_ini_keys(self, config_path, target_section, all_configs):
|
||||
@@ -29,12 +38,10 @@ class PrusaSlicerEngine:
|
||||
Slices via prusa-slicer CLI mapping standard kwargs to PRUSA parameters where possible.
|
||||
"""
|
||||
try:
|
||||
prusa_bin = self.config_slice_bin_path or shutil.which('prusa-slicer') or shutil.which('prusa-slicer.exe')
|
||||
|
||||
# Base command
|
||||
command = [
|
||||
"/home/lhye200/AIO_3D_Print_Exp/prusaslicer/prusa-slicer",
|
||||
"-g", stl_filepath,
|
||||
"--output", gcode_filepath
|
||||
]
|
||||
command = [prusa_bin, '-g', stl_filepath, '--output', gcode_filepath]
|
||||
|
||||
# Map quality, infill, supports to PrusaSlicer CLI arguments.
|
||||
# Example defaults, normally these would load from an .ini or be dynamically matched.
|
||||
@@ -46,19 +53,21 @@ class PrusaSlicerEngine:
|
||||
|
||||
# print(support_pattern)
|
||||
all_configs = {}
|
||||
|
||||
printer_ini = os.path.join(app.root_path, '..', 'print_config', 'prusa_slicer', 'printers', 'Ender3_V3_SE.ini')
|
||||
if os.path.exists(printer_ini):
|
||||
db_printer = SystemConfig.query.filter_by(key='default_printer').first()
|
||||
p_val = db_printer.value if db_printer and db_printer.value else 'Ender3_V3_SE'
|
||||
if not p_val.endswith('.ini'): p_val += '.ini'
|
||||
printer_ini = os.path.join(self.print_config_folder, 'printers', p_val) if self.print_config_folder else None
|
||||
if printer_ini and os.path.exists(printer_ini):
|
||||
self.add_ini_keys(printer_ini, 'settings', all_configs)
|
||||
|
||||
if quality_preset:
|
||||
q_ini = os.path.join(app.root_path, '..', 'print_config', 'prusa_slicer', 'quality', f"{quality_preset}.ini")
|
||||
if os.path.exists(q_ini):
|
||||
q_ini = os.path.join(self.print_config_folder, 'quality', f"{quality_preset}.ini") if self.print_config_folder else None
|
||||
if q_ini and os.path.exists(q_ini):
|
||||
self.add_ini_keys(q_ini, 'settings', all_configs)
|
||||
|
||||
if material_preset:
|
||||
m_ini = os.path.join(app.root_path, '..', 'print_config', 'prusa_slicer', 'materials', f"{material_preset}.ini")
|
||||
if os.path.exists(m_ini):
|
||||
m_ini = os.path.join(self.print_config_folder, 'materials', f"{material_preset}.ini") if self.print_config_folder else None
|
||||
if m_ini and os.path.exists(m_ini):
|
||||
self.add_ini_keys(m_ini, 'settings', all_configs)
|
||||
|
||||
if infill_density is not None:
|
||||
@@ -69,20 +78,19 @@ class PrusaSlicerEngine:
|
||||
if support_enable == 'buildplate':
|
||||
command.append("--support-material-buildplate-only")
|
||||
# PrusaSlicer equivalent for tree supports => organic
|
||||
support_pattern_ini = os.path.join(app.root_path, '..', 'print_config', 'prusa_slicer', 'supports', f'{support_pattern}.ini')
|
||||
if os.path.exists(support_pattern_ini):
|
||||
support_pattern_ini = os.path.join(self.print_config_folder, 'supports', f'{support_pattern}.ini') if self.print_config_folder else None
|
||||
if support_pattern_ini and os.path.exists(support_pattern_ini):
|
||||
self.add_ini_keys(support_pattern_ini, 'settings', all_configs)
|
||||
else:
|
||||
# Load the default no_support.ini if no support is enabled
|
||||
no_support_ini = os.path.join(app.root_path, '..', 'print_config', 'prusa_slicer', 'supports', 'no_support.ini')
|
||||
if os.path.exists(no_support_ini):
|
||||
no_support_ini = os.path.join(self.print_config_folder, 'supports', 'no_support.ini') if self.print_config_folder else None
|
||||
if no_support_ini and os.path.exists(no_support_ini):
|
||||
self.add_ini_keys(no_support_ini, 'settings', all_configs)
|
||||
else:
|
||||
all_configs['support_material'] = '0'
|
||||
|
||||
tmp_ini_filename = f"tmp_{uuid.uuid4().hex}.ini"
|
||||
tmp_ini_path = os.path.join(app.config['UPLOAD_FOLDER'], tmp_ini_filename)
|
||||
print(f'****tmp_ini_path: {tmp_ini_path}')
|
||||
with open(tmp_ini_path, 'w') as f:
|
||||
for key, value in all_configs.items():
|
||||
f.write(f"{key} = {value}\n")
|
||||
@@ -108,11 +116,11 @@ class PrusaSlicerEngine:
|
||||
app.logger.error(f"PrusaSlicer Exception: {e}")
|
||||
return False, str(e)
|
||||
|
||||
def get_quality_presets(self, app):
|
||||
all_files = [f for f in os.listdir(os.path.join(app.root_path, '..', 'print_config', 'prusa_slicer',"quality")) if f.endswith('.ini')]
|
||||
def get_quality_presets(self):
|
||||
all_files = [f for f in os.listdir(os.path.join(self.print_config_folder, "quality")) if f.endswith('.ini')] if self.print_config_folder else []
|
||||
quality_presets = []
|
||||
for file in all_files:
|
||||
with open(os.path.join(app.root_path, '..', 'print_config', 'prusa_slicer', "quality", file), 'r') as f:
|
||||
with open(os.path.join(self.print_config_folder, "quality", file), 'r') as f:
|
||||
config = configparser.ConfigParser()
|
||||
config.read_file(f)
|
||||
if 'metadata' in config:
|
||||
@@ -122,11 +130,11 @@ class PrusaSlicerEngine:
|
||||
})
|
||||
return quality_presets
|
||||
|
||||
def get_support_patterns(self, app):
|
||||
all_files = [f for f in os.listdir(os.path.join(app.root_path, '..', 'print_config', 'prusa_slicer',"supports")) if f.endswith('.ini')]
|
||||
def get_support_patterns(self):
|
||||
all_files = [f for f in os.listdir(os.path.join(self.print_config_folder,"supports")) if f.endswith('.ini')] if self.print_config_folder else []
|
||||
support_presets = []
|
||||
for file in all_files:
|
||||
with open(os.path.join(app.root_path, '..', 'print_config', 'prusa_slicer', "supports", file), 'r') as f:
|
||||
with open(os.path.join(self.print_config_folder, "supports", file), 'r') as f:
|
||||
config = configparser.ConfigParser()
|
||||
config.read_file(f)
|
||||
if 'metadata' in config:
|
||||
@@ -136,15 +144,52 @@ class PrusaSlicerEngine:
|
||||
})
|
||||
return support_presets
|
||||
|
||||
def get_materials(self, app):
|
||||
def get_materials(self):
|
||||
all_files = [f for f in os.listdir(os.path.join(self.print_config_folder, "materials")) if f.endswith('.ini')] if self.print_config_folder else []
|
||||
materials = []
|
||||
for file in all_files:
|
||||
with open(os.path.join(self.print_config_folder, "materials", file), 'r') as f:
|
||||
config = configparser.ConfigParser()
|
||||
config.read_file(f)
|
||||
if 'metadata' in config:
|
||||
materials.append({
|
||||
'id': file.replace('.ini', ''),
|
||||
'name': config['metadata'].get('show_name', file.replace('.ini', '').replace('_', ' '))
|
||||
})
|
||||
return materials
|
||||
|
||||
|
||||
def get_bed_dimensions(self):
|
||||
try:
|
||||
path = os.path.join(app.root_path, '..', 'print_config', 'prusa_slicer', 'materials')
|
||||
if not os.path.exists(path): return []
|
||||
files = [f for f in os.listdir(path) if f.endswith('.ini')]
|
||||
materials = []
|
||||
for f in files:
|
||||
materials.append({'id': f.replace('.ini', ''), 'name': f.replace('.ini', '').replace('_', ' ')})
|
||||
materials.sort(key=lambda x: x['name'])
|
||||
return materials
|
||||
db_printer = SystemConfig.query.filter_by(key='default_printer').first()
|
||||
p_val = db_printer.value if db_printer and db_printer.value else 'Ender3_V3_SE.ini'
|
||||
if not p_val.endswith('.ini'): p_val += '.ini'
|
||||
path = os.path.join(self.print_config_folder, 'printers', p_val)
|
||||
config = configparser.ConfigParser()
|
||||
config.read(path)
|
||||
if 'settings' in config and 'bed_shape' in config['settings']:
|
||||
# format is usually like 0x0,220x0,220x220,0x220
|
||||
coords = config['settings']['bed_shape'].split(',')
|
||||
max_x = max([float(c.split('x')[0]) for c in coords])
|
||||
max_y = max([float(c.split('x')[1]) for c in coords])
|
||||
# height
|
||||
h = 250
|
||||
if 'max_print_height' in config['settings']:
|
||||
h = float(config['settings']['max_print_height'])
|
||||
return max_x, max_y, h
|
||||
except:
|
||||
return []
|
||||
pass
|
||||
return 220, 220, 250
|
||||
def get_all_printers(self):
|
||||
all_files = [f for f in os.listdir(os.path.join(self.print_config_folder, "printers")) if f.endswith('.ini')] if self.print_config_folder else []
|
||||
printers = []
|
||||
for file in all_files:
|
||||
with open(os.path.join(self.print_config_folder, "printers", file), 'r') as f:
|
||||
config = configparser.ConfigParser()
|
||||
config.read_file(f)
|
||||
if 'metadata' in config:
|
||||
printers.append({
|
||||
'id': file.replace('.ini', ''),
|
||||
'name': config['metadata'].get('show_name', file.replace('.ini', '').replace('_', ' '))
|
||||
})
|
||||
return printers
|
||||
|
||||
@@ -1,15 +1,17 @@
|
||||
from huey import SqliteHuey
|
||||
import subprocess
|
||||
import os
|
||||
from app.models import db, PrintFile, SystemConfig
|
||||
from app.utils.conf_parse import ConfParse
|
||||
import json
|
||||
import uuid
|
||||
import configparser
|
||||
from huey import SqliteHuey
|
||||
from app import create_app
|
||||
from app.models import db, PrintFile, SystemConfig
|
||||
from app.utils.conf_parse import ConfParse
|
||||
from app.utils.slice_engines import get_slicer_engine
|
||||
from app.utils.stl_merger import merge_stls
|
||||
from app.utils.stl_simplifier import simplify_stl
|
||||
|
||||
|
||||
import os
|
||||
|
||||
# Ensure instance directory exists
|
||||
instance_dir = os.path.join(os.path.dirname(os.path.dirname(__file__)), '..', 'instance')
|
||||
os.makedirs(instance_dir, exist_ok=True)
|
||||
@@ -29,7 +31,6 @@ def get_gcode_dir(app):
|
||||
def slice_stl_task(file_id, stl_filepath, quality_preset=None, material_preset=None, infill_density=None, support_enable=None, support_pattern=None, delete_stl=False):
|
||||
# This is run by the Huey worker
|
||||
# We need to create an app context to interact with the database
|
||||
from app import create_app
|
||||
app = create_app()
|
||||
with app.app_context():
|
||||
print_file = PrintFile.query.get(file_id)
|
||||
@@ -45,16 +46,14 @@ def slice_stl_task(file_id, stl_filepath, quality_preset=None, material_preset=N
|
||||
# Remove DB session to avoid locking the sqlite db during long slicing operations
|
||||
db.session.remove()
|
||||
|
||||
from app.utils.slice_engines import get_slicer_engine
|
||||
|
||||
try:
|
||||
# Optionally fetch the preferred engine from db conf or just default to cura
|
||||
# For now default to cura or whichever is passed via kwargs if implemented later
|
||||
# Optionally fetch the preferred engine from db conf or just default to prusa
|
||||
# For now default to prusa or whichever is passed via kwargs if implemented later
|
||||
conf_engine = SystemConfig.query.filter_by(key='slicer_engine').first()
|
||||
engine_name = conf_engine.value if conf_engine and conf_engine.value else "cura"
|
||||
engine_name = conf_engine.value if conf_engine and conf_engine.value else "prusa"
|
||||
db.session.remove()
|
||||
|
||||
slicer = get_slicer_engine(engine_name)
|
||||
slicer = get_slicer_engine(engine_name,app.config['PRINT_CONFIG_FOLDER'])
|
||||
|
||||
success, err_msg = slicer.slice(
|
||||
app=app,
|
||||
@@ -97,10 +96,8 @@ def slice_stl_task(file_id, stl_filepath, quality_preset=None, material_preset=N
|
||||
|
||||
@huey.task()
|
||||
def merge_and_slice_task(file_id, inputs, merged_filepath, quality_preset=None, material_preset=None, infill_density=None, support_enable=None, support_pattern=None, delete_stl=False):
|
||||
from app import create_app
|
||||
app = create_app()
|
||||
with app.app_context():
|
||||
from app.models import PrintFile, db
|
||||
print_file = PrintFile.query.get(file_id)
|
||||
if not print_file:
|
||||
return
|
||||
@@ -108,7 +105,6 @@ def merge_and_slice_task(file_id, inputs, merged_filepath, quality_preset=None,
|
||||
db.session.remove()
|
||||
|
||||
try:
|
||||
from app.utils.stl_merger import merge_stls
|
||||
merge_stls(inputs, merged_filepath)
|
||||
|
||||
# Now trigger the regular slicing task
|
||||
@@ -125,13 +121,8 @@ def merge_and_slice_task(file_id, inputs, merged_filepath, quality_preset=None,
|
||||
|
||||
@huey.task()
|
||||
def simplify_stl_task(file_id, filepath):
|
||||
from app import create_app
|
||||
app = create_app()
|
||||
with app.app_context():
|
||||
from app.models import PrintFile, SystemConfig, db
|
||||
import os
|
||||
from app.utils.stl_simplifier import simplify_stl
|
||||
|
||||
print_file = PrintFile.query.get(file_id)
|
||||
if not print_file:
|
||||
return
|
||||
|
||||
196
install.sh
Executable file
@@ -0,0 +1,196 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
REPO_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
|
||||
# 安装目录确认(默认使用脚本所在目录)
|
||||
DEFAULT_INSTALL_DIR="$REPO_DIR"
|
||||
echo "默认安装目录: $DEFAULT_INSTALL_DIR"
|
||||
read -r -p "请输入安装目录(回车使用默认): " INSTALL_DIR_INPUT
|
||||
if [ -z "$INSTALL_DIR_INPUT" ]; then
|
||||
INSTALL_DIR="$DEFAULT_INSTALL_DIR"
|
||||
else
|
||||
INSTALL_DIR="$INSTALL_DIR_INPUT"
|
||||
fi
|
||||
|
||||
# 创建并解析目标路径为绝对路径
|
||||
mkdir -p "$INSTALL_DIR"
|
||||
INSTALL_DIR="$(cd "$INSTALL_DIR" && pwd)"
|
||||
|
||||
if [ "$INSTALL_DIR" != "$REPO_DIR" ]; then
|
||||
echo "选择的安装目录 ($INSTALL_DIR) 与脚本所在目录 ($REPO_DIR) 不同。"
|
||||
if [ -f "$INSTALL_DIR/run_main.sh" ] || [ -f "$INSTALL_DIR/install.sh" ]; then
|
||||
echo "目标目录已包含仓库文件;将在该目录继续安装。"
|
||||
REPO_DIR="$INSTALL_DIR"
|
||||
else
|
||||
read -r -p "目标目录不包含本仓库。是否将当前仓库复制到 $INSTALL_DIR 并在其下继续安装?输入 'yes' 或 'y' 表示同意(默认 no): " COPY_REPLY
|
||||
COPY_REPLY="${COPY_REPLY:-no}"
|
||||
case "${COPY_REPLY,,}" in
|
||||
y|yes|是|1)
|
||||
COPY_CONFIRM=1
|
||||
;;
|
||||
*)
|
||||
COPY_CONFIRM=0
|
||||
;;
|
||||
esac
|
||||
if [ "$COPY_CONFIRM" -eq 1 ]; then
|
||||
if command -v rsync >/dev/null 2>&1; then
|
||||
rsync -a --exclude='.git' "$REPO_DIR/" "$INSTALL_DIR/"
|
||||
else
|
||||
cp -a "$REPO_DIR/." "$INSTALL_DIR/"
|
||||
fi
|
||||
REPO_DIR="$INSTALL_DIR"
|
||||
echo "仓库已复制到 $REPO_DIR"
|
||||
else
|
||||
echo "将继续使用脚本所在目录作为仓库路径:$REPO_DIR"
|
||||
echo "(注意:systemd 服务和脚本仍将引用 $REPO_DIR)"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# 依赖于 REPO_DIR 的路径和变量
|
||||
VENV_DIR="$REPO_DIR/venv"
|
||||
PYTHON_BIN="${PYTHON:-python3}"
|
||||
PRUSA_URL="https://github.com/davidk/PrusaSlicer-ARM.AppImage/releases/download/version_2.9.4/PrusaSlicer-2.9.4-aarch64-full.AppImage"
|
||||
PRUSA_DIR="$REPO_DIR/prusaslicer"
|
||||
PRUSA_FILE="$PRUSA_DIR/$(basename "$PRUSA_URL")"
|
||||
PRUSA_SKIP_DOWNLOAD="${PRUSA_SKIP_DOWNLOAD:-0}"
|
||||
PRUSA_AGPL_ACCEPT="${PRUSA_AGPL_ACCEPT:-0}"
|
||||
|
||||
echo "正在将 AIO_3D_Print_Web_Platform 安装到:$REPO_DIR"
|
||||
echo "使用的 Python: $PYTHON_BIN"
|
||||
|
||||
echo "如果服务正在运行,将尝试停止它们(可能需要 sudo)"
|
||||
sudo systemctl stop aio-3d-main.service 2>/dev/null || true
|
||||
sudo systemctl stop aio-3d-huey.service 2>/dev/null || true
|
||||
|
||||
echo "正在创建虚拟环境(如果不存在):$VENV_DIR"
|
||||
if [ ! -d "$VENV_DIR" ]; then
|
||||
$PYTHON_BIN -m venv "$VENV_DIR"
|
||||
fi
|
||||
|
||||
echo "正在激活虚拟环境并安装 Python 依赖"
|
||||
# shellcheck disable=SC1091
|
||||
source "$VENV_DIR/bin/activate"
|
||||
# 检测 http(s) 代理(支持大小写环境变量)
|
||||
PROXY=""
|
||||
if [ -n "${HTTPS_PROXY:-}" ]; then
|
||||
PROXY="$HTTPS_PROXY"
|
||||
elif [ -n "${https_proxy:-}" ]; then
|
||||
PROXY="$https_proxy"
|
||||
elif [ -n "${HTTP_PROXY:-}" ]; then
|
||||
PROXY="$HTTP_PROXY"
|
||||
elif [ -n "${http_proxy:-}" ]; then
|
||||
PROXY="$http_proxy"
|
||||
fi
|
||||
|
||||
pip_with_proxy() {
|
||||
# 用法: pip_with_proxy install [参数...]
|
||||
if [ -n "$PROXY" ] && [ "$1" = "install" ]; then
|
||||
shift
|
||||
pip install --proxy "$PROXY" "$@"
|
||||
else
|
||||
pip "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
pip_with_proxy install --upgrade pip setuptools wheel
|
||||
if [ -f "$REPO_DIR/requirements.txt" ]; then
|
||||
pip_with_proxy install -r "$REPO_DIR/requirements.txt"
|
||||
else
|
||||
echo "警告:在 $REPO_DIR 未找到 requirements.txt"
|
||||
fi
|
||||
|
||||
echo "确保运行脚本具有可执行权限"
|
||||
chmod +x "$REPO_DIR/run_main.sh" "$REPO_DIR/run_huey.sh"
|
||||
|
||||
echo "正在检查 PrusaSlicer AppImage(可选)"
|
||||
mkdir -p "$PRUSA_DIR"
|
||||
if [ ! -f "$PRUSA_FILE" ]; then
|
||||
if [ "$PRUSA_SKIP_DOWNLOAD" = "1" ]; then
|
||||
echo "检测到 PRUSA_SKIP_DOWNLOAD=1,跳过 PrusaSlicer 下载。"
|
||||
else
|
||||
cat <<'AGPL_NOTICE'
|
||||
PrusaSlicer 使用 GNU Affero General Public License v3 (AGPLv3) 授权。
|
||||
源码仓库: https://github.com/prusa3d/PrusaSlicer
|
||||
本安装器引用的二进制仓库: https://github.com/davidk/PrusaSlicer-ARM.AppImage
|
||||
下载并运行 PrusaSlicer 即表示您同意 AGPLv3 的许可条款。
|
||||
如果您通过网络向用户提供基于该软件的服务,AGPLv3 可能要求您向用户提供相应源码。
|
||||
详情请参见 third_party/PRUSASLICER.md 获取源码与合规说明。
|
||||
AGPL_NOTICE
|
||||
|
||||
if [ "$PRUSA_AGPL_ACCEPT" != "1" ]; then
|
||||
read -r -p "是否接受 AGPLv3 许可并允许下载 PrusaSlicer 二进制?输入 'yes' 或 'y' 表示同意(或设置 PRUSA_AGPL_ACCEPT=1 自动同意): " PRUSA_REPLY
|
||||
else
|
||||
PRUSA_REPLY="yes"
|
||||
fi
|
||||
|
||||
case "${PRUSA_REPLY,,}" in
|
||||
y|yes|是|1)
|
||||
PRUSA_APPROVED=1
|
||||
;;
|
||||
*)
|
||||
PRUSA_APPROVED=0
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ "$PRUSA_APPROVED" -eq 1 ]; then
|
||||
echo "正在下载 PrusaSlicer AppImage 到 $PRUSA_FILE"
|
||||
if command -v curl >/dev/null 2>&1; then
|
||||
if [ -n "$PROXY" ]; then
|
||||
curl -x "$PROXY" -L -o "$PRUSA_FILE" "$PRUSA_URL"
|
||||
else
|
||||
curl -L -o "$PRUSA_FILE" "$PRUSA_URL"
|
||||
fi
|
||||
elif command -v wget >/dev/null 2>&1; then
|
||||
if [ -n "$PROXY" ]; then
|
||||
env HTTP_PROXY="$PROXY" HTTPS_PROXY="$PROXY" wget -O "$PRUSA_FILE" "$PRUSA_URL"
|
||||
else
|
||||
wget -O "$PRUSA_FILE" "$PRUSA_URL"
|
||||
fi
|
||||
else
|
||||
echo "警告:未检测到 curl 或 wget,无法自动下载 PrusaSlicer AppImage。"
|
||||
fi
|
||||
if [ -f "$PRUSA_FILE" ]; then
|
||||
chmod +x "$PRUSA_FILE"
|
||||
fi
|
||||
else
|
||||
echo "用户未接受 AGPL,已跳过 PrusaSlicer 下载。"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "已存在 PrusaSlicer AppImage:$PRUSA_FILE"
|
||||
fi
|
||||
|
||||
echo "准备并安装 systemd 服务文件(需要 sudo)"
|
||||
for svc in "aio-3d-main.service" "aio-3d-huey.service"; do
|
||||
SRC="$REPO_DIR/$svc"
|
||||
if [ ! -f "$SRC" ]; then
|
||||
echo "警告:未找到 $SRC,跳过"
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ "$svc" = "aio-3d-main.service" ]; then
|
||||
EXEC="$REPO_DIR/run_main.sh"
|
||||
else
|
||||
EXEC="$REPO_DIR/run_huey.sh"
|
||||
fi
|
||||
|
||||
TMPFILE="/tmp/$svc"
|
||||
awk -v wd="$REPO_DIR" -v exec="$EXEC" '
|
||||
{ if ($0 ~ /^WorkingDirectory=/) { print "WorkingDirectory=" wd; next } \
|
||||
if ($0 ~ /^ExecStart=/) { print "ExecStart=" exec; next } \
|
||||
print $0 }' "$SRC" > "$TMPFILE"
|
||||
|
||||
echo "正在安装 $svc -> /etc/systemd/system/$svc"
|
||||
sudo cp "$TMPFILE" "/etc/systemd/system/$svc"
|
||||
done
|
||||
|
||||
echo "重新加载 systemd 守护进程并启用服务"
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable aio-3d-main.service aio-3d-huey.service || true
|
||||
sudo systemctl restart aio-3d-huey.service || true
|
||||
sudo systemctl restart aio-3d-main.service || true
|
||||
|
||||
echo "安装完成"
|
||||
|
||||
@@ -1,73 +1,74 @@
|
||||
[metadata]
|
||||
show_name = CR-PETG
|
||||
material_type = petg
|
||||
filament_type = petg
|
||||
|
||||
|
||||
[settings]
|
||||
; filament_adhesiveness_category = 300
|
||||
idle_temperature = 160
|
||||
bed_temperature = 70
|
||||
first_layer_bed_temperature = 70
|
||||
cool_plate_temp = 70
|
||||
eng_plate_temp = 0
|
||||
hot_plate_temp = 70
|
||||
textured_plate_temp = 70
|
||||
cool_plate_temp_initial_layer = 70
|
||||
eng_plate_temp_initial_layer = 0
|
||||
hot_plate_temp_initial_layer = 70
|
||||
textured_plate_temp_initial_layer = 70
|
||||
overhang_fan_threshold = 25%
|
||||
overhang_fan_speed = 90
|
||||
slow_down_for_layer_cooling = 1
|
||||
close_fan_the_first_x_layers = 3
|
||||
filament_end_gcode = ; filament end gcode \n
|
||||
filament_flow_ratio = 0.95
|
||||
reduce_fan_stop_start_freq = 1
|
||||
fan_cooling_layer_time = 30
|
||||
;;;cool_plate_temp = 70
|
||||
;;;eng_plate_temp = 0
|
||||
;;;hot_plate_temp = 70
|
||||
;;;textured_plate_temp = 70
|
||||
;;;cool_plate_temp_initial_layer = 70
|
||||
;;;eng_plate_temp_initial_layer = 0
|
||||
;;;hot_plate_temp_initial_layer = 70
|
||||
;;;textured_plate_temp_initial_layer = 70
|
||||
;;;overhang_fan_threshold = 25%
|
||||
;;;overhang_fan_speed = 90
|
||||
;;;slow_down_for_layer_cooling = 1
|
||||
;;;close_fan_the_first_x_layers = 3
|
||||
;;;filament_end_gcode = ; filament end gcode \n
|
||||
extrusion_multiplier = 0.95
|
||||
;;;reduce_fan_stop_start_freq = 1
|
||||
;;;fan_cooling_layer_time = 30
|
||||
filament_cost = 14
|
||||
filament_density = 1.23
|
||||
filament_deretraction_speed = nil
|
||||
filament_deretract_speed = nil
|
||||
filament_diameter = 1.75
|
||||
filament_max_volumetric_speed = 9
|
||||
filament_minimal_purge_on_wipe_tower = 15
|
||||
filament_retraction_minimum_travel = nil
|
||||
;;;filament_retraction_minimum_travel = nil
|
||||
filament_retract_before_wipe = nil
|
||||
filament_retract_when_changing_layer = nil
|
||||
filament_retraction_length = nil
|
||||
filament_z_hop = nil
|
||||
filament_z_hop_types = nil
|
||||
;;;filament_retract_when_changing_layer = nil
|
||||
filament_retract_length = nil
|
||||
;;;filament_z_hop = nil
|
||||
;;;filament_z_hop_types = nil
|
||||
filament_retract_restart_extra = 0
|
||||
filament_retraction_speed = nil
|
||||
filament_settings_id =
|
||||
filament_retract_speed = nil
|
||||
;;;filament_settings_id =
|
||||
filament_soluble = 0
|
||||
filament_type = PETG
|
||||
filament_vendor = Creality
|
||||
;;;filament_vendor = Creality
|
||||
filament_wipe = nil
|
||||
filament_wipe_distance = nil
|
||||
bed_type = Cool Plate
|
||||
nozzle_temperature_initial_layer = 230
|
||||
;;;filament_wipe_distance = nil
|
||||
;;;bed_type = Cool Plate
|
||||
first_layer_temperature = 230
|
||||
full_fan_speed_layer = 0
|
||||
fan_max_speed = 40
|
||||
fan_min_speed = 30
|
||||
slow_down_min_speed = 10
|
||||
slow_down_layer_time = 8
|
||||
filament_start_gcode = ; filament start gcode\n
|
||||
nozzle_temperature = 230
|
||||
temperature_vitrification = 80
|
||||
additional_cooling_fan_speed = 0
|
||||
complete_print_exhaust_fan_speed = 80
|
||||
cool_cds_fan_start_at_height = 0
|
||||
cool_special_cds_fan_speed = 0
|
||||
max_fan_speed = 40
|
||||
min_fan_speed = 30
|
||||
;;;slow_down_min_speed = 10
|
||||
slowdown_below_layer_time = 8
|
||||
;;;filament_start_gcode = ; filament start gcode\n
|
||||
temperature = 230
|
||||
;;;temperature_vitrification = 80
|
||||
;;;additional_cooling_fan_speed = 0
|
||||
;;;complete_print_exhaust_fan_speed = 80
|
||||
;;;cool_cds_fan_start_at_height = 0
|
||||
;;;cool_special_cds_fan_speed = 0
|
||||
default_filament_colour = ""
|
||||
during_print_exhaust_fan_speed = 60
|
||||
enable_overhang_bridge_fan = 1
|
||||
enable_pressure_advance = 1
|
||||
enable_special_area_additional_cooling_fan = 0
|
||||
epoxy_resin_plate_temp = 70
|
||||
epoxy_resin_plate_temp_initial_layer = 70
|
||||
;;;during_print_exhaust_fan_speed = 60
|
||||
;;;enable_overhang_bridge_fan = 1
|
||||
;;;enable_pressure_advance = 1
|
||||
;;;enable_special_area_additional_cooling_fan = 0
|
||||
;;;epoxy_resin_plate_temp = 70
|
||||
;;;epoxy_resin_plate_temp_initial_layer = 70
|
||||
filament_cooling_final_speed = 3.4
|
||||
filament_cooling_initial_speed = 2.2
|
||||
filament_cooling_moves = 4
|
||||
filament_is_support = 0
|
||||
;;;filament_is_support = 0
|
||||
filament_load_time = 0
|
||||
filament_loading_speed = 28
|
||||
filament_loading_speed_start = 3
|
||||
@@ -78,16 +79,16 @@ filament_notes = ""
|
||||
filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
|
||||
filament_retract_lift_above = 0
|
||||
filament_retract_lift_below = 0
|
||||
filament_retract_lift_enforce = All Surfaces
|
||||
filament_shrink = 100%
|
||||
;;;filament_retract_lift_enforce = All Surfaces
|
||||
;;;filament_shrink = 100%
|
||||
filament_toolchange_delay = 0
|
||||
filament_unload_time = 0
|
||||
filament_unloading_speed = 90
|
||||
filament_unloading_speed_start = 100
|
||||
material_flow_dependent_temperature = 0
|
||||
material_flow_temp_graph = [[3.0,210], [10.0,220], [12.0,230]]
|
||||
nozzle_temperature_range_high = 270
|
||||
nozzle_temperature_range_low = 220
|
||||
pressure_advance = 0.08
|
||||
required_nozzle_HRC = 0
|
||||
support_material_interface_fan_speed = -1
|
||||
;;;material_flow_dependent_temperature = 0
|
||||
;;;material_flow_temp_graph = [[3.0,210], [10.0,220], [12.0,230]]
|
||||
;;;nozzle_temperature_range_high = 270
|
||||
;;;nozzle_temperature_range_low = 220
|
||||
;;;pressure_advance = 0.08
|
||||
;;;required_nozzle_HRC = 0
|
||||
;;;support_material_interface_fan_speed = -1
|
||||
|
||||
@@ -1,78 +1,79 @@
|
||||
[metadata]
|
||||
show_name = CR-PLA
|
||||
material_type = pla
|
||||
filament_type = pla
|
||||
|
||||
|
||||
[settings]
|
||||
idle_temperature = 150
|
||||
bed_temperature = 60
|
||||
first_layer_bed_temperature = 60
|
||||
cool_plate_temp = 50
|
||||
eng_plate_temp = 45
|
||||
hot_plate_temp = 50
|
||||
textured_plate_temp = 50
|
||||
cool_plate_temp_initial_layer = 50
|
||||
eng_plate_temp_initial_layer = 45
|
||||
hot_plate_temp_initial_layer = 50
|
||||
textured_plate_temp_initial_layer = 50
|
||||
overhang_fan_threshold = 50%
|
||||
overhang_fan_speed = 100
|
||||
slow_down_for_layer_cooling = 1
|
||||
close_fan_the_first_x_layers = 1
|
||||
filament_end_gcode = ;filament end gcode
|
||||
filament_flow_ratio = 0.95
|
||||
reduce_fan_stop_start_freq = 1
|
||||
fan_cooling_layer_time = 100
|
||||
;;;cool_plate_temp = 50
|
||||
;;;eng_plate_temp = 45
|
||||
;;;hot_plate_temp = 50
|
||||
;;;textured_plate_temp = 50
|
||||
;;;cool_plate_temp_initial_layer = 50
|
||||
;;;eng_plate_temp_initial_layer = 45
|
||||
;;;hot_plate_temp_initial_layer = 50
|
||||
;;;textured_plate_temp_initial_layer = 50
|
||||
;;;overhang_fan_threshold = 50%
|
||||
;;;overhang_fan_speed = 100
|
||||
;;;slow_down_for_layer_cooling = 1
|
||||
;;;close_fan_the_first_x_layers = 1
|
||||
;;;filament_end_gcode = ;filament end gcode
|
||||
extrusion_multiplier = 0.95
|
||||
;;;reduce_fan_stop_start_freq = 1
|
||||
;;;fan_cooling_layer_time = 100
|
||||
filament_cost = 25
|
||||
filament_density = 1.25
|
||||
filament_deretraction_speed = nil
|
||||
filament_deretract_speed = nil
|
||||
filament_diameter = 1.75
|
||||
filament_max_volumetric_speed = 12
|
||||
filament_minimal_purge_on_wipe_tower = 15
|
||||
filament_retraction_minimum_travel = nil
|
||||
;;;filament_retraction_minimum_travel = nil
|
||||
filament_retract_before_wipe = nil
|
||||
filament_retract_when_changing_layer = nil
|
||||
filament_retraction_length = 1
|
||||
filament_z_hop = 0.2
|
||||
filament_z_hop_types = Slope Lift
|
||||
;;;filament_retract_when_changing_layer = nil
|
||||
filament_retract_length = 1
|
||||
;;;filament_z_hop = 0.2
|
||||
;;;filament_z_hop_types = Slope Lift
|
||||
filament_retract_restart_extra = 0
|
||||
filament_retraction_speed = 40
|
||||
filament_settings_id =
|
||||
filament_retract_speed = 40
|
||||
;;;filament_settings_id =
|
||||
filament_soluble = 0
|
||||
filament_type = PLA
|
||||
filament_vendor = Creality
|
||||
;;;filament_vendor = Creality
|
||||
filament_wipe = nil
|
||||
filament_wipe_distance = nil
|
||||
bed_type = Cool Plate
|
||||
nozzle_temperature_initial_layer = 190
|
||||
;;;filament_wipe_distance = nil
|
||||
;;;bed_type = Cool Plate
|
||||
first_layer_temperature = 190
|
||||
full_fan_speed_layer = 0
|
||||
fan_max_speed = 100
|
||||
fan_min_speed = 100
|
||||
slow_down_min_speed = 20
|
||||
slow_down_layer_time = 6
|
||||
filament_start_gcode = ;filament start gcode
|
||||
nozzle_temperature = 190
|
||||
temperature_vitrification = 100
|
||||
max_fan_speed = 100
|
||||
min_fan_speed = 100
|
||||
;;;slow_down_min_speed = 20
|
||||
slowdown_below_layer_time = 6
|
||||
;;;filament_start_gcode = ;filament start gcode
|
||||
temperature = 190
|
||||
;;;temperature_vitrification = 100
|
||||
; filament_adhesiveness_category = 100
|
||||
nozzle_temperature_range_low = 190
|
||||
nozzle_temperature_range_high = 240
|
||||
additional_cooling_fan_speed = 0
|
||||
activate_air_filtration = 0
|
||||
activate_chamber_temp_control = 0
|
||||
;;;nozzle_temperature_range_low = 190
|
||||
;;;nozzle_temperature_range_high = 240
|
||||
;;;additional_cooling_fan_speed = 0
|
||||
;;;activate_air_filtration = 0
|
||||
;;;activate_chamber_temp_control = 0
|
||||
chamber_temperature = 0
|
||||
complete_print_exhaust_fan_speed = 80
|
||||
cool_cds_fan_start_at_height = 0
|
||||
cool_special_cds_fan_speed = 0
|
||||
;;;complete_print_exhaust_fan_speed = 80
|
||||
;;;cool_cds_fan_start_at_height = 0
|
||||
;;;cool_special_cds_fan_speed = 0
|
||||
default_filament_colour = ""
|
||||
during_print_exhaust_fan_speed = 60
|
||||
enable_overhang_bridge_fan = 1
|
||||
enable_pressure_advance = 0
|
||||
enable_special_area_additional_cooling_fan = 0
|
||||
epoxy_resin_plate_temp = 0
|
||||
epoxy_resin_plate_temp_initial_layer = 0
|
||||
;;;during_print_exhaust_fan_speed = 60
|
||||
;;;enable_overhang_bridge_fan = 1
|
||||
;;;enable_pressure_advance = 0
|
||||
;;;enable_special_area_additional_cooling_fan = 0
|
||||
;;;epoxy_resin_plate_temp = 0
|
||||
;;;epoxy_resin_plate_temp_initial_layer = 0
|
||||
filament_cooling_final_speed = 3.4
|
||||
filament_cooling_initial_speed = 2.2
|
||||
filament_cooling_moves = 4
|
||||
filament_is_support = 0
|
||||
;;;filament_is_support = 0
|
||||
filament_load_time = 0
|
||||
filament_loading_speed = 28
|
||||
filament_loading_speed_start = 3
|
||||
@@ -83,14 +84,14 @@ filament_notes = ""
|
||||
filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
|
||||
filament_retract_lift_above = 0
|
||||
filament_retract_lift_below = 0
|
||||
filament_retract_lift_enforce = All Surfaces
|
||||
filament_shrink = 100%
|
||||
;;;filament_retract_lift_enforce = All Surfaces
|
||||
;;;filament_shrink = 100%
|
||||
filament_toolchange_delay = 0
|
||||
filament_unload_time = 0
|
||||
filament_unloading_speed = 90
|
||||
filament_unloading_speed_start = 100
|
||||
material_flow_dependent_temperature = 0
|
||||
material_flow_temp_graph = [[2.0,185],[4.0,190],[7.0,200]]
|
||||
pressure_advance = 0.02
|
||||
required_nozzle_HRC = 0
|
||||
support_material_interface_fan_speed = -1
|
||||
;;;material_flow_dependent_temperature = 0
|
||||
;;;material_flow_temp_graph = [[2.0,185],[4.0,190],[7.0,200]]
|
||||
;;;pressure_advance = 0.02
|
||||
;;;required_nozzle_HRC = 0
|
||||
;;;support_material_interface_fan_speed = -1
|
||||
|
||||
@@ -1,76 +1,77 @@
|
||||
[metadata]
|
||||
show_name = Generic PETG
|
||||
material_type = petg
|
||||
filament_type = petg
|
||||
|
||||
|
||||
[settings]
|
||||
; filament_adhesiveness_category = 300
|
||||
idle_temperature = 160
|
||||
bed_temperature = 70
|
||||
first_layer_bed_temperature = 70
|
||||
cool_plate_temp = 60
|
||||
eng_plate_temp = 0
|
||||
hot_plate_temp = 70
|
||||
textured_plate_temp = 70
|
||||
cool_plate_temp_initial_layer = 60
|
||||
eng_plate_temp_initial_layer = 0
|
||||
hot_plate_temp_initial_layer = 70
|
||||
textured_plate_temp_initial_layer = 70
|
||||
overhang_fan_threshold = 25%
|
||||
overhang_fan_speed = 90
|
||||
slow_down_for_layer_cooling = 1
|
||||
close_fan_the_first_x_layers = 3
|
||||
filament_end_gcode = ;filament end gcode \n
|
||||
filament_flow_ratio = 0.95
|
||||
reduce_fan_stop_start_freq = 1
|
||||
fan_cooling_layer_time = 30
|
||||
;;;cool_plate_temp = 60
|
||||
;;;eng_plate_temp = 0
|
||||
;;;hot_plate_temp = 70
|
||||
;;;textured_plate_temp = 70
|
||||
;;;cool_plate_temp_initial_layer = 60
|
||||
;;;eng_plate_temp_initial_layer = 0
|
||||
;;;hot_plate_temp_initial_layer = 70
|
||||
;;;textured_plate_temp_initial_layer = 70
|
||||
;;;overhang_fan_threshold = 25%
|
||||
;;;overhang_fan_speed = 90
|
||||
;;;slow_down_for_layer_cooling = 1
|
||||
;;;close_fan_the_first_x_layers = 3
|
||||
;;;filament_end_gcode = ;filament end gcode \n
|
||||
extrusion_multiplier = 0.95
|
||||
;;;reduce_fan_stop_start_freq = 1
|
||||
;;;fan_cooling_layer_time = 30
|
||||
filament_cost = 30
|
||||
filament_density = 1.27
|
||||
filament_deretraction_speed = nil
|
||||
filament_deretract_speed = nil
|
||||
filament_diameter = 1.75
|
||||
filament_max_volumetric_speed = 10
|
||||
filament_minimal_purge_on_wipe_tower = 15
|
||||
filament_retraction_minimum_travel = nil
|
||||
;;;filament_retraction_minimum_travel = nil
|
||||
filament_retract_before_wipe = nil
|
||||
filament_retract_when_changing_layer = nil
|
||||
filament_retraction_length = 1.2
|
||||
filament_z_hop = 0.2
|
||||
filament_z_hop_types = nil
|
||||
;;;filament_retract_when_changing_layer = nil
|
||||
filament_retract_length = 1.2
|
||||
;;;filament_z_hop = 0.2
|
||||
;;;filament_z_hop_types = nil
|
||||
filament_retract_restart_extra = 0
|
||||
filament_retraction_speed = nil
|
||||
filament_settings_id =
|
||||
filament_retract_speed = nil
|
||||
;;;filament_settings_id =
|
||||
filament_soluble = 0
|
||||
filament_type = PETG
|
||||
filament_vendor = Creality
|
||||
;;;filament_vendor = Creality
|
||||
filament_wipe = nil
|
||||
filament_wipe_distance = nil
|
||||
bed_type = Cool Plate
|
||||
nozzle_temperature_initial_layer = 220
|
||||
;;;filament_wipe_distance = nil
|
||||
;;;bed_type = Cool Plate
|
||||
first_layer_temperature = 220
|
||||
full_fan_speed_layer = 0
|
||||
fan_max_speed = 80
|
||||
fan_min_speed = 40
|
||||
slow_down_min_speed = 10
|
||||
slow_down_layer_time = 8
|
||||
filament_start_gcode = ;filament start gcode\n
|
||||
nozzle_temperature = 220
|
||||
temperature_vitrification = 80
|
||||
activate_air_filtration = 0
|
||||
activate_chamber_temp_control = 0
|
||||
additional_cooling_fan_speed = 0
|
||||
max_fan_speed = 80
|
||||
min_fan_speed = 40
|
||||
;;;slow_down_min_speed = 10
|
||||
slowdown_below_layer_time = 8
|
||||
;;;filament_start_gcode = ;filament start gcode\n
|
||||
temperature = 220
|
||||
;;;temperature_vitrification = 80
|
||||
;;;activate_air_filtration = 0
|
||||
;;;activate_chamber_temp_control = 0
|
||||
;;;additional_cooling_fan_speed = 0
|
||||
chamber_temperature = 0
|
||||
complete_print_exhaust_fan_speed = 80
|
||||
cool_cds_fan_start_at_height = 0
|
||||
cool_special_cds_fan_speed = 0
|
||||
;;;complete_print_exhaust_fan_speed = 80
|
||||
;;;cool_cds_fan_start_at_height = 0
|
||||
;;;cool_special_cds_fan_speed = 0
|
||||
default_filament_colour = ""
|
||||
during_print_exhaust_fan_speed = 60
|
||||
enable_overhang_bridge_fan = 1
|
||||
enable_pressure_advance = 0
|
||||
enable_special_area_additional_cooling_fan = 0
|
||||
epoxy_resin_plate_temp = 0
|
||||
epoxy_resin_plate_temp_initial_layer = 0
|
||||
;;;during_print_exhaust_fan_speed = 60
|
||||
;;;enable_overhang_bridge_fan = 1
|
||||
;;;enable_pressure_advance = 0
|
||||
;;;enable_special_area_additional_cooling_fan = 0
|
||||
;;;epoxy_resin_plate_temp = 0
|
||||
;;;epoxy_resin_plate_temp_initial_layer = 0
|
||||
filament_cooling_final_speed = 3.4
|
||||
filament_cooling_initial_speed = 2.2
|
||||
filament_cooling_moves = 4
|
||||
filament_is_support = 0
|
||||
;;;filament_is_support = 0
|
||||
filament_load_time = 0
|
||||
filament_loading_speed = 28
|
||||
filament_loading_speed_start = 3
|
||||
@@ -81,16 +82,16 @@ filament_notes = ""
|
||||
filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
|
||||
filament_retract_lift_above = 0
|
||||
filament_retract_lift_below = 0
|
||||
filament_retract_lift_enforce = All Surfaces
|
||||
filament_shrink = 100%
|
||||
;;;filament_retract_lift_enforce = All Surfaces
|
||||
;;;filament_shrink = 100%
|
||||
filament_toolchange_delay = 0
|
||||
filament_unload_time = 0
|
||||
filament_unloading_speed = 90
|
||||
filament_unloading_speed_start = 100
|
||||
material_flow_dependent_temperature = 0
|
||||
material_flow_temp_graph = [[3.5,200],[7.0,240]]
|
||||
nozzle_temperature_range_high = 270
|
||||
nozzle_temperature_range_low = 220
|
||||
pressure_advance = 0.02
|
||||
required_nozzle_HRC = 0
|
||||
support_material_interface_fan_speed = -1
|
||||
;;;material_flow_dependent_temperature = 0
|
||||
;;;material_flow_temp_graph = [[3.5,200],[7.0,240]]
|
||||
;;;nozzle_temperature_range_high = 270
|
||||
;;;nozzle_temperature_range_low = 220
|
||||
;;;pressure_advance = 0.02
|
||||
;;;required_nozzle_HRC = 0
|
||||
;;;support_material_interface_fan_speed = -1
|
||||
|
||||
@@ -1,78 +1,79 @@
|
||||
[metadata]
|
||||
show_name = Generic TPU
|
||||
material_type = tpu
|
||||
filament_type = tpu
|
||||
|
||||
|
||||
[settings]
|
||||
idle_temperature = 130
|
||||
bed_temperature = 55
|
||||
first_layer_bed_temperature = 55
|
||||
cool_plate_temp = 30
|
||||
eng_plate_temp = 30
|
||||
hot_plate_temp = 30
|
||||
textured_plate_temp = 30
|
||||
cool_plate_temp_initial_layer = 30
|
||||
eng_plate_temp_initial_layer = 30
|
||||
hot_plate_temp_initial_layer = 30
|
||||
textured_plate_temp_initial_layer = 30
|
||||
overhang_fan_threshold = 95%
|
||||
overhang_fan_speed = 100
|
||||
slow_down_for_layer_cooling = 1
|
||||
close_fan_the_first_x_layers = 1
|
||||
filament_end_gcode = ;filament end gcode \n
|
||||
filament_flow_ratio = 1
|
||||
reduce_fan_stop_start_freq = 1
|
||||
fan_cooling_layer_time = 100
|
||||
;;;cool_plate_temp = 30
|
||||
;;;eng_plate_temp = 30
|
||||
;;;hot_plate_temp = 30
|
||||
;;;textured_plate_temp = 30
|
||||
;;;cool_plate_temp_initial_layer = 30
|
||||
;;;eng_plate_temp_initial_layer = 30
|
||||
;;;hot_plate_temp_initial_layer = 30
|
||||
;;;textured_plate_temp_initial_layer = 30
|
||||
;;;overhang_fan_threshold = 95%
|
||||
;;;overhang_fan_speed = 100
|
||||
;;;slow_down_for_layer_cooling = 1
|
||||
;;;close_fan_the_first_x_layers = 1
|
||||
;;;filament_end_gcode = ;filament end gcode \n
|
||||
extrusion_multiplier = 1
|
||||
;;;reduce_fan_stop_start_freq = 1
|
||||
;;;fan_cooling_layer_time = 100
|
||||
filament_cost = 20
|
||||
filament_density = 1.24
|
||||
filament_deretraction_speed = nil
|
||||
filament_deretract_speed = nil
|
||||
filament_diameter = 1.75
|
||||
filament_max_volumetric_speed = 3
|
||||
filament_minimal_purge_on_wipe_tower = 15
|
||||
filament_retraction_minimum_travel = nil
|
||||
;;;filament_retraction_minimum_travel = nil
|
||||
filament_retract_before_wipe = nil
|
||||
filament_retract_when_changing_layer = nil
|
||||
filament_retraction_length = 2
|
||||
filament_z_hop = 0.2
|
||||
filament_z_hop_types = nil
|
||||
;;;filament_retract_when_changing_layer = nil
|
||||
filament_retract_length = 2
|
||||
;;;filament_z_hop = 0.2
|
||||
;;;filament_z_hop_types = nil
|
||||
filament_retract_restart_extra = 0
|
||||
filament_retraction_speed = nil
|
||||
filament_settings_id =
|
||||
filament_retract_speed = nil
|
||||
;;;filament_settings_id =
|
||||
filament_soluble = 0
|
||||
filament_type = TPU
|
||||
filament_vendor = Generic
|
||||
;;;filament_vendor = Generic
|
||||
filament_wipe = nil
|
||||
filament_wipe_distance = nil
|
||||
bed_type = Cool Plate
|
||||
nozzle_temperature_initial_layer = 200
|
||||
;;;filament_wipe_distance = nil
|
||||
;;;bed_type = Cool Plate
|
||||
first_layer_temperature = 200
|
||||
full_fan_speed_layer = 0
|
||||
fan_max_speed = 100
|
||||
fan_min_speed = 100
|
||||
slow_down_min_speed = 10
|
||||
slow_down_layer_time = 12
|
||||
filament_start_gcode = ;filament start gcode\n
|
||||
nozzle_temperature = 200
|
||||
temperature_vitrification = 60
|
||||
max_fan_speed = 100
|
||||
min_fan_speed = 100
|
||||
;;;slow_down_min_speed = 10
|
||||
slowdown_below_layer_time = 12
|
||||
;;;filament_start_gcode = ;filament start gcode\n
|
||||
temperature = 200
|
||||
;;;temperature_vitrification = 60
|
||||
; filament_adhesiveness_category = 600
|
||||
additional_cooling_fan_speed = 0
|
||||
nozzle_temperature_range_low = 200
|
||||
nozzle_temperature_range_high = 250
|
||||
activate_air_filtration = 0
|
||||
activate_chamber_temp_control = 0
|
||||
;;;additional_cooling_fan_speed = 0
|
||||
;;;nozzle_temperature_range_low = 200
|
||||
;;;nozzle_temperature_range_high = 250
|
||||
;;;activate_air_filtration = 0
|
||||
;;;activate_chamber_temp_control = 0
|
||||
chamber_temperature = 0
|
||||
complete_print_exhaust_fan_speed = 80
|
||||
cool_cds_fan_start_at_height = 0
|
||||
cool_special_cds_fan_speed = 0
|
||||
;;;complete_print_exhaust_fan_speed = 80
|
||||
;;;cool_cds_fan_start_at_height = 0
|
||||
;;;cool_special_cds_fan_speed = 0
|
||||
default_filament_colour = ""
|
||||
during_print_exhaust_fan_speed = 60
|
||||
enable_overhang_bridge_fan = 1
|
||||
enable_pressure_advance = 0
|
||||
enable_special_area_additional_cooling_fan = 0
|
||||
epoxy_resin_plate_temp = 0
|
||||
epoxy_resin_plate_temp_initial_layer = 0
|
||||
;;;during_print_exhaust_fan_speed = 60
|
||||
;;;enable_overhang_bridge_fan = 1
|
||||
;;;enable_pressure_advance = 0
|
||||
;;;enable_special_area_additional_cooling_fan = 0
|
||||
;;;epoxy_resin_plate_temp = 0
|
||||
;;;epoxy_resin_plate_temp_initial_layer = 0
|
||||
filament_cooling_final_speed = 3.4
|
||||
filament_cooling_initial_speed = 2.2
|
||||
filament_cooling_moves = 4
|
||||
filament_is_support = 0
|
||||
;;;filament_is_support = 0
|
||||
filament_load_time = 0
|
||||
filament_loading_speed = 28
|
||||
filament_loading_speed_start = 3
|
||||
@@ -83,14 +84,14 @@ filament_notes = ""
|
||||
filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
|
||||
filament_retract_lift_above = 0
|
||||
filament_retract_lift_below = 0
|
||||
filament_retract_lift_enforce = All Surfaces
|
||||
filament_shrink = 100%
|
||||
;;;filament_retract_lift_enforce = All Surfaces
|
||||
;;;filament_shrink = 100%
|
||||
filament_toolchange_delay = 0
|
||||
filament_unload_time = 0
|
||||
filament_unloading_speed = 90
|
||||
filament_unloading_speed_start = 100
|
||||
material_flow_dependent_temperature = 0
|
||||
material_flow_temp_graph = [[3.5,200],[7.0,240]]
|
||||
pressure_advance = 0.02
|
||||
required_nozzle_HRC = 0
|
||||
support_material_interface_fan_speed = -1
|
||||
;;;material_flow_dependent_temperature = 0
|
||||
;;;material_flow_temp_graph = [[3.5,200],[7.0,240]]
|
||||
;;;pressure_advance = 0.02
|
||||
;;;required_nozzle_HRC = 0
|
||||
;;;support_material_interface_fan_speed = -1
|
||||
|
||||
@@ -1,80 +1,81 @@
|
||||
[metadata]
|
||||
show_name = Hyper L-W PLA
|
||||
material_type = pla
|
||||
filament_type = pla
|
||||
|
||||
|
||||
[settings]
|
||||
idle_temperature = 150
|
||||
bed_temperature = 60
|
||||
first_layer_bed_temperature = 60
|
||||
cool_plate_temp = 50
|
||||
eng_plate_temp = 45
|
||||
hot_plate_temp = 60
|
||||
textured_plate_temp = 60
|
||||
cool_plate_temp_initial_layer = 50
|
||||
eng_plate_temp_initial_layer = 45
|
||||
hot_plate_temp_initial_layer = 60
|
||||
textured_plate_temp_initial_layer = 60
|
||||
overhang_fan_threshold = 50%
|
||||
overhang_fan_speed = 100
|
||||
slow_down_for_layer_cooling = 1
|
||||
close_fan_the_first_x_layers = 1
|
||||
filament_end_gcode = ;filament end gcode
|
||||
filament_flow_ratio = 0.75
|
||||
reduce_fan_stop_start_freq = 1
|
||||
fan_cooling_layer_time = 100
|
||||
;;;cool_plate_temp = 50
|
||||
;;;eng_plate_temp = 45
|
||||
;;;hot_plate_temp = 60
|
||||
;;;textured_plate_temp = 60
|
||||
;;;cool_plate_temp_initial_layer = 50
|
||||
;;;eng_plate_temp_initial_layer = 45
|
||||
;;;hot_plate_temp_initial_layer = 60
|
||||
;;;textured_plate_temp_initial_layer = 60
|
||||
;;;overhang_fan_threshold = 50%
|
||||
;;;overhang_fan_speed = 100
|
||||
;;;slow_down_for_layer_cooling = 1
|
||||
;;;close_fan_the_first_x_layers = 1
|
||||
;;;filament_end_gcode = ;filament end gcode
|
||||
extrusion_multiplier = 0.75
|
||||
;;;reduce_fan_stop_start_freq = 1
|
||||
;;;fan_cooling_layer_time = 100
|
||||
filament_cost = 48.9
|
||||
filament_density = 1.21
|
||||
filament_deretraction_speed = 15
|
||||
filament_deretract_speed = 15
|
||||
filament_diameter = 1.75
|
||||
filament_max_volumetric_speed = 4
|
||||
filament_minimal_purge_on_wipe_tower = 15
|
||||
filament_retraction_minimum_travel = 3
|
||||
;;;filament_retraction_minimum_travel = 3
|
||||
filament_retract_before_wipe = nil
|
||||
filament_retract_when_changing_layer = nil
|
||||
filament_retraction_length = 0.6
|
||||
filament_z_hop = nil
|
||||
filament_z_hop_types = nil
|
||||
;;;filament_retract_when_changing_layer = nil
|
||||
filament_retract_length = 0.6
|
||||
;;;filament_z_hop = nil
|
||||
;;;filament_z_hop_types = nil
|
||||
filament_retract_restart_extra = nil
|
||||
filament_retraction_speed = 15
|
||||
filament_settings_id =
|
||||
filament_retract_speed = 15
|
||||
;;;filament_settings_id =
|
||||
filament_soluble = 0
|
||||
filament_type = PLA
|
||||
filament_vendor = Creality
|
||||
;;;filament_vendor = Creality
|
||||
filament_wipe = nil
|
||||
filament_wipe_distance = nil
|
||||
bed_type = Cool Plate
|
||||
nozzle_temperature_initial_layer = 220
|
||||
;;;filament_wipe_distance = nil
|
||||
;;;bed_type = Cool Plate
|
||||
first_layer_temperature = 220
|
||||
full_fan_speed_layer = 0
|
||||
fan_max_speed = 100
|
||||
fan_min_speed = 60
|
||||
slow_down_min_speed = 10
|
||||
slow_down_layer_time = 10
|
||||
filament_start_gcode = ;filament start gcode
|
||||
nozzle_temperature = 220
|
||||
temperature_vitrification = 60
|
||||
max_fan_speed = 100
|
||||
min_fan_speed = 60
|
||||
;;;slow_down_min_speed = 10
|
||||
slowdown_below_layer_time = 10
|
||||
;;;filament_start_gcode = ;filament start gcode
|
||||
temperature = 220
|
||||
;;;temperature_vitrification = 60
|
||||
; filament_adhesiveness_category = 100
|
||||
nozzle_temperature_range_low = 200
|
||||
nozzle_temperature_range_high = 270
|
||||
additional_cooling_fan_speed = 0
|
||||
activate_air_filtration = 0
|
||||
activate_chamber_temp_control = 0
|
||||
;;;nozzle_temperature_range_low = 200
|
||||
;;;nozzle_temperature_range_high = 270
|
||||
;;;additional_cooling_fan_speed = 0
|
||||
;;;activate_air_filtration = 0
|
||||
;;;activate_chamber_temp_control = 0
|
||||
chamber_temperature = 0
|
||||
complete_print_exhaust_fan_speed = 80
|
||||
cool_cds_fan_start_at_height = 0.5
|
||||
cool_special_cds_fan_speed = 0
|
||||
customized_plate_temp = 60
|
||||
customized_plate_temp_initial_layer = 60
|
||||
;;;complete_print_exhaust_fan_speed = 80
|
||||
;;;cool_cds_fan_start_at_height = 0.5
|
||||
;;;cool_special_cds_fan_speed = 0
|
||||
;;;customized_plate_temp = 60
|
||||
;;;customized_plate_temp_initial_layer = 60
|
||||
default_filament_colour = ""
|
||||
during_print_exhaust_fan_speed = 60
|
||||
enable_overhang_bridge_fan = 1
|
||||
enable_pressure_advance = 1
|
||||
enable_special_area_additional_cooling_fan = 0
|
||||
epoxy_resin_plate_temp = 60
|
||||
epoxy_resin_plate_temp_initial_layer = 60
|
||||
;;;during_print_exhaust_fan_speed = 60
|
||||
;;;enable_overhang_bridge_fan = 1
|
||||
;;;enable_pressure_advance = 1
|
||||
;;;enable_special_area_additional_cooling_fan = 0
|
||||
;;;epoxy_resin_plate_temp = 60
|
||||
;;;epoxy_resin_plate_temp_initial_layer = 60
|
||||
filament_cooling_final_speed = 3.4
|
||||
filament_cooling_initial_speed = 2.2
|
||||
filament_cooling_moves = 4
|
||||
filament_is_support = 0
|
||||
;;;filament_is_support = 0
|
||||
filament_load_time = 0
|
||||
filament_loading_speed = 28
|
||||
filament_loading_speed_start = 3
|
||||
@@ -85,14 +86,14 @@ filament_notes = ""
|
||||
filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
|
||||
filament_retract_lift_above = nil
|
||||
filament_retract_lift_below = nil
|
||||
filament_retract_lift_enforce = nil
|
||||
filament_shrink = 100%
|
||||
;;;filament_retract_lift_enforce = nil
|
||||
;;;filament_shrink = 100%
|
||||
filament_shrinkage_compensation_z = 100%
|
||||
filament_toolchange_delay = 0
|
||||
filament_unload_time = 0
|
||||
filament_unloading_speed = 90
|
||||
filament_unloading_speed_start = 100
|
||||
material_flow_dependent_temperature = 0
|
||||
pressure_advance = 0.1
|
||||
required_nozzle_HRC = 0
|
||||
support_material_interface_fan_speed = -1
|
||||
;;;material_flow_dependent_temperature = 0
|
||||
;;;pressure_advance = 0.1
|
||||
;;;required_nozzle_HRC = 0
|
||||
;;;support_material_interface_fan_speed = -1
|
||||
|
||||
@@ -1,80 +1,81 @@
|
||||
[metadata]
|
||||
show_name = Hyper Marble PLA
|
||||
material_type = pla
|
||||
filament_type = pla
|
||||
|
||||
|
||||
[settings]
|
||||
idle_temperature = 150
|
||||
bed_temperature = 60
|
||||
first_layer_bed_temperature = 60
|
||||
cool_plate_temp = 50
|
||||
eng_plate_temp = 45
|
||||
hot_plate_temp = 50
|
||||
textured_plate_temp = 50
|
||||
cool_plate_temp_initial_layer = 50
|
||||
eng_plate_temp_initial_layer = 45
|
||||
hot_plate_temp_initial_layer = 50
|
||||
textured_plate_temp_initial_layer = 50
|
||||
overhang_fan_threshold = 50%
|
||||
overhang_fan_speed = 100
|
||||
slow_down_for_layer_cooling = 1
|
||||
close_fan_the_first_x_layers = 1
|
||||
filament_end_gcode = ;filament end gcode
|
||||
filament_flow_ratio = 0.95
|
||||
reduce_fan_stop_start_freq = 1
|
||||
fan_cooling_layer_time = 100
|
||||
;;;cool_plate_temp = 50
|
||||
;;;eng_plate_temp = 45
|
||||
;;;hot_plate_temp = 50
|
||||
;;;textured_plate_temp = 50
|
||||
;;;cool_plate_temp_initial_layer = 50
|
||||
;;;eng_plate_temp_initial_layer = 45
|
||||
;;;hot_plate_temp_initial_layer = 50
|
||||
;;;textured_plate_temp_initial_layer = 50
|
||||
;;;overhang_fan_threshold = 50%
|
||||
;;;overhang_fan_speed = 100
|
||||
;;;slow_down_for_layer_cooling = 1
|
||||
;;;close_fan_the_first_x_layers = 1
|
||||
;;;filament_end_gcode = ;filament end gcode
|
||||
extrusion_multiplier = 0.95
|
||||
;;;reduce_fan_stop_start_freq = 1
|
||||
;;;fan_cooling_layer_time = 100
|
||||
filament_cost = 23.9
|
||||
filament_density = 1.25
|
||||
filament_deretraction_speed = 15
|
||||
filament_deretract_speed = 15
|
||||
filament_diameter = 1.75
|
||||
filament_max_volumetric_speed = 18
|
||||
filament_minimal_purge_on_wipe_tower = 15
|
||||
filament_retraction_minimum_travel = 2
|
||||
;;;filament_retraction_minimum_travel = 2
|
||||
filament_retract_before_wipe = nil
|
||||
filament_retract_when_changing_layer = nil
|
||||
filament_retraction_length = 1.5
|
||||
filament_z_hop = nil
|
||||
filament_z_hop_types = nil
|
||||
;;;filament_retract_when_changing_layer = nil
|
||||
filament_retract_length = 1.5
|
||||
;;;filament_z_hop = nil
|
||||
;;;filament_z_hop_types = nil
|
||||
filament_retract_restart_extra = nil
|
||||
filament_retraction_speed = 15
|
||||
filament_settings_id =
|
||||
filament_retract_speed = 15
|
||||
;;;filament_settings_id =
|
||||
filament_soluble = 0
|
||||
filament_type = PLA
|
||||
filament_vendor = Creality
|
||||
;;;filament_vendor = Creality
|
||||
filament_wipe = nil
|
||||
filament_wipe_distance = 3
|
||||
bed_type = Cool Plate
|
||||
nozzle_temperature_initial_layer = 220
|
||||
;;;filament_wipe_distance = 3
|
||||
;;;bed_type = Cool Plate
|
||||
first_layer_temperature = 220
|
||||
full_fan_speed_layer = 0
|
||||
fan_max_speed = 100
|
||||
fan_min_speed = 100
|
||||
slow_down_min_speed = 20
|
||||
slow_down_layer_time = 14
|
||||
filament_start_gcode = ;filament start gcode
|
||||
nozzle_temperature = 220
|
||||
temperature_vitrification = 60
|
||||
max_fan_speed = 100
|
||||
min_fan_speed = 100
|
||||
;;;slow_down_min_speed = 20
|
||||
slowdown_below_layer_time = 14
|
||||
;;;filament_start_gcode = ;filament start gcode
|
||||
temperature = 220
|
||||
;;;temperature_vitrification = 60
|
||||
; filament_adhesiveness_category = 100
|
||||
nozzle_temperature_range_low = 190
|
||||
nozzle_temperature_range_high = 240
|
||||
additional_cooling_fan_speed = 0
|
||||
activate_air_filtration = 0
|
||||
activate_chamber_temp_control = 0
|
||||
;;;nozzle_temperature_range_low = 190
|
||||
;;;nozzle_temperature_range_high = 240
|
||||
;;;additional_cooling_fan_speed = 0
|
||||
;;;activate_air_filtration = 0
|
||||
;;;activate_chamber_temp_control = 0
|
||||
chamber_temperature = 0
|
||||
complete_print_exhaust_fan_speed = 80
|
||||
cool_cds_fan_start_at_height = 0
|
||||
cool_special_cds_fan_speed = 0
|
||||
customized_plate_temp = 50
|
||||
customized_plate_temp_initial_layer = 50
|
||||
;;;complete_print_exhaust_fan_speed = 80
|
||||
;;;cool_cds_fan_start_at_height = 0
|
||||
;;;cool_special_cds_fan_speed = 0
|
||||
;;;customized_plate_temp = 50
|
||||
;;;customized_plate_temp_initial_layer = 50
|
||||
default_filament_colour = ""
|
||||
during_print_exhaust_fan_speed = 60
|
||||
enable_overhang_bridge_fan = 1
|
||||
enable_pressure_advance = 1
|
||||
enable_special_area_additional_cooling_fan = 0
|
||||
epoxy_resin_plate_temp = 50
|
||||
epoxy_resin_plate_temp_initial_layer = 50
|
||||
;;;during_print_exhaust_fan_speed = 60
|
||||
;;;enable_overhang_bridge_fan = 1
|
||||
;;;enable_pressure_advance = 1
|
||||
;;;enable_special_area_additional_cooling_fan = 0
|
||||
;;;epoxy_resin_plate_temp = 50
|
||||
;;;epoxy_resin_plate_temp_initial_layer = 50
|
||||
filament_cooling_final_speed = 3.4
|
||||
filament_cooling_initial_speed = 2.2
|
||||
filament_cooling_moves = 4
|
||||
filament_is_support = 0
|
||||
;;;filament_is_support = 0
|
||||
filament_load_time = 0
|
||||
filament_loading_speed = 28
|
||||
filament_loading_speed_start = 3
|
||||
@@ -85,15 +86,15 @@ filament_notes = ""
|
||||
filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
|
||||
filament_retract_lift_above = nil
|
||||
filament_retract_lift_below = nil
|
||||
filament_retract_lift_enforce = nil
|
||||
filament_shrink = 100%
|
||||
;;;filament_retract_lift_enforce = nil
|
||||
;;;filament_shrink = 100%
|
||||
filament_shrinkage_compensation_z = 100%
|
||||
filament_toolchange_delay = 0
|
||||
filament_unload_time = 0
|
||||
filament_unloading_speed = 90
|
||||
filament_unloading_speed_start = 100
|
||||
material_flow_dependent_temperature = 0
|
||||
material_flow_temp_graph = [[0.8,200],[1.0,200],[1.2,220]]
|
||||
pressure_advance = 0.04
|
||||
required_nozzle_HRC = 0
|
||||
support_material_interface_fan_speed = -1
|
||||
;;;material_flow_dependent_temperature = 0
|
||||
;;;material_flow_temp_graph = [[0.8,200],[1.0,200],[1.2,220]]
|
||||
;;;pressure_advance = 0.04
|
||||
;;;required_nozzle_HRC = 0
|
||||
;;;support_material_interface_fan_speed = -1
|
||||
|
||||
@@ -1,75 +1,77 @@
|
||||
[metadata]
|
||||
show_name = Hyper PETG
|
||||
material_type = petg
|
||||
filament_type = petg
|
||||
|
||||
|
||||
[settings]
|
||||
; filament_adhesiveness_category = 300
|
||||
idle_temperature = 160
|
||||
cool_plate_temp = 60
|
||||
eng_plate_temp = 0
|
||||
hot_plate_temp = 70
|
||||
textured_plate_temp = 70
|
||||
cool_plate_temp_initial_layer = 60
|
||||
eng_plate_temp_initial_layer = 0
|
||||
hot_plate_temp_initial_layer = 70
|
||||
textured_plate_temp_initial_layer = 70
|
||||
overhang_fan_threshold = 25%
|
||||
overhang_fan_speed = 90
|
||||
slow_down_for_layer_cooling = 1
|
||||
close_fan_the_first_x_layers = 3
|
||||
filament_end_gcode = ;filament end gcode \n
|
||||
filament_flow_ratio = 1.0
|
||||
reduce_fan_stop_start_freq = 1
|
||||
fan_cooling_layer_time = 30
|
||||
bed_temperature = 70
|
||||
first_layer_bed_temperature = 70
|
||||
;;;cool_plate_temp = 60
|
||||
;;;eng_plate_temp = 0
|
||||
;;;hot_plate_temp = 70
|
||||
;;;textured_plate_temp = 70
|
||||
;;;cool_plate_temp_initial_layer = 60
|
||||
;;;eng_plate_temp_initial_layer = 0
|
||||
;;;hot_plate_temp_initial_layer = 70
|
||||
;;;textured_plate_temp_initial_layer = 70
|
||||
;;;overhang_fan_threshold = 25%
|
||||
;;;overhang_fan_speed = 90
|
||||
;;;slow_down_for_layer_cooling = 1
|
||||
;;;close_fan_the_first_x_layers = 3
|
||||
;;;filament_end_gcode = ;filament end gcode \n
|
||||
extrusion_multiplier = 1.0
|
||||
;;;reduce_fan_stop_start_freq = 1
|
||||
;;;fan_cooling_layer_time = 30
|
||||
filament_cost = 69
|
||||
filament_density = 1.27
|
||||
filament_deretraction_speed = nil
|
||||
filament_deretract_speed = nil
|
||||
filament_diameter = 1.75
|
||||
filament_max_volumetric_speed = 10
|
||||
filament_minimal_purge_on_wipe_tower = 15
|
||||
filament_retraction_minimum_travel = nil
|
||||
;;;filament_retraction_minimum_travel = nil
|
||||
filament_retract_before_wipe = nil
|
||||
filament_retract_when_changing_layer = nil
|
||||
filament_retraction_length = 1.2
|
||||
filament_z_hop = 0.2
|
||||
filament_z_hop_types = nil
|
||||
;;;filament_retract_when_changing_layer = nil
|
||||
filament_retract_length = 1.2
|
||||
;;;filament_z_hop = 0.2
|
||||
;;;filament_z_hop_types = nil
|
||||
filament_retract_restart_extra = 0
|
||||
filament_retraction_speed = nil
|
||||
filament_settings_id =
|
||||
filament_retract_speed = nil
|
||||
;;;filament_settings_id =
|
||||
filament_soluble = 0
|
||||
filament_type = PETG
|
||||
filament_vendor = Creality
|
||||
;;;filament_vendor = Creality
|
||||
filament_wipe = nil
|
||||
filament_wipe_distance = 2
|
||||
bed_type = Cool Plate
|
||||
nozzle_temperature_initial_layer = 235
|
||||
;;;filament_wipe_distance = 2
|
||||
;;;bed_type = Cool Plate
|
||||
first_layer_temperature = 235
|
||||
full_fan_speed_layer = 0
|
||||
fan_max_speed = 80
|
||||
fan_min_speed = 40
|
||||
slow_down_min_speed = 10
|
||||
slow_down_layer_time = 8
|
||||
filament_start_gcode = ;filament start gcode\n
|
||||
nozzle_temperature = 240
|
||||
temperature_vitrification = 80
|
||||
activate_air_filtration = 0
|
||||
activate_chamber_temp_control = 0
|
||||
additional_cooling_fan_speed = 0
|
||||
max_fan_speed = 80
|
||||
min_fan_speed = 40
|
||||
;;;slow_down_min_speed = 10
|
||||
slowdown_below_layer_time = 8
|
||||
;;;filament_start_gcode = ;filament start gcode\n
|
||||
temperature = 240
|
||||
;;;temperature_vitrification = 80
|
||||
;;;activate_air_filtration = 0
|
||||
;;;activate_chamber_temp_control = 0
|
||||
;;;additional_cooling_fan_speed = 0
|
||||
chamber_temperature = 0
|
||||
complete_print_exhaust_fan_speed = 80
|
||||
cool_cds_fan_start_at_height = 0
|
||||
cool_special_cds_fan_speed = 0
|
||||
;;;complete_print_exhaust_fan_speed = 80
|
||||
;;;cool_cds_fan_start_at_height = 0
|
||||
;;;cool_special_cds_fan_speed = 0
|
||||
default_filament_colour = ""
|
||||
during_print_exhaust_fan_speed = 60
|
||||
enable_overhang_bridge_fan = 1
|
||||
enable_pressure_advance = 1
|
||||
enable_special_area_additional_cooling_fan = 0
|
||||
epoxy_resin_plate_temp = 0
|
||||
epoxy_resin_plate_temp_initial_layer = 0
|
||||
;;;during_print_exhaust_fan_speed = 60
|
||||
;;;enable_overhang_bridge_fan = 1
|
||||
;;;enable_pressure_advance = 1
|
||||
;;;enable_special_area_additional_cooling_fan = 0
|
||||
;;;epoxy_resin_plate_temp = 0
|
||||
;;;epoxy_resin_plate_temp_initial_layer = 0
|
||||
filament_cooling_final_speed = 3.4
|
||||
filament_cooling_initial_speed = 2.2
|
||||
filament_cooling_moves = 4
|
||||
filament_is_support = 0
|
||||
;;;filament_is_support = 0
|
||||
filament_load_time = 0
|
||||
filament_loading_speed = 28
|
||||
filament_loading_speed_start = 3
|
||||
@@ -80,16 +82,16 @@ filament_notes = ""
|
||||
filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
|
||||
filament_retract_lift_above = 0
|
||||
filament_retract_lift_below = 0
|
||||
filament_retract_lift_enforce = All Surfaces
|
||||
filament_shrink = 100%
|
||||
;;;filament_retract_lift_enforce = All Surfaces
|
||||
;;;filament_shrink = 100%
|
||||
filament_toolchange_delay = 0
|
||||
filament_unload_time = 0
|
||||
filament_unloading_speed = 90
|
||||
filament_unloading_speed_start = 100
|
||||
material_flow_dependent_temperature = 1
|
||||
material_flow_temp_graph = [[3.0,230],[10.0,240],[20.0,250]]
|
||||
nozzle_temperature_range_high = 270
|
||||
nozzle_temperature_range_low = 220
|
||||
pressure_advance = 0.07
|
||||
required_nozzle_HRC = 0
|
||||
support_material_interface_fan_speed = -1
|
||||
;;;material_flow_dependent_temperature = 1
|
||||
;;;material_flow_temp_graph = [[3.0,230],[10.0,240],[20.0,250]]
|
||||
;;;nozzle_temperature_range_high = 270
|
||||
;;;nozzle_temperature_range_low = 220
|
||||
;;;pressure_advance = 0.07
|
||||
;;;required_nozzle_HRC = 0
|
||||
;;;support_material_interface_fan_speed = -1
|
||||
|
||||
@@ -1,78 +1,79 @@
|
||||
[metadata]
|
||||
show_name = Hyper PLA
|
||||
material_type = pla
|
||||
filament_type = pla
|
||||
|
||||
|
||||
[settings]
|
||||
idle_temperature = 150
|
||||
bed_temperature = 60
|
||||
first_layer_bed_temperature = 60
|
||||
cool_plate_temp = 50
|
||||
eng_plate_temp = 45
|
||||
hot_plate_temp = 50
|
||||
textured_plate_temp = 50
|
||||
cool_plate_temp_initial_layer = 50
|
||||
eng_plate_temp_initial_layer = 45
|
||||
hot_plate_temp_initial_layer = 50
|
||||
textured_plate_temp_initial_layer = 50
|
||||
overhang_fan_threshold = 50%
|
||||
overhang_fan_speed = 100
|
||||
slow_down_for_layer_cooling = 1
|
||||
close_fan_the_first_x_layers = 1
|
||||
filament_end_gcode = ;filament end gcode
|
||||
filament_flow_ratio = 0.95
|
||||
reduce_fan_stop_start_freq = 1
|
||||
fan_cooling_layer_time = 100
|
||||
;;;cool_plate_temp = 50
|
||||
;;;eng_plate_temp = 45
|
||||
;;;hot_plate_temp = 50
|
||||
;;;textured_plate_temp = 50
|
||||
;;;cool_plate_temp_initial_layer = 50
|
||||
;;;eng_plate_temp_initial_layer = 45
|
||||
;;;hot_plate_temp_initial_layer = 50
|
||||
;;;textured_plate_temp_initial_layer = 50
|
||||
;;;overhang_fan_threshold = 50%
|
||||
;;;overhang_fan_speed = 100
|
||||
;;;slow_down_for_layer_cooling = 1
|
||||
;;;close_fan_the_first_x_layers = 1
|
||||
;;;filament_end_gcode = ;filament end gcode
|
||||
extrusion_multiplier = 0.95
|
||||
;;;reduce_fan_stop_start_freq = 1
|
||||
;;;fan_cooling_layer_time = 100
|
||||
filament_cost = 30
|
||||
filament_density = 1.24
|
||||
filament_deretraction_speed = nil
|
||||
filament_deretract_speed = nil
|
||||
filament_diameter = 1.75
|
||||
filament_max_volumetric_speed = 23
|
||||
filament_minimal_purge_on_wipe_tower = 15
|
||||
filament_retraction_minimum_travel = nil
|
||||
;;;filament_retraction_minimum_travel = nil
|
||||
filament_retract_before_wipe = nil
|
||||
filament_retract_when_changing_layer = nil
|
||||
filament_retraction_length = 1.2
|
||||
filament_z_hop = 0.2
|
||||
filament_z_hop_types = Slope Lift
|
||||
;;;filament_retract_when_changing_layer = nil
|
||||
filament_retract_length = 1.2
|
||||
;;;filament_z_hop = 0.2
|
||||
;;;filament_z_hop_types = Slope Lift
|
||||
filament_retract_restart_extra = 0
|
||||
filament_retraction_speed = 40
|
||||
filament_settings_id =
|
||||
filament_retract_speed = 40
|
||||
;;;filament_settings_id =
|
||||
filament_soluble = 0
|
||||
filament_type = PLA
|
||||
filament_vendor = Creality
|
||||
;;;filament_vendor = Creality
|
||||
filament_wipe = nil
|
||||
filament_wipe_distance = nil
|
||||
bed_type = Cool Plate
|
||||
nozzle_temperature_initial_layer = 190
|
||||
;;;filament_wipe_distance = nil
|
||||
;;;bed_type = Cool Plate
|
||||
first_layer_temperature = 190
|
||||
full_fan_speed_layer = 0
|
||||
fan_max_speed = 100
|
||||
fan_min_speed = 100
|
||||
slow_down_min_speed = 20
|
||||
slow_down_layer_time = 6
|
||||
filament_start_gcode = ;filament start gcode
|
||||
nozzle_temperature = 190
|
||||
temperature_vitrification = 100
|
||||
max_fan_speed = 100
|
||||
min_fan_speed = 100
|
||||
;;;slow_down_min_speed = 20
|
||||
slowdown_below_layer_time = 6
|
||||
;;;filament_start_gcode = ;filament start gcode
|
||||
temperature = 190
|
||||
;;;temperature_vitrification = 100
|
||||
; filament_adhesiveness_category = 100
|
||||
nozzle_temperature_range_low = 190
|
||||
nozzle_temperature_range_high = 240
|
||||
additional_cooling_fan_speed = 0
|
||||
activate_air_filtration = 0
|
||||
activate_chamber_temp_control = 0
|
||||
;;;nozzle_temperature_range_low = 190
|
||||
;;;nozzle_temperature_range_high = 240
|
||||
;;;additional_cooling_fan_speed = 0
|
||||
;;;activate_air_filtration = 0
|
||||
;;;activate_chamber_temp_control = 0
|
||||
chamber_temperature = 0
|
||||
complete_print_exhaust_fan_speed = 80
|
||||
cool_cds_fan_start_at_height = 0
|
||||
cool_special_cds_fan_speed = 0
|
||||
;;;complete_print_exhaust_fan_speed = 80
|
||||
;;;cool_cds_fan_start_at_height = 0
|
||||
;;;cool_special_cds_fan_speed = 0
|
||||
default_filament_colour = ""
|
||||
during_print_exhaust_fan_speed = 60
|
||||
enable_overhang_bridge_fan = 1
|
||||
enable_pressure_advance = 0
|
||||
enable_special_area_additional_cooling_fan = 0
|
||||
epoxy_resin_plate_temp = 0
|
||||
epoxy_resin_plate_temp_initial_layer = 0
|
||||
;;;during_print_exhaust_fan_speed = 60
|
||||
;;;enable_overhang_bridge_fan = 1
|
||||
;;;enable_pressure_advance = 0
|
||||
;;;enable_special_area_additional_cooling_fan = 0
|
||||
;;;epoxy_resin_plate_temp = 0
|
||||
;;;epoxy_resin_plate_temp_initial_layer = 0
|
||||
filament_cooling_final_speed = 3.4
|
||||
filament_cooling_initial_speed = 2.2
|
||||
filament_cooling_moves = 4
|
||||
filament_is_support = 0
|
||||
;;;filament_is_support = 0
|
||||
filament_load_time = 0
|
||||
filament_loading_speed = 28
|
||||
filament_loading_speed_start = 3
|
||||
@@ -83,14 +84,14 @@ filament_notes = ""
|
||||
filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
|
||||
filament_retract_lift_above = 0
|
||||
filament_retract_lift_below = 0
|
||||
filament_retract_lift_enforce = All Surfaces
|
||||
filament_shrink = 100%
|
||||
;;;filament_retract_lift_enforce = All Surfaces
|
||||
;;;filament_shrink = 100%
|
||||
filament_toolchange_delay = 0
|
||||
filament_unload_time = 0
|
||||
filament_unloading_speed = 90
|
||||
filament_unloading_speed_start = 100
|
||||
material_flow_dependent_temperature = 0
|
||||
material_flow_temp_graph = [[3.5,200],[7.0,240]]
|
||||
pressure_advance = 0.02
|
||||
required_nozzle_HRC = 0
|
||||
support_material_interface_fan_speed = -1
|
||||
;;;material_flow_dependent_temperature = 0
|
||||
;;;material_flow_temp_graph = [[3.5,200],[7.0,240]]
|
||||
;;;pressure_advance = 0.02
|
||||
;;;required_nozzle_HRC = 0
|
||||
;;;support_material_interface_fan_speed = -1
|
||||
|
||||
@@ -1,80 +1,81 @@
|
||||
[metadata]
|
||||
show_name = Hyper Stardust PLA
|
||||
material_type = pla
|
||||
filament_type = pla
|
||||
|
||||
|
||||
[settings]
|
||||
idle_temperature = 150
|
||||
bed_temperature = 60
|
||||
first_layer_bed_temperature = 60
|
||||
cool_plate_temp = 50
|
||||
eng_plate_temp = 45
|
||||
hot_plate_temp = 50
|
||||
textured_plate_temp = 50
|
||||
cool_plate_temp_initial_layer = 50
|
||||
eng_plate_temp_initial_layer = 45
|
||||
hot_plate_temp_initial_layer = 50
|
||||
textured_plate_temp_initial_layer = 50
|
||||
overhang_fan_threshold = 50%
|
||||
overhang_fan_speed = 100
|
||||
slow_down_for_layer_cooling = 1
|
||||
close_fan_the_first_x_layers = 1
|
||||
filament_end_gcode = ;filament end gcode
|
||||
filament_flow_ratio = 0.95
|
||||
reduce_fan_stop_start_freq = 1
|
||||
fan_cooling_layer_time = 100
|
||||
;;;cool_plate_temp = 50
|
||||
;;;eng_plate_temp = 45
|
||||
;;;hot_plate_temp = 50
|
||||
;;;textured_plate_temp = 50
|
||||
;;;cool_plate_temp_initial_layer = 50
|
||||
;;;eng_plate_temp_initial_layer = 45
|
||||
;;;hot_plate_temp_initial_layer = 50
|
||||
;;;textured_plate_temp_initial_layer = 50
|
||||
;;;overhang_fan_threshold = 50%
|
||||
;;;overhang_fan_speed = 100
|
||||
;;;slow_down_for_layer_cooling = 1
|
||||
;;;close_fan_the_first_x_layers = 1
|
||||
;;;filament_end_gcode = ;filament end gcode
|
||||
extrusion_multiplier = 0.95
|
||||
;;;reduce_fan_stop_start_freq = 1
|
||||
;;;fan_cooling_layer_time = 100
|
||||
filament_cost = 26.9
|
||||
filament_density = 1.24
|
||||
filament_deretraction_speed = 15
|
||||
filament_deretract_speed = 15
|
||||
filament_diameter = 1.75
|
||||
filament_max_volumetric_speed = 18
|
||||
filament_minimal_purge_on_wipe_tower = 15
|
||||
filament_retraction_minimum_travel = 2
|
||||
;;;filament_retraction_minimum_travel = 2
|
||||
filament_retract_before_wipe = nil
|
||||
filament_retract_when_changing_layer = nil
|
||||
filament_retraction_length = 2
|
||||
filament_z_hop = nil
|
||||
filament_z_hop_types = nil
|
||||
;;;filament_retract_when_changing_layer = nil
|
||||
filament_retract_length = 2
|
||||
;;;filament_z_hop = nil
|
||||
;;;filament_z_hop_types = nil
|
||||
filament_retract_restart_extra = nil
|
||||
filament_retraction_speed = 15
|
||||
filament_settings_id =
|
||||
filament_retract_speed = 15
|
||||
;;;filament_settings_id =
|
||||
filament_soluble = 0
|
||||
filament_type = PLA
|
||||
filament_vendor = Creality
|
||||
;;;filament_vendor = Creality
|
||||
filament_wipe = nil
|
||||
filament_wipe_distance = 3
|
||||
bed_type = Cool Plate
|
||||
nozzle_temperature_initial_layer = 220
|
||||
;;;filament_wipe_distance = 3
|
||||
;;;bed_type = Cool Plate
|
||||
first_layer_temperature = 220
|
||||
full_fan_speed_layer = 0
|
||||
fan_max_speed = 100
|
||||
fan_min_speed = 100
|
||||
slow_down_min_speed = 10
|
||||
slow_down_layer_time = 14
|
||||
filament_start_gcode = ;filament start gcode
|
||||
nozzle_temperature = 220
|
||||
temperature_vitrification = 60
|
||||
max_fan_speed = 100
|
||||
min_fan_speed = 100
|
||||
;;;slow_down_min_speed = 10
|
||||
slowdown_below_layer_time = 14
|
||||
;;;filament_start_gcode = ;filament start gcode
|
||||
temperature = 220
|
||||
;;;temperature_vitrification = 60
|
||||
; filament_adhesiveness_category = 100
|
||||
nozzle_temperature_range_low = 190
|
||||
nozzle_temperature_range_high = 240
|
||||
additional_cooling_fan_speed = 0
|
||||
activate_air_filtration = 0
|
||||
activate_chamber_temp_control = 0
|
||||
;;;nozzle_temperature_range_low = 190
|
||||
;;;nozzle_temperature_range_high = 240
|
||||
;;;additional_cooling_fan_speed = 0
|
||||
;;;activate_air_filtration = 0
|
||||
;;;activate_chamber_temp_control = 0
|
||||
chamber_temperature = 0
|
||||
complete_print_exhaust_fan_speed = 80
|
||||
cool_cds_fan_start_at_height = 0.5
|
||||
cool_special_cds_fan_speed = 0
|
||||
customized_plate_temp = 50
|
||||
customized_plate_temp_initial_layer = 50
|
||||
;;;complete_print_exhaust_fan_speed = 80
|
||||
;;;cool_cds_fan_start_at_height = 0.5
|
||||
;;;cool_special_cds_fan_speed = 0
|
||||
;;;customized_plate_temp = 50
|
||||
;;;customized_plate_temp_initial_layer = 50
|
||||
default_filament_colour = ""
|
||||
during_print_exhaust_fan_speed = 60
|
||||
enable_overhang_bridge_fan = 1
|
||||
enable_pressure_advance = 1
|
||||
enable_special_area_additional_cooling_fan = 0
|
||||
epoxy_resin_plate_temp = 50
|
||||
epoxy_resin_plate_temp_initial_layer = 50
|
||||
;;;during_print_exhaust_fan_speed = 60
|
||||
;;;enable_overhang_bridge_fan = 1
|
||||
;;;enable_pressure_advance = 1
|
||||
;;;enable_special_area_additional_cooling_fan = 0
|
||||
;;;epoxy_resin_plate_temp = 50
|
||||
;;;epoxy_resin_plate_temp_initial_layer = 50
|
||||
filament_cooling_final_speed = 3.4
|
||||
filament_cooling_initial_speed = 2.2
|
||||
filament_cooling_moves = 4
|
||||
filament_is_support = 0
|
||||
;;;filament_is_support = 0
|
||||
filament_load_time = 0
|
||||
filament_loading_speed = 28
|
||||
filament_loading_speed_start = 3
|
||||
@@ -85,15 +86,15 @@ filament_notes = ""
|
||||
filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
|
||||
filament_retract_lift_above = nil
|
||||
filament_retract_lift_below = nil
|
||||
filament_retract_lift_enforce = nil
|
||||
filament_shrink = 100%
|
||||
;;;filament_retract_lift_enforce = nil
|
||||
;;;filament_shrink = 100%
|
||||
filament_shrinkage_compensation_z = 100%
|
||||
filament_toolchange_delay = 0
|
||||
filament_unload_time = 0
|
||||
filament_unloading_speed = 90
|
||||
filament_unloading_speed_start = 100
|
||||
material_flow_dependent_temperature = 0
|
||||
material_flow_temp_graph = [[0.8,200],[1.0,200],[1.2,220]]
|
||||
pressure_advance = 0.04
|
||||
required_nozzle_HRC = 0
|
||||
support_material_interface_fan_speed = -1
|
||||
;;;material_flow_dependent_temperature = 0
|
||||
;;;material_flow_temp_graph = [[0.8,200],[1.0,200],[1.2,220]]
|
||||
;;;pressure_advance = 0.04
|
||||
;;;required_nozzle_HRC = 0
|
||||
;;;support_material_interface_fan_speed = -1
|
||||
|
||||
@@ -1,80 +1,81 @@
|
||||
[metadata]
|
||||
show_name = Soleyin Ultra PLA
|
||||
material_type = pla
|
||||
filament_type = pla
|
||||
|
||||
|
||||
[settings]
|
||||
idle_temperature = 150
|
||||
bed_temperature = 60
|
||||
first_layer_bed_temperature = 60
|
||||
cool_plate_temp = 50
|
||||
eng_plate_temp = 45
|
||||
hot_plate_temp = 50
|
||||
textured_plate_temp = 50
|
||||
cool_plate_temp_initial_layer = 50
|
||||
eng_plate_temp_initial_layer = 45
|
||||
hot_plate_temp_initial_layer = 50
|
||||
textured_plate_temp_initial_layer = 50
|
||||
overhang_fan_threshold = 50%
|
||||
overhang_fan_speed = 100
|
||||
slow_down_for_layer_cooling = 1
|
||||
close_fan_the_first_x_layers = 1
|
||||
filament_end_gcode = ;filament end gcode
|
||||
filament_flow_ratio = 0.96
|
||||
reduce_fan_stop_start_freq = 1
|
||||
fan_cooling_layer_time = 100
|
||||
;;;cool_plate_temp = 50
|
||||
;;;eng_plate_temp = 45
|
||||
;;;hot_plate_temp = 50
|
||||
;;;textured_plate_temp = 50
|
||||
;;;cool_plate_temp_initial_layer = 50
|
||||
;;;eng_plate_temp_initial_layer = 45
|
||||
;;;hot_plate_temp_initial_layer = 50
|
||||
;;;textured_plate_temp_initial_layer = 50
|
||||
;;;overhang_fan_threshold = 50%
|
||||
;;;overhang_fan_speed = 100
|
||||
;;;slow_down_for_layer_cooling = 1
|
||||
;;;close_fan_the_first_x_layers = 1
|
||||
;;;filament_end_gcode = ;filament end gcode
|
||||
extrusion_multiplier = 0.96
|
||||
;;;reduce_fan_stop_start_freq = 1
|
||||
;;;fan_cooling_layer_time = 100
|
||||
filament_cost = 6
|
||||
filament_density = 1.25
|
||||
filament_deretraction_speed = 15
|
||||
filament_deretract_speed = 15
|
||||
filament_diameter = 1.75
|
||||
filament_max_volumetric_speed = 16
|
||||
filament_minimal_purge_on_wipe_tower = 15
|
||||
filament_retraction_minimum_travel = nil
|
||||
;;;filament_retraction_minimum_travel = nil
|
||||
filament_retract_before_wipe = 90%
|
||||
filament_retract_when_changing_layer = nil
|
||||
filament_retraction_length = nil
|
||||
filament_z_hop = nil
|
||||
filament_z_hop_types = nil
|
||||
;;;filament_retract_when_changing_layer = nil
|
||||
filament_retract_length = nil
|
||||
;;;filament_z_hop = nil
|
||||
;;;filament_z_hop_types = nil
|
||||
filament_retract_restart_extra = nil
|
||||
filament_retraction_speed = 15
|
||||
filament_settings_id =
|
||||
filament_retract_speed = 15
|
||||
;;;filament_settings_id =
|
||||
filament_soluble = 0
|
||||
filament_type = PLA
|
||||
filament_vendor = Creality
|
||||
;;;filament_vendor = Creality
|
||||
filament_wipe = nil
|
||||
filament_wipe_distance = nil
|
||||
bed_type = Cool Plate
|
||||
nozzle_temperature_initial_layer = 220
|
||||
;;;filament_wipe_distance = nil
|
||||
;;;bed_type = Cool Plate
|
||||
first_layer_temperature = 220
|
||||
full_fan_speed_layer = 0
|
||||
fan_max_speed = 100
|
||||
fan_min_speed = 100
|
||||
slow_down_min_speed = 20
|
||||
slow_down_layer_time = 12
|
||||
filament_start_gcode = ;filament start gcode
|
||||
nozzle_temperature = 220
|
||||
temperature_vitrification = 60
|
||||
max_fan_speed = 100
|
||||
min_fan_speed = 100
|
||||
;;;slow_down_min_speed = 20
|
||||
slowdown_below_layer_time = 12
|
||||
;;;filament_start_gcode = ;filament start gcode
|
||||
temperature = 220
|
||||
;;;temperature_vitrification = 60
|
||||
; filament_adhesiveness_category = 100
|
||||
nozzle_temperature_range_low = 190
|
||||
nozzle_temperature_range_high = 240
|
||||
additional_cooling_fan_speed = 0
|
||||
activate_air_filtration = 0
|
||||
activate_chamber_temp_control = 0
|
||||
;;;nozzle_temperature_range_low = 190
|
||||
;;;nozzle_temperature_range_high = 240
|
||||
;;;additional_cooling_fan_speed = 0
|
||||
;;;activate_air_filtration = 0
|
||||
;;;activate_chamber_temp_control = 0
|
||||
chamber_temperature = 0
|
||||
complete_print_exhaust_fan_speed = 80
|
||||
cool_cds_fan_start_at_height = 0
|
||||
cool_special_cds_fan_speed = 0
|
||||
customized_plate_temp = 60
|
||||
customized_plate_temp_initial_layer = 60
|
||||
;;;complete_print_exhaust_fan_speed = 80
|
||||
;;;cool_cds_fan_start_at_height = 0
|
||||
;;;cool_special_cds_fan_speed = 0
|
||||
;;;customized_plate_temp = 60
|
||||
;;;customized_plate_temp_initial_layer = 60
|
||||
default_filament_colour = ""
|
||||
during_print_exhaust_fan_speed = 60
|
||||
enable_overhang_bridge_fan = 1
|
||||
enable_pressure_advance = 1
|
||||
enable_special_area_additional_cooling_fan = 0
|
||||
epoxy_resin_plate_temp = 60
|
||||
epoxy_resin_plate_temp_initial_layer = 60
|
||||
;;;during_print_exhaust_fan_speed = 60
|
||||
;;;enable_overhang_bridge_fan = 1
|
||||
;;;enable_pressure_advance = 1
|
||||
;;;enable_special_area_additional_cooling_fan = 0
|
||||
;;;epoxy_resin_plate_temp = 60
|
||||
;;;epoxy_resin_plate_temp_initial_layer = 60
|
||||
filament_cooling_final_speed = 3.4
|
||||
filament_cooling_initial_speed = 2.2
|
||||
filament_cooling_moves = 4
|
||||
filament_is_support = 0
|
||||
;;;filament_is_support = 0
|
||||
filament_load_time = 0
|
||||
filament_loading_speed = 28
|
||||
filament_loading_speed_start = 3
|
||||
@@ -85,15 +86,15 @@ filament_notes = ""
|
||||
filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
|
||||
filament_retract_lift_above = nil
|
||||
filament_retract_lift_below = nil
|
||||
filament_retract_lift_enforce = nil
|
||||
filament_shrink = 100%
|
||||
;;;filament_retract_lift_enforce = nil
|
||||
;;;filament_shrink = 100%
|
||||
filament_shrinkage_compensation_z = 100%
|
||||
filament_toolchange_delay = 0
|
||||
filament_unload_time = 0
|
||||
filament_unloading_speed = 90
|
||||
filament_unloading_speed_start = 100
|
||||
material_flow_dependent_temperature = 0
|
||||
material_flow_temp_graph = [[1.0,200],[1.1,200],[1.2,220]]
|
||||
pressure_advance = 0.05
|
||||
required_nozzle_HRC = 0
|
||||
support_material_interface_fan_speed = -1
|
||||
;;;material_flow_dependent_temperature = 0
|
||||
;;;material_flow_temp_graph = [[1.0,200],[1.1,200],[1.2,220]]
|
||||
;;;pressure_advance = 0.05
|
||||
;;;required_nozzle_HRC = 0
|
||||
;;;support_material_interface_fan_speed = -1
|
||||
|
||||
@@ -13,8 +13,8 @@ silent_mode = 0
|
||||
machine_max_acceleration_e = 5000,5000
|
||||
machine_max_acceleration_extruding = 5000,5000
|
||||
machine_max_acceleration_retracting = 2500,2500
|
||||
machine_max_acceleration_x = 5000,5000
|
||||
machine_max_acceleration_y = 5000,5000
|
||||
machine_max_acceleration_x = 2000,2000
|
||||
machine_max_acceleration_y = 2000,2000
|
||||
machine_max_acceleration_z = 500,500
|
||||
machine_max_speed_e = 100,100
|
||||
machine_max_speed_x = 500,500
|
||||
@@ -30,8 +30,8 @@ max_layer_height = 0.36
|
||||
min_layer_height = 0.08
|
||||
max_print_height = 250
|
||||
extruder_clearance_radius = 90
|
||||
extruder_clearance_height_to_rod = 47
|
||||
extruder_clearance_height_to_lid = 34
|
||||
;;;extruder_clearance_height_to_rod = 47
|
||||
;;;extruder_clearance_height_to_lid = 34
|
||||
nozzle_diameter = 0.4
|
||||
printer_variant = 0.4
|
||||
retract_before_travel = 1
|
||||
@@ -39,8 +39,8 @@ retract_before_wipe = 100
|
||||
retract_layer_change = 1
|
||||
retract_length = 0.8
|
||||
retract_length_toolchange = 1
|
||||
z_hop = 0.4
|
||||
z_hop_types = Slope Lift
|
||||
retract_lift = 0.4
|
||||
;;;z_hop_types = Slope Lift
|
||||
retract_restart_extra = 0
|
||||
retract_restart_extra_toolchange = 0
|
||||
retract_speed = 30
|
||||
@@ -48,9 +48,9 @@ single_extruder_multi_material = 1
|
||||
start_filament_gcode = ;Do nothing
|
||||
wipe = 1
|
||||
before_layer_gcode = ;BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n
|
||||
start_gcode = M220 S100 ;Reset Feedrate \nM221 S100 ;Reset Flowrate \n \nM140 S{first_layer_bed_temperature[0]} ;Set final bed temp \nG28 ;Home \n \nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nM104 S{idle_temperature[0]} ;Set final nozzle temp \nG1 X-2.1 Y20 Z0.28 F5000.0 ;Move to start position \nM190 S{first_layer_bed_temperature[0]} ;Wait for bed temp to stabilize \nM109 S{idle_temperature[0]} ;Wait for nozzle temp to stabilize \nG1 X-2.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X-2.4 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X-2.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset Extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800
|
||||
start_gcode = M220 S100 ;Reset Feedrate \nM221 S100 ;Reset Flowrate \n \nM140 S{first_layer_bed_temperature[0]} ;Set final bed temp \nG28 ;Home \n \nG92 E0 ;Reset Extruder \nG1 Z20.0 F3000 ;Move Z Axis up \nM104 S{first_layer_temperature[0]} ;Set final nozzle temp \nG1 X-13 Y20 Z3 F5000.0 ;Move to out position \nM190 S{first_layer_bed_temperature[0]} ;Wait for bed temp to stabilize \nM109 S{first_layer_temperature[0]} ;Wait for nozzle temp to stabilize \nG1 X-2.1 Y20 Z0.28 F5000.0 ;Move to start position \nG1 X-2.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X-2.4 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X-2.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset Extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800
|
||||
end_gcode = G91 ;Relative positionning \nG1 E-2 F2700 ;Retract a bit \nG1 E-2 Z0.2 F2400 ;Retract and raise Z \nG1 X5 Y5 F3000 ;Wipe out \nG1 Z10 ;Raise Z more \nG90 ;Absolute positionning \n \nG1 X0 Y220 ;Present print \nM106 S0 ;Turn-off fan \nM104 S0 ;Turn-off hotend \nM140 S0 ;Turn-off bed \n \nM84 X Y E ;Disable all steppers but Z
|
||||
machine_max_acceleration_travel = 5000,5000
|
||||
machine_max_acceleration_travel = 2000,2000
|
||||
pause_print_gcode = M25
|
||||
after_layer_gcode =
|
||||
printer_model = Creality Ender-3 V3 SE
|
||||
|
||||
@@ -3,214 +3,214 @@ show_name = 0.08mm Extra Fine Quality
|
||||
|
||||
|
||||
[settings]
|
||||
adaptive_layer_height = 0
|
||||
reduce_crossing_wall = 0
|
||||
bridge_flow = 0.8
|
||||
variable_layer_height = 0
|
||||
avoid_crossing_perimeters = 0
|
||||
bridge_flow_ratio = 0.8
|
||||
bridge_speed = 25
|
||||
brim_width = 5
|
||||
print_sequence = by layer
|
||||
complete_objects = 0
|
||||
default_acceleration = 2500
|
||||
bridge_no_support = 0
|
||||
dont_support_bridges = 0
|
||||
elefant_foot_compensation = 0.15
|
||||
outer_wall_line_width = 0.42
|
||||
outer_wall_speed = 60
|
||||
line_width = 0.46
|
||||
infill_direction = 45
|
||||
sparse_infill_density = 10%
|
||||
sparse_infill_pattern = zig-zag
|
||||
initial_layer_line_width = 0.46
|
||||
initial_layer_print_height = 0.2
|
||||
initial_layer_speed = 60
|
||||
gap_infill_speed = 50
|
||||
infill_combination = 0
|
||||
sparse_infill_line_width = 0.45
|
||||
infill_wall_overlap = 15%
|
||||
sparse_infill_speed = 180
|
||||
external_perimeter_extrusion_width = 0.42
|
||||
external_perimeter_speed = 60
|
||||
extrusion_width = 0.46
|
||||
fill_angle = 45
|
||||
fill_density = 10%
|
||||
fill_pattern = zigzag
|
||||
first_layer_extrusion_width = 0.46
|
||||
first_layer_height = 0.2
|
||||
first_layer_speed = 60
|
||||
gap_fill_speed = 50
|
||||
solid_infill_every_layers = 0
|
||||
infill_extrusion_width = 0.45
|
||||
infill_overlap = 15%
|
||||
infill_speed = 180
|
||||
interface_shells = 0
|
||||
detect_overhang_wall = 1
|
||||
reduce_infill_retraction = 1
|
||||
wall_loops = 2
|
||||
inner_wall_line_width = 0.45
|
||||
inner_wall_speed = 90
|
||||
print_settings_id =
|
||||
;;;detect_overhang_wall = 1
|
||||
;;;reduce_infill_retraction = 1
|
||||
perimeters = 2
|
||||
perimeter_extrusion_width = 0.45
|
||||
perimeter_speed = 90
|
||||
;;;print_settings_id =
|
||||
raft_layers = 0
|
||||
seam_position = aligned
|
||||
skirt_distance = 2
|
||||
skirt_height = 2
|
||||
minimum_sparse_infill_area = 10
|
||||
internal_solid_infill_line_width = 0.42
|
||||
internal_solid_infill_speed = 180
|
||||
spiral_mode = 0
|
||||
solid_infill_below_area = 10
|
||||
solid_infill_extrusion_width = 0.42
|
||||
solid_infill_speed = 180
|
||||
spiral_vase = 0
|
||||
standby_temperature_delta = -5
|
||||
detect_thin_wall = 1
|
||||
top_surface_line_width = 0.42
|
||||
top_surface_speed = 50
|
||||
thin_walls = 1
|
||||
top_infill_extrusion_width = 0.42
|
||||
top_solid_infill_speed = 50
|
||||
travel_speed = 150
|
||||
enable_prime_tower = 0
|
||||
prime_tower_width = 60
|
||||
xy_hole_compensation = 0
|
||||
xy_contour_compensation = 0
|
||||
max_travel_detour_distance = 0
|
||||
bottom_surface_pattern = monotonic
|
||||
bottom_shell_layers = 7
|
||||
bottom_shell_thickness = 0
|
||||
brim_object_gap = 0.1
|
||||
compatible_printers_condition =
|
||||
top_surface_acceleration = 2500
|
||||
wipe_tower = 0
|
||||
wipe_tower_width = 60
|
||||
xy_size_compensation = 0
|
||||
;;;xy_contour_compensation = 0
|
||||
;;;max_travel_detour_distance = 0
|
||||
bottom_fill_pattern = monotonic
|
||||
bottom_solid_layers = 7
|
||||
bottom_solid_min_thickness = 0
|
||||
;;;brim_object_gap = 0.1
|
||||
;;;compatible_printers_condition =
|
||||
top_solid_infill_acceleration = 2500
|
||||
draft_shield = disabled
|
||||
enable_arc_fitting = 0
|
||||
wall_infill_order = inner wall/outer wall/infill
|
||||
initial_layer_acceleration = 500
|
||||
arc_fitting = disabled
|
||||
;;;wall_infill_order = inner wall/outer wall/infill
|
||||
first_layer_acceleration = 500
|
||||
travel_acceleration = 2500
|
||||
inner_wall_acceleration = 2000
|
||||
ironing_flow = 15%
|
||||
perimeter_acceleration = 2000
|
||||
ironing_flowrate = 15%
|
||||
ironing_spacing = 0.1
|
||||
ironing_speed = 20
|
||||
ironing_type = top
|
||||
layer_height = 0.08
|
||||
overhang_1_4_speed = 0
|
||||
overhang_2_4_speed = 20
|
||||
overhang_3_4_speed = 15
|
||||
overhang_4_4_speed = 10
|
||||
skirt_loops = 0
|
||||
overhang_speed_0 = 0
|
||||
overhang_speed_1 = 20
|
||||
overhang_speed_2 = 15
|
||||
overhang_speed_3 = 10
|
||||
skirts = 2
|
||||
resolution = 0.012
|
||||
top_surface_pattern = monotonicline
|
||||
top_shell_layers = 9
|
||||
top_shell_thickness = 0.8
|
||||
initial_layer_infill_speed = 80
|
||||
top_fill_pattern = monotonicline
|
||||
top_solid_layers = 9
|
||||
top_solid_min_thickness = 0.8
|
||||
first_layer_infill_speed = 80
|
||||
wipe_tower_no_sparse_layers = 0
|
||||
accel_to_decel_enable = 1
|
||||
accel_to_decel_factor = 50%
|
||||
acceleration_limit_mess = [[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]
|
||||
acceleration_limit_mess_enable = 0
|
||||
alternate_extra_wall = 0
|
||||
bottom_solid_infill_flow_ratio = 1
|
||||
;;;accel_to_decel_enable = 1
|
||||
;;;accel_to_decel_factor = 50%
|
||||
;;;acceleration_limit_mess = [[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]
|
||||
;;;acceleration_limit_mess_enable = 0
|
||||
;;;alternate_extra_wall = 0
|
||||
;;;bottom_solid_infill_flow_ratio = 1
|
||||
bridge_acceleration = 50%
|
||||
bridge_angle = 0
|
||||
bridge_density = 100%
|
||||
brim_ears_detection_length = 1
|
||||
brim_ears_max_angle = 125
|
||||
;;;bridge_density = 100%
|
||||
;;;brim_ears_detection_length = 1
|
||||
;;;brim_ears_max_angle = 125
|
||||
brim_type = no_brim
|
||||
default_jerk = 8
|
||||
detect_narrow_internal_solid_infill = 1
|
||||
elefant_foot_compensation_layers = 1
|
||||
enable_overhang_speed = 1
|
||||
enforce_support_layers = 0
|
||||
;;;default_jerk = 8
|
||||
;;;detect_narrow_internal_solid_infill = 1
|
||||
;;;elefant_foot_compensation_layers = 1
|
||||
enable_dynamic_overhang_speeds = 1
|
||||
support_material_enforce_layers = 0
|
||||
ensure_vertical_shell_thickness = ensure_all
|
||||
exclude_object = 0
|
||||
;;;exclude_object = 0
|
||||
extra_perimeters_on_overhangs = 0
|
||||
filter_out_gap_fill = 0
|
||||
flush_into_infill = 0
|
||||
flush_into_objects = 0
|
||||
flush_into_support = 1
|
||||
;;;filter_out_gap_fill = 0
|
||||
;;;flush_into_infill = 0
|
||||
;;;flush_into_objects = 0
|
||||
;;;flush_into_support = 1
|
||||
fuzzy_skin = none
|
||||
fuzzy_skin_first_layer = 0
|
||||
fuzzy_skin_point_distance = 0.8
|
||||
;;;fuzzy_skin_first_layer = 0
|
||||
fuzzy_skin_point_dist = 0.8
|
||||
fuzzy_skin_thickness = 0.3
|
||||
gcode_add_line_number = 0
|
||||
;;;gcode_add_line_number = 0
|
||||
gcode_comments = 0
|
||||
gcode_label_objects = 1
|
||||
hole_to_polyhole = 0
|
||||
hole_to_polyhole_threshold = 0.01
|
||||
hole_to_polyhole_twisted = 1
|
||||
independent_support_layer_height = 1
|
||||
;;;hole_to_polyhole = 0
|
||||
;;;hole_to_polyhole_threshold = 0.01
|
||||
;;;hole_to_polyhole_twisted = 1
|
||||
;;;independent_support_layer_height = 1
|
||||
infill_anchor = 400%
|
||||
infill_anchor_max = 20
|
||||
infill_jerk = 20
|
||||
initial_layer_jerk = 8
|
||||
initial_layer_min_bead_width = 85%
|
||||
initial_layer_travel_speed = 100%
|
||||
inner_wall_jerk = 20
|
||||
internal_bridge_flow = 1
|
||||
internal_bridge_speed = 150%
|
||||
internal_solid_infill_acceleration = 100%
|
||||
internal_solid_infill_pattern = monotonic
|
||||
ironing_angle = -1
|
||||
ironing_pattern = zig-zag
|
||||
ironing_support_layer = 0
|
||||
is_infill_first = 0
|
||||
make_overhang_printable = 0
|
||||
make_overhang_printable_angle = 55
|
||||
make_overhang_printable_hole_size = 0
|
||||
max_bridge_length = 10
|
||||
max_volumetric_extrusion_rate_slope = 0
|
||||
max_volumetric_extrusion_rate_slope_segment_length = 3
|
||||
;;;infill_jerk = 20
|
||||
;;;initial_layer_jerk = 8
|
||||
;;;initial_layer_min_bead_width = 85%
|
||||
;;;initial_layer_travel_speed = 100%
|
||||
;;;inner_wall_jerk = 20
|
||||
;;;internal_bridge_flow = 1
|
||||
;;;internal_bridge_speed = 150%
|
||||
solid_infill_acceleration = 100%
|
||||
solid_fill_pattern = monotonic
|
||||
;;;ironing_angle = -1
|
||||
;;;ironing_pattern = zigzag
|
||||
;;;ironing_support_layer = 0
|
||||
infill_first = 0
|
||||
;;;make_overhang_printable = 0
|
||||
;;;make_overhang_printable_angle = 55
|
||||
;;;make_overhang_printable_hole_size = 0
|
||||
;;;max_bridge_length = 10
|
||||
;;;max_volumetric_extrusion_rate_slope = 0
|
||||
;;;max_volumetric_extrusion_rate_slope_segment_length = 3
|
||||
min_bead_width = 85%
|
||||
min_feature_size = 25%
|
||||
min_width_top_surface = 300%
|
||||
minimum_support_area = 5
|
||||
;;;min_width_top_surface = 300%
|
||||
;;;minimum_support_area = 5
|
||||
mmu_segmented_region_interlocking_depth = 0
|
||||
mmu_segmented_region_max_width = 0
|
||||
only_one_wall_first_layer = 0
|
||||
only_one_wall_top = 0
|
||||
;;;only_one_wall_first_layer = 0
|
||||
top_one_perimeter_type = none
|
||||
ooze_prevention = 0
|
||||
outer_wall_acceleration = 1000
|
||||
outer_wall_jerk = 20
|
||||
overhang_reverse = 0
|
||||
overhang_reverse_internal_only = 0
|
||||
overhang_reverse_threshold = 50%
|
||||
overhang_speed_classic = 0
|
||||
precise_outer_wall = 0
|
||||
prime_tower_brim_width = 3
|
||||
prime_tower_enhance_type = chamfer
|
||||
prime_volume = 45
|
||||
print_flow_ratio = 1
|
||||
print_order = default
|
||||
external_perimeter_acceleration = 1000
|
||||
;;;outer_wall_jerk = 20
|
||||
;;;overhang_reverse = 0
|
||||
;;;overhang_reverse_internal_only = 0
|
||||
;;;overhang_reverse_threshold = 50%
|
||||
;;;overhang_speed_classic = 0
|
||||
;;;precise_outer_wall = 0
|
||||
wipe_tower_brim_width = 3
|
||||
;;;prime_tower_enhance_type = chamfer
|
||||
;;;prime_volume = 45
|
||||
;;;print_flow_ratio = 1
|
||||
;;;print_order = default
|
||||
raft_contact_distance = 0.1
|
||||
raft_expansion = 1.5
|
||||
raft_first_layer_density = 90%
|
||||
raft_first_layer_expansion = 2
|
||||
role_based_wipe_speed = 1
|
||||
scarf_angle_threshold = 155
|
||||
scarf_joint_flow_ratio = 1
|
||||
scarf_joint_speed = 100%
|
||||
scarf_overhang_threshold = 40%
|
||||
seam_gap = 10%
|
||||
seam_slope_conditional = 0
|
||||
seam_slope_entire_loop = 0
|
||||
seam_slope_inner_walls = 0
|
||||
seam_slope_min_length = 20
|
||||
seam_slope_start_height = 0
|
||||
seam_slope_steps = 10
|
||||
seam_slope_type = none
|
||||
;;;role_based_wipe_speed = 1
|
||||
;;;scarf_angle_threshold = 155
|
||||
;;;scarf_joint_flow_ratio = 1
|
||||
;;;scarf_joint_speed = 100%
|
||||
;;;scarf_overhang_threshold = 40%
|
||||
seam_gap_distance = 10%
|
||||
;;;seam_slope_conditional = 0
|
||||
scarf_seam_entire_loop = 0
|
||||
scarf_seam_on_inner_perimeters = 0
|
||||
scarf_seam_length = 20
|
||||
scarf_seam_start_height = 0
|
||||
;;;seam_slope_steps = 10
|
||||
;;;seam_slope_type = none
|
||||
single_extruder_multi_material_priming = 0
|
||||
skirt_speed = 50
|
||||
;;;skirt_speed = 50
|
||||
slice_closing_radius = 0.049
|
||||
slicing_mode = regular
|
||||
slow_down_layers = 0
|
||||
slowdown_for_curled_perimeters = 0
|
||||
small_area_infill_flow_compensation = 0
|
||||
small_area_infill_flow_compensation_model = 0,0;\n0.2,0.4444;\n0.4,0.6145;\n0.6,0.7059;\n0.8,0.7619;\n1.5,0.8571;\n2,0.8889;\n3,0.9231;\n5,0.9520;\n10,1
|
||||
;;;slow_down_layers = 0
|
||||
avoid_crossing_curled_overhangs = 0
|
||||
;;;small_area_infill_flow_compensation = 0
|
||||
;;;small_area_infill_flow_compensation_model = 0,0;\n0.2,0.4444;\n0.4,0.6145;\n0.6,0.7059;\n0.8,0.7619;\n1.5,0.8571;\n2,0.8889;\n3,0.9231;\n5,0.9520;\n10,1
|
||||
small_perimeter_speed = 50%
|
||||
small_perimeter_threshold = 0
|
||||
solid_infill_filament = 1
|
||||
sparse_infill_acceleration = 100%
|
||||
sparse_infill_filament = 1
|
||||
speed_limit_to_height = [[100,150,200,6000],[150,200,200,4000],[200,250,200,2000]]
|
||||
speed_limit_to_height_enable = 0
|
||||
spiral_mode_max_xy_smoothing = 200%
|
||||
spiral_mode_smooth = 0
|
||||
;;;small_perimeter_threshold = 0
|
||||
;;;solid_infill_filament = 1
|
||||
infill_acceleration = 100%
|
||||
;;;sparse_infill_filament = 1
|
||||
;;;speed_limit_to_height = [[100,150,200,6000],[150,200,200,4000],[200,250,200,2000]]
|
||||
;;;speed_limit_to_height_enable = 0
|
||||
;;;spiral_mode_max_xy_smoothing = 200%
|
||||
;;;spiral_mode_smooth = 0
|
||||
staggered_inner_seams = 1
|
||||
thick_bridges = 0
|
||||
thick_internal_bridges = 1
|
||||
timelapse_type = 0
|
||||
top_solid_infill_flow_ratio = 1
|
||||
top_surface_jerk = 9
|
||||
travel_jerk = 12
|
||||
;;;thick_internal_bridges = 1
|
||||
;;;timelapse_type = 0
|
||||
;;;top_solid_infill_flow_ratio = 1
|
||||
;;;top_surface_jerk = 9
|
||||
;;;travel_jerk = 12
|
||||
travel_speed_z = 0
|
||||
wall_direction = auto
|
||||
;;;wall_direction = auto
|
||||
wall_distribution_count = 1
|
||||
wall_filament = 1
|
||||
wall_generator = arachne
|
||||
wall_sequence = inner wall/outer wall
|
||||
;;;wall_filament = 1
|
||||
perimeter_generator = arachne
|
||||
;;;wall_sequence = inner wall/outer wall
|
||||
wall_transition_angle = 10
|
||||
wall_transition_filter_deviation = 25%
|
||||
wall_transition_length = 100%
|
||||
wipe_before_external_loop = 0
|
||||
wipe_on_loops = 0
|
||||
wipe_speed = 80%
|
||||
;;;wipe_before_external_loop = 0
|
||||
;;;wipe_on_loops = 0
|
||||
;;;wipe_speed = 80%
|
||||
wipe_tower_bridging = 10
|
||||
wipe_tower_cone_angle = 0
|
||||
wipe_tower_extra_spacing = 100%
|
||||
wipe_tower_rotation_angle = 0
|
||||
wiping_volumes_extruders = 70,70,70,70,70,70,70,70,70,70
|
||||
;;;wipe_tower_rotation_angle = 0
|
||||
;;;wiping_volumes_extruders = 70,70,70,70,70,70,70,70,70,70
|
||||
|
||||
@@ -3,198 +3,198 @@ show_name = 0.12mm Fine Quality
|
||||
|
||||
|
||||
[settings]
|
||||
adaptive_layer_height = 0
|
||||
reduce_crossing_wall = 0
|
||||
bridge_flow = 0.95
|
||||
variable_layer_height = 0
|
||||
avoid_crossing_perimeters = 0
|
||||
bridge_flow_ratio = 0.95
|
||||
bridge_speed = 100
|
||||
brim_width = 5
|
||||
print_sequence = by layer
|
||||
complete_objects = 0
|
||||
default_acceleration = 2500
|
||||
bridge_no_support = 0
|
||||
dont_support_bridges = 0
|
||||
elefant_foot_compensation = 0
|
||||
outer_wall_line_width = 0.42
|
||||
outer_wall_speed = 60
|
||||
line_width = 0.46
|
||||
infill_direction = 45
|
||||
sparse_infill_density = 15%
|
||||
sparse_infill_pattern = grid
|
||||
initial_layer_line_width = 0.46
|
||||
initial_layer_print_height = 0.2
|
||||
initial_layer_speed = 30
|
||||
gap_infill_speed = 50
|
||||
infill_combination = 0
|
||||
sparse_infill_line_width = 0.45
|
||||
infill_wall_overlap = 15%
|
||||
sparse_infill_speed = 180
|
||||
external_perimeter_extrusion_width = 0.42
|
||||
external_perimeter_speed = 60
|
||||
extrusion_width = 0.46
|
||||
fill_angle = 45
|
||||
fill_density = 15%
|
||||
fill_pattern = grid
|
||||
first_layer_extrusion_width = 0.46
|
||||
first_layer_height = 0.2
|
||||
first_layer_speed = 30
|
||||
gap_fill_speed = 50
|
||||
solid_infill_every_layers = 0
|
||||
infill_extrusion_width = 0.45
|
||||
infill_overlap = 15%
|
||||
infill_speed = 180
|
||||
interface_shells = 0
|
||||
detect_overhang_wall = 1
|
||||
reduce_infill_retraction = 1
|
||||
wall_loops = 2
|
||||
inner_wall_line_width = 0.45
|
||||
inner_wall_speed = 90
|
||||
print_settings_id =
|
||||
;;;detect_overhang_wall = 1
|
||||
;;;reduce_infill_retraction = 1
|
||||
perimeters = 2
|
||||
perimeter_extrusion_width = 0.45
|
||||
perimeter_speed = 90
|
||||
;;;print_settings_id =
|
||||
raft_layers = 0
|
||||
seam_position = aligned
|
||||
skirt_distance = 2
|
||||
skirt_height = 2
|
||||
minimum_sparse_infill_area = 10
|
||||
internal_solid_infill_line_width = 0.42
|
||||
internal_solid_infill_speed = 180
|
||||
spiral_mode = 0
|
||||
solid_infill_below_area = 10
|
||||
solid_infill_extrusion_width = 0.42
|
||||
solid_infill_speed = 180
|
||||
spiral_vase = 0
|
||||
standby_temperature_delta = -5
|
||||
detect_thin_wall = 1
|
||||
top_surface_line_width = 0.42
|
||||
top_surface_speed = 50
|
||||
thin_walls = 1
|
||||
top_infill_extrusion_width = 0.42
|
||||
top_solid_infill_speed = 50
|
||||
travel_speed = 150
|
||||
enable_prime_tower = 0
|
||||
prime_tower_width = 60
|
||||
xy_hole_compensation = 0
|
||||
xy_contour_compensation = 0
|
||||
max_travel_detour_distance = 0
|
||||
bottom_surface_pattern = monotonic
|
||||
bottom_shell_layers = 5
|
||||
bottom_shell_thickness = 0
|
||||
brim_object_gap = 0.1
|
||||
compatible_printers_condition =
|
||||
top_surface_acceleration = 2500
|
||||
wipe_tower = 0
|
||||
wipe_tower_width = 60
|
||||
xy_size_compensation = 0
|
||||
;;;xy_contour_compensation = 0
|
||||
;;;max_travel_detour_distance = 0
|
||||
bottom_fill_pattern = monotonic
|
||||
bottom_solid_layers = 5
|
||||
bottom_solid_min_thickness = 0
|
||||
;;;brim_object_gap = 0.1
|
||||
;;;compatible_printers_condition =
|
||||
top_solid_infill_acceleration = 2500
|
||||
draft_shield = disabled
|
||||
enable_arc_fitting = 0
|
||||
wall_infill_order = inner wall/outer wall/infill
|
||||
initial_layer_acceleration = 500
|
||||
arc_fitting = disabled
|
||||
;;;wall_infill_order = inner wall/outer wall/infill
|
||||
first_layer_acceleration = 500
|
||||
travel_acceleration = 2500
|
||||
inner_wall_acceleration = 2000
|
||||
ironing_flow = 15%
|
||||
perimeter_acceleration = 2000
|
||||
ironing_flowrate = 15%
|
||||
ironing_spacing = 0.1
|
||||
ironing_speed = 20
|
||||
ironing_type = top
|
||||
layer_height = 0.12
|
||||
overhang_1_4_speed = 0
|
||||
overhang_2_4_speed = 20
|
||||
overhang_3_4_speed = 15
|
||||
overhang_4_4_speed = 10
|
||||
skirt_loops = 0
|
||||
overhang_speed_0 = 0
|
||||
overhang_speed_1 = 20
|
||||
overhang_speed_2 = 15
|
||||
overhang_speed_3 = 10
|
||||
skirts = 2
|
||||
resolution = 0.012
|
||||
top_surface_pattern = monotonic
|
||||
top_shell_layers = 5
|
||||
top_shell_thickness = 0.8
|
||||
initial_layer_infill_speed = 80
|
||||
top_fill_pattern = monotonic
|
||||
top_solid_layers = 5
|
||||
top_solid_min_thickness = 0.8
|
||||
first_layer_infill_speed = 80
|
||||
wipe_tower_no_sparse_layers = 0
|
||||
accel_to_decel_enable = 1
|
||||
accel_to_decel_factor = 50%
|
||||
acceleration_limit_mess = [[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]
|
||||
acceleration_limit_mess_enable = 0
|
||||
alternate_extra_wall = 0
|
||||
bottom_solid_infill_flow_ratio = 1
|
||||
;;;accel_to_decel_enable = 1
|
||||
;;;accel_to_decel_factor = 50%
|
||||
;;;acceleration_limit_mess = [[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]
|
||||
;;;acceleration_limit_mess_enable = 0
|
||||
;;;alternate_extra_wall = 0
|
||||
;;;bottom_solid_infill_flow_ratio = 1
|
||||
bridge_acceleration = 50%
|
||||
bridge_angle = 0
|
||||
bridge_density = 100%
|
||||
brim_ears_detection_length = 1
|
||||
brim_ears_max_angle = 125
|
||||
;;;bridge_density = 100%
|
||||
;;;brim_ears_detection_length = 1
|
||||
;;;brim_ears_max_angle = 125
|
||||
brim_type = no_brim
|
||||
default_jerk = 8
|
||||
detect_narrow_internal_solid_infill = 1
|
||||
elefant_foot_compensation_layers = 1
|
||||
enable_overhang_speed = 1
|
||||
enforce_support_layers = 0
|
||||
;;;default_jerk = 8
|
||||
;;;detect_narrow_internal_solid_infill = 1
|
||||
;;;elefant_foot_compensation_layers = 1
|
||||
enable_dynamic_overhang_speeds = 1
|
||||
support_material_enforce_layers = 0
|
||||
ensure_vertical_shell_thickness = ensure_all
|
||||
exclude_object = 0
|
||||
;;;exclude_object = 0
|
||||
extra_perimeters_on_overhangs = 0
|
||||
filter_out_gap_fill = 0
|
||||
flush_into_infill = 0
|
||||
flush_into_objects = 0
|
||||
flush_into_support = 1
|
||||
;;;filter_out_gap_fill = 0
|
||||
;;;flush_into_infill = 0
|
||||
;;;flush_into_objects = 0
|
||||
;;;flush_into_support = 1
|
||||
fuzzy_skin = none
|
||||
fuzzy_skin_first_layer = 0
|
||||
fuzzy_skin_point_distance = 0.8
|
||||
;;;fuzzy_skin_first_layer = 0
|
||||
fuzzy_skin_point_dist = 0.8
|
||||
fuzzy_skin_thickness = 0.3
|
||||
gcode_add_line_number = 0
|
||||
;;;gcode_add_line_number = 0
|
||||
gcode_comments = 0
|
||||
gcode_label_objects = 1
|
||||
hole_to_polyhole = 0
|
||||
hole_to_polyhole_threshold = 0.01
|
||||
hole_to_polyhole_twisted = 1
|
||||
independent_support_layer_height = 1
|
||||
;;;hole_to_polyhole = 0
|
||||
;;;hole_to_polyhole_threshold = 0.01
|
||||
;;;hole_to_polyhole_twisted = 1
|
||||
;;;independent_support_layer_height = 1
|
||||
infill_anchor = 400%
|
||||
infill_anchor_max = 20
|
||||
infill_jerk = 20
|
||||
initial_layer_jerk = 8
|
||||
initial_layer_min_bead_width = 85%
|
||||
initial_layer_travel_speed = 100%
|
||||
inner_wall_jerk = 20
|
||||
internal_bridge_flow = 1
|
||||
internal_bridge_speed = 150%
|
||||
internal_solid_infill_acceleration = 100%
|
||||
internal_solid_infill_pattern = monotonic
|
||||
ironing_angle = -1
|
||||
ironing_pattern = zig-zag
|
||||
ironing_support_layer = 0
|
||||
is_infill_first = 0
|
||||
make_overhang_printable = 0
|
||||
make_overhang_printable_angle = 55
|
||||
make_overhang_printable_hole_size = 0
|
||||
max_bridge_length = 10
|
||||
max_volumetric_extrusion_rate_slope = 0
|
||||
max_volumetric_extrusion_rate_slope_segment_length = 3
|
||||
;;;infill_jerk = 20
|
||||
;;;initial_layer_jerk = 8
|
||||
;;;initial_layer_min_bead_width = 85%
|
||||
;;;initial_layer_travel_speed = 100%
|
||||
;;;inner_wall_jerk = 20
|
||||
;;;internal_bridge_flow = 1
|
||||
;;;internal_bridge_speed = 150%
|
||||
solid_infill_acceleration = 100%
|
||||
solid_fill_pattern = monotonic
|
||||
;;;ironing_angle = -1
|
||||
;;;ironing_pattern = zigzag
|
||||
;;;ironing_support_layer = 0
|
||||
infill_first = 0
|
||||
;;;make_overhang_printable = 0
|
||||
;;;make_overhang_printable_angle = 55
|
||||
;;;make_overhang_printable_hole_size = 0
|
||||
;;;max_bridge_length = 10
|
||||
;;;max_volumetric_extrusion_rate_slope = 0
|
||||
;;;max_volumetric_extrusion_rate_slope_segment_length = 3
|
||||
min_bead_width = 85%
|
||||
min_feature_size = 25%
|
||||
min_width_top_surface = 300%
|
||||
minimum_support_area = 5
|
||||
;;;min_width_top_surface = 300%
|
||||
;;;minimum_support_area = 5
|
||||
mmu_segmented_region_interlocking_depth = 0
|
||||
mmu_segmented_region_max_width = 0
|
||||
only_one_wall_first_layer = 0
|
||||
only_one_wall_top = 0
|
||||
;;;only_one_wall_first_layer = 0
|
||||
top_one_perimeter_type = none
|
||||
ooze_prevention = 0
|
||||
outer_wall_acceleration = 1000
|
||||
outer_wall_jerk = 20
|
||||
overhang_reverse = 0
|
||||
overhang_reverse_internal_only = 0
|
||||
overhang_reverse_threshold = 50%
|
||||
overhang_speed_classic = 0
|
||||
precise_outer_wall = 0
|
||||
prime_tower_brim_width = 3
|
||||
prime_volume = 45
|
||||
print_flow_ratio = 1
|
||||
external_perimeter_acceleration = 1000
|
||||
;;;outer_wall_jerk = 20
|
||||
;;;overhang_reverse = 0
|
||||
;;;overhang_reverse_internal_only = 0
|
||||
;;;overhang_reverse_threshold = 50%
|
||||
;;;overhang_speed_classic = 0
|
||||
;;;precise_outer_wall = 0
|
||||
wipe_tower_brim_width = 3
|
||||
;;;prime_volume = 45
|
||||
;;;print_flow_ratio = 1
|
||||
raft_contact_distance = 0.1
|
||||
raft_expansion = 1.5
|
||||
raft_first_layer_density = 90%
|
||||
raft_first_layer_expansion = 2
|
||||
role_based_wipe_speed = 1
|
||||
seam_gap = 10%
|
||||
;;;role_based_wipe_speed = 1
|
||||
seam_gap_distance = 10%
|
||||
single_extruder_multi_material_priming = 0
|
||||
skirt_speed = 50
|
||||
;;;skirt_speed = 50
|
||||
slice_closing_radius = 0.049
|
||||
slicing_mode = regular
|
||||
slow_down_layers = 0
|
||||
slowdown_for_curled_perimeters = 0
|
||||
;;;slow_down_layers = 0
|
||||
avoid_crossing_curled_overhangs = 0
|
||||
small_perimeter_speed = 50%
|
||||
small_perimeter_threshold = 0
|
||||
solid_infill_filament = 1
|
||||
sparse_infill_acceleration = 100%
|
||||
sparse_infill_filament = 1
|
||||
speed_limit_to_height = [[100,150,100,6000],[150,200,80,5500],[200,250,60,5000]]
|
||||
speed_limit_to_height_enable = 0
|
||||
spiral_mode_max_xy_smoothing = 200%
|
||||
spiral_mode_smooth = 0
|
||||
;;;small_perimeter_threshold = 0
|
||||
;;;solid_infill_filament = 1
|
||||
infill_acceleration = 100%
|
||||
;;;sparse_infill_filament = 1
|
||||
;;;speed_limit_to_height = [[100,150,100,6000],[150,200,80,5500],[200,250,60,5000]]
|
||||
;;;speed_limit_to_height_enable = 0
|
||||
;;;spiral_mode_max_xy_smoothing = 200%
|
||||
;;;spiral_mode_smooth = 0
|
||||
staggered_inner_seams = 0
|
||||
thick_bridges = 0
|
||||
thick_internal_bridges = 1
|
||||
timelapse_type = 0
|
||||
top_solid_infill_flow_ratio = 1
|
||||
top_surface_jerk = 20
|
||||
travel_jerk = 8
|
||||
;;;thick_internal_bridges = 1
|
||||
;;;timelapse_type = 0
|
||||
;;;top_solid_infill_flow_ratio = 1
|
||||
;;;top_surface_jerk = 20
|
||||
;;;travel_jerk = 8
|
||||
travel_speed_z = 0
|
||||
wall_distribution_count = 1
|
||||
wall_filament = 1
|
||||
wall_generator = arachne
|
||||
wall_sequence = inner wall/outer wall
|
||||
;;;wall_filament = 1
|
||||
perimeter_generator = arachne
|
||||
;;;wall_sequence = inner wall/outer wall
|
||||
wall_transition_angle = 10
|
||||
wall_transition_filter_deviation = 25%
|
||||
wall_transition_length = 100%
|
||||
wipe_before_external_loop = 0
|
||||
wipe_on_loops = 0
|
||||
wipe_speed = 80%
|
||||
;;;wipe_before_external_loop = 0
|
||||
;;;wipe_on_loops = 0
|
||||
;;;wipe_speed = 80%
|
||||
wipe_tower_bridging = 10
|
||||
wipe_tower_cone_angle = 0
|
||||
wipe_tower_extra_spacing = 100%
|
||||
wipe_tower_rotation_angle = 0
|
||||
wiping_volumes_extruders = 70,70,70,70,70,70,70,70,70,70
|
||||
;;;wipe_tower_rotation_angle = 0
|
||||
;;;wiping_volumes_extruders = 70,70,70,70,70,70,70,70,70,70
|
||||
|
||||
@@ -3,198 +3,198 @@ show_name = 0.16mm Optimal Quality
|
||||
|
||||
|
||||
[settings]
|
||||
adaptive_layer_height = 0
|
||||
reduce_crossing_wall = 0
|
||||
bridge_flow = 0.95
|
||||
variable_layer_height = 0
|
||||
avoid_crossing_perimeters = 0
|
||||
bridge_flow_ratio = 0.95
|
||||
bridge_speed = 100
|
||||
brim_width = 5
|
||||
print_sequence = by layer
|
||||
complete_objects = 0
|
||||
default_acceleration = 2500
|
||||
bridge_no_support = 0
|
||||
dont_support_bridges = 0
|
||||
elefant_foot_compensation = 0
|
||||
outer_wall_line_width = 0.42
|
||||
outer_wall_speed = 60
|
||||
line_width = 0.46
|
||||
infill_direction = 45
|
||||
sparse_infill_density = 15%
|
||||
sparse_infill_pattern = grid
|
||||
initial_layer_line_width = 0.46
|
||||
initial_layer_print_height = 0.2
|
||||
initial_layer_speed = 30
|
||||
gap_infill_speed = 50
|
||||
infill_combination = 0
|
||||
sparse_infill_line_width = 0.45
|
||||
infill_wall_overlap = 15%
|
||||
sparse_infill_speed = 180
|
||||
external_perimeter_extrusion_width = 0.42
|
||||
external_perimeter_speed = 60
|
||||
extrusion_width = 0.46
|
||||
fill_angle = 45
|
||||
fill_density = 15%
|
||||
fill_pattern = grid
|
||||
first_layer_extrusion_width = 0.46
|
||||
first_layer_height = 0.2
|
||||
first_layer_speed = 30
|
||||
gap_fill_speed = 50
|
||||
solid_infill_every_layers = 0
|
||||
infill_extrusion_width = 0.45
|
||||
infill_overlap = 15%
|
||||
infill_speed = 180
|
||||
interface_shells = 0
|
||||
detect_overhang_wall = 1
|
||||
reduce_infill_retraction = 1
|
||||
wall_loops = 2
|
||||
inner_wall_line_width = 0.45
|
||||
inner_wall_speed = 90
|
||||
print_settings_id =
|
||||
;;;detect_overhang_wall = 1
|
||||
;;;reduce_infill_retraction = 1
|
||||
perimeters = 2
|
||||
perimeter_extrusion_width = 0.45
|
||||
perimeter_speed = 90
|
||||
;;;print_settings_id =
|
||||
raft_layers = 0
|
||||
seam_position = aligned
|
||||
skirt_distance = 2
|
||||
skirt_height = 2
|
||||
minimum_sparse_infill_area = 10
|
||||
internal_solid_infill_line_width = 0.42
|
||||
internal_solid_infill_speed = 180
|
||||
spiral_mode = 0
|
||||
solid_infill_below_area = 10
|
||||
solid_infill_extrusion_width = 0.42
|
||||
solid_infill_speed = 180
|
||||
spiral_vase = 0
|
||||
standby_temperature_delta = -5
|
||||
detect_thin_wall = 1
|
||||
top_surface_line_width = 0.42
|
||||
top_surface_speed = 50
|
||||
thin_walls = 1
|
||||
top_infill_extrusion_width = 0.42
|
||||
top_solid_infill_speed = 50
|
||||
travel_speed = 150
|
||||
enable_prime_tower = 0
|
||||
prime_tower_width = 60
|
||||
xy_hole_compensation = 0
|
||||
xy_contour_compensation = 0
|
||||
max_travel_detour_distance = 0
|
||||
bottom_surface_pattern = monotonic
|
||||
bottom_shell_layers = 4
|
||||
bottom_shell_thickness = 0
|
||||
brim_object_gap = 0.1
|
||||
compatible_printers_condition =
|
||||
top_surface_acceleration = 2500
|
||||
wipe_tower = 0
|
||||
wipe_tower_width = 60
|
||||
xy_size_compensation = 0
|
||||
;;;xy_contour_compensation = 0
|
||||
;;;max_travel_detour_distance = 0
|
||||
bottom_fill_pattern = monotonic
|
||||
bottom_solid_layers = 4
|
||||
bottom_solid_min_thickness = 0
|
||||
;;;brim_object_gap = 0.1
|
||||
;;;compatible_printers_condition =
|
||||
top_solid_infill_acceleration = 2500
|
||||
draft_shield = disabled
|
||||
enable_arc_fitting = 0
|
||||
wall_infill_order = inner wall/outer wall/infill
|
||||
initial_layer_acceleration = 500
|
||||
arc_fitting = disabled
|
||||
;;;wall_infill_order = inner wall/outer wall/infill
|
||||
first_layer_acceleration = 500
|
||||
travel_acceleration = 2500
|
||||
inner_wall_acceleration = 2000
|
||||
ironing_flow = 15%
|
||||
perimeter_acceleration = 2000
|
||||
ironing_flowrate = 15%
|
||||
ironing_spacing = 0.1
|
||||
ironing_speed = 20
|
||||
ironing_type = top
|
||||
layer_height = 0.16
|
||||
overhang_1_4_speed = 0
|
||||
overhang_2_4_speed = 20
|
||||
overhang_3_4_speed = 15
|
||||
overhang_4_4_speed = 10
|
||||
skirt_loops = 0
|
||||
overhang_speed_0 = 0
|
||||
overhang_speed_1 = 20
|
||||
overhang_speed_2 = 15
|
||||
overhang_speed_3 = 10
|
||||
skirts = 2
|
||||
resolution = 0.012
|
||||
top_surface_pattern = monotonic
|
||||
top_shell_layers = 6
|
||||
top_shell_thickness = 0.8
|
||||
initial_layer_infill_speed = 80
|
||||
top_fill_pattern = monotonic
|
||||
top_solid_layers = 6
|
||||
top_solid_min_thickness = 0.8
|
||||
first_layer_infill_speed = 80
|
||||
wipe_tower_no_sparse_layers = 0
|
||||
accel_to_decel_enable = 1
|
||||
accel_to_decel_factor = 50%
|
||||
acceleration_limit_mess = [[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]
|
||||
acceleration_limit_mess_enable = 0
|
||||
alternate_extra_wall = 0
|
||||
bottom_solid_infill_flow_ratio = 1
|
||||
;;;accel_to_decel_enable = 1
|
||||
;;;accel_to_decel_factor = 50%
|
||||
;;;acceleration_limit_mess = [[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]
|
||||
;;;acceleration_limit_mess_enable = 0
|
||||
;;;alternate_extra_wall = 0
|
||||
;;;bottom_solid_infill_flow_ratio = 1
|
||||
bridge_acceleration = 50%
|
||||
bridge_angle = 0
|
||||
bridge_density = 100%
|
||||
brim_ears_detection_length = 1
|
||||
brim_ears_max_angle = 125
|
||||
;;;bridge_density = 100%
|
||||
;;;brim_ears_detection_length = 1
|
||||
;;;brim_ears_max_angle = 125
|
||||
brim_type = no_brim
|
||||
default_jerk = 8
|
||||
detect_narrow_internal_solid_infill = 1
|
||||
elefant_foot_compensation_layers = 1
|
||||
enable_overhang_speed = 1
|
||||
enforce_support_layers = 0
|
||||
;;;default_jerk = 8
|
||||
;;;detect_narrow_internal_solid_infill = 1
|
||||
;;;elefant_foot_compensation_layers = 1
|
||||
enable_dynamic_overhang_speeds = 1
|
||||
support_material_enforce_layers = 0
|
||||
ensure_vertical_shell_thickness = ensure_all
|
||||
exclude_object = 0
|
||||
;;;exclude_object = 0
|
||||
extra_perimeters_on_overhangs = 0
|
||||
filter_out_gap_fill = 0
|
||||
flush_into_infill = 0
|
||||
flush_into_objects = 0
|
||||
flush_into_support = 1
|
||||
;;;filter_out_gap_fill = 0
|
||||
;;;flush_into_infill = 0
|
||||
;;;flush_into_objects = 0
|
||||
;;;flush_into_support = 1
|
||||
fuzzy_skin = none
|
||||
fuzzy_skin_first_layer = 0
|
||||
fuzzy_skin_point_distance = 0.8
|
||||
;;;fuzzy_skin_first_layer = 0
|
||||
fuzzy_skin_point_dist = 0.8
|
||||
fuzzy_skin_thickness = 0.3
|
||||
gcode_add_line_number = 0
|
||||
;;;gcode_add_line_number = 0
|
||||
gcode_comments = 0
|
||||
gcode_label_objects = 1
|
||||
hole_to_polyhole = 0
|
||||
hole_to_polyhole_threshold = 0.01
|
||||
hole_to_polyhole_twisted = 1
|
||||
independent_support_layer_height = 1
|
||||
;;;hole_to_polyhole = 0
|
||||
;;;hole_to_polyhole_threshold = 0.01
|
||||
;;;hole_to_polyhole_twisted = 1
|
||||
;;;independent_support_layer_height = 1
|
||||
infill_anchor = 400%
|
||||
infill_anchor_max = 20
|
||||
infill_jerk = 20
|
||||
initial_layer_jerk = 8
|
||||
initial_layer_min_bead_width = 85%
|
||||
initial_layer_travel_speed = 100%
|
||||
inner_wall_jerk = 20
|
||||
internal_bridge_flow = 1
|
||||
internal_bridge_speed = 150%
|
||||
internal_solid_infill_acceleration = 100%
|
||||
internal_solid_infill_pattern = monotonic
|
||||
ironing_angle = -1
|
||||
ironing_pattern = zig-zag
|
||||
ironing_support_layer = 0
|
||||
is_infill_first = 0
|
||||
make_overhang_printable = 0
|
||||
make_overhang_printable_angle = 55
|
||||
make_overhang_printable_hole_size = 0
|
||||
max_bridge_length = 10
|
||||
max_volumetric_extrusion_rate_slope = 0
|
||||
max_volumetric_extrusion_rate_slope_segment_length = 3
|
||||
;;;infill_jerk = 20
|
||||
;;;initial_layer_jerk = 8
|
||||
;;;initial_layer_min_bead_width = 85%
|
||||
;;;initial_layer_travel_speed = 100%
|
||||
;;;inner_wall_jerk = 20
|
||||
;;;internal_bridge_flow = 1
|
||||
;;;internal_bridge_speed = 150%
|
||||
solid_infill_acceleration = 100%
|
||||
solid_fill_pattern = monotonic
|
||||
;;;ironing_angle = -1
|
||||
;;;ironing_pattern = zigzag
|
||||
;;;ironing_support_layer = 0
|
||||
infill_first = 0
|
||||
;;;make_overhang_printable = 0
|
||||
;;;make_overhang_printable_angle = 55
|
||||
;;;make_overhang_printable_hole_size = 0
|
||||
;;;max_bridge_length = 10
|
||||
;;;max_volumetric_extrusion_rate_slope = 0
|
||||
;;;max_volumetric_extrusion_rate_slope_segment_length = 3
|
||||
min_bead_width = 85%
|
||||
min_feature_size = 25%
|
||||
min_width_top_surface = 300%
|
||||
minimum_support_area = 5
|
||||
;;;min_width_top_surface = 300%
|
||||
;;;minimum_support_area = 5
|
||||
mmu_segmented_region_interlocking_depth = 0
|
||||
mmu_segmented_region_max_width = 0
|
||||
only_one_wall_first_layer = 0
|
||||
only_one_wall_top = 0
|
||||
;;;only_one_wall_first_layer = 0
|
||||
top_one_perimeter_type = none
|
||||
ooze_prevention = 0
|
||||
outer_wall_acceleration = 1000
|
||||
outer_wall_jerk = 20
|
||||
overhang_reverse = 0
|
||||
overhang_reverse_internal_only = 0
|
||||
overhang_reverse_threshold = 50%
|
||||
overhang_speed_classic = 0
|
||||
precise_outer_wall = 0
|
||||
prime_tower_brim_width = 3
|
||||
prime_volume = 45
|
||||
print_flow_ratio = 1
|
||||
external_perimeter_acceleration = 1000
|
||||
;;;outer_wall_jerk = 20
|
||||
;;;overhang_reverse = 0
|
||||
;;;overhang_reverse_internal_only = 0
|
||||
;;;overhang_reverse_threshold = 50%
|
||||
;;;overhang_speed_classic = 0
|
||||
;;;precise_outer_wall = 0
|
||||
wipe_tower_brim_width = 3
|
||||
;;;prime_volume = 45
|
||||
;;;print_flow_ratio = 1
|
||||
raft_contact_distance = 0.1
|
||||
raft_expansion = 1.5
|
||||
raft_first_layer_density = 90%
|
||||
raft_first_layer_expansion = 2
|
||||
role_based_wipe_speed = 1
|
||||
seam_gap = 10%
|
||||
;;;role_based_wipe_speed = 1
|
||||
seam_gap_distance = 10%
|
||||
single_extruder_multi_material_priming = 0
|
||||
skirt_speed = 50
|
||||
;;;skirt_speed = 50
|
||||
slice_closing_radius = 0.049
|
||||
slicing_mode = regular
|
||||
slow_down_layers = 0
|
||||
slowdown_for_curled_perimeters = 0
|
||||
;;;slow_down_layers = 0
|
||||
avoid_crossing_curled_overhangs = 0
|
||||
small_perimeter_speed = 50%
|
||||
small_perimeter_threshold = 0
|
||||
solid_infill_filament = 1
|
||||
sparse_infill_acceleration = 100%
|
||||
sparse_infill_filament = 1
|
||||
speed_limit_to_height = [[100,150,100,6000],[150,200,80,5500],[200,250,60,5000]]
|
||||
speed_limit_to_height_enable = 0
|
||||
spiral_mode_max_xy_smoothing = 200%
|
||||
spiral_mode_smooth = 0
|
||||
;;;small_perimeter_threshold = 0
|
||||
;;;solid_infill_filament = 1
|
||||
infill_acceleration = 100%
|
||||
;;;sparse_infill_filament = 1
|
||||
;;;speed_limit_to_height = [[100,150,100,6000],[150,200,80,5500],[200,250,60,5000]]
|
||||
;;;speed_limit_to_height_enable = 0
|
||||
;;;spiral_mode_max_xy_smoothing = 200%
|
||||
;;;spiral_mode_smooth = 0
|
||||
staggered_inner_seams = 0
|
||||
thick_bridges = 0
|
||||
thick_internal_bridges = 1
|
||||
timelapse_type = 0
|
||||
top_solid_infill_flow_ratio = 1
|
||||
top_surface_jerk = 20
|
||||
travel_jerk = 8
|
||||
;;;thick_internal_bridges = 1
|
||||
;;;timelapse_type = 0
|
||||
;;;top_solid_infill_flow_ratio = 1
|
||||
;;;top_surface_jerk = 20
|
||||
;;;travel_jerk = 8
|
||||
travel_speed_z = 0
|
||||
wall_distribution_count = 1
|
||||
wall_filament = 1
|
||||
wall_generator = arachne
|
||||
wall_sequence = inner wall/outer wall
|
||||
;;;wall_filament = 1
|
||||
perimeter_generator = arachne
|
||||
;;;wall_sequence = inner wall/outer wall
|
||||
wall_transition_angle = 10
|
||||
wall_transition_filter_deviation = 25%
|
||||
wall_transition_length = 100%
|
||||
wipe_before_external_loop = 0
|
||||
wipe_on_loops = 0
|
||||
wipe_speed = 80%
|
||||
;;;wipe_before_external_loop = 0
|
||||
;;;wipe_on_loops = 0
|
||||
;;;wipe_speed = 80%
|
||||
wipe_tower_bridging = 10
|
||||
wipe_tower_cone_angle = 0
|
||||
wipe_tower_extra_spacing = 100%
|
||||
wipe_tower_rotation_angle = 0
|
||||
wiping_volumes_extruders = 70,70,70,70,70,70,70,70,70,70
|
||||
;;;wipe_tower_rotation_angle = 0
|
||||
;;;wiping_volumes_extruders = 70,70,70,70,70,70,70,70,70,70
|
||||
|
||||
@@ -3,224 +3,224 @@ show_name = 0.20mm Standard Quality
|
||||
|
||||
|
||||
[settings]
|
||||
adaptive_layer_height = 0
|
||||
reduce_crossing_wall = 0
|
||||
bridge_flow = 0.95
|
||||
variable_layer_height = 0
|
||||
avoid_crossing_perimeters = 0
|
||||
bridge_flow_ratio = 0.95
|
||||
bridge_speed = 50
|
||||
brim_width = 5
|
||||
print_sequence = by layer
|
||||
complete_objects = 0
|
||||
default_acceleration = 2500
|
||||
bridge_no_support = 0
|
||||
dont_support_bridges = 0
|
||||
elefant_foot_compensation = 0.15
|
||||
outer_wall_line_width = 0.42
|
||||
outer_wall_speed = 60
|
||||
line_width = 0.45
|
||||
infill_direction = 45
|
||||
sparse_infill_density = 15%
|
||||
sparse_infill_pattern = zig-zag
|
||||
initial_layer_line_width = 0.5
|
||||
initial_layer_print_height = 0.2
|
||||
initial_layer_speed = 30
|
||||
gap_infill_speed = 50
|
||||
infill_combination = 0
|
||||
sparse_infill_line_width = 0.45
|
||||
infill_wall_overlap = 30
|
||||
sparse_infill_speed = 180
|
||||
external_perimeter_extrusion_width = 0.42
|
||||
external_perimeter_speed = 60
|
||||
extrusion_width = 0.45
|
||||
fill_angle = 45
|
||||
fill_density = 15%
|
||||
fill_pattern = zigzag
|
||||
first_layer_extrusion_width = 0.5
|
||||
first_layer_height = 0.2
|
||||
first_layer_speed = 30
|
||||
gap_fill_speed = 50
|
||||
solid_infill_every_layers = 0
|
||||
infill_extrusion_width = 0.45
|
||||
infill_overlap = 30%
|
||||
infill_speed = 180
|
||||
interface_shells = 0
|
||||
detect_overhang_wall = 1
|
||||
reduce_infill_retraction = 1
|
||||
wall_loops = 2
|
||||
inner_wall_line_width = 0.45
|
||||
inner_wall_speed = 90
|
||||
print_settings_id =
|
||||
;;detect_overhang_wall = 1
|
||||
;;reduce_infill_retraction = 1
|
||||
perimeters = 2
|
||||
perimeter_extrusion_width = 0.45
|
||||
perimeter_speed = 90
|
||||
;;;print_settings_id =
|
||||
raft_layers = 0
|
||||
seam_position = aligned
|
||||
skirt_distance = 2
|
||||
skirt_height = 2
|
||||
minimum_sparse_infill_area = 10
|
||||
internal_solid_infill_line_width = 0.42
|
||||
internal_solid_infill_speed = 180
|
||||
spiral_mode = 0
|
||||
solid_infill_below_area = 10
|
||||
solid_infill_extrusion_width = 0.42
|
||||
solid_infill_speed = 180
|
||||
spiral_vase = 0
|
||||
standby_temperature_delta = -5
|
||||
detect_thin_wall = 0
|
||||
top_surface_line_width = 0.42
|
||||
top_surface_speed = 50
|
||||
thin_walls = 0
|
||||
top_infill_extrusion_width = 0.42
|
||||
top_solid_infill_speed = 50
|
||||
travel_speed = 150
|
||||
enable_prime_tower = 0
|
||||
prime_tower_width = 60
|
||||
xy_hole_compensation = 0
|
||||
xy_contour_compensation = 0
|
||||
max_travel_detour_distance = 0
|
||||
bottom_surface_pattern = monotonic
|
||||
bottom_shell_layers = 4
|
||||
bottom_shell_thickness = 0
|
||||
brim_object_gap = 0.1
|
||||
compatible_printers_condition =
|
||||
top_surface_acceleration = 2500
|
||||
wipe_tower = 0
|
||||
wipe_tower_width = 60
|
||||
xy_size_compensation = 0
|
||||
;;;xy_contour_compensation = 0
|
||||
;;;max_travel_detour_distance = 0
|
||||
bottom_fill_pattern = monotonic
|
||||
bottom_solid_layers = 4
|
||||
bottom_solid_min_thickness = 0
|
||||
;;;brim_object_gap = 0.1
|
||||
;;;compatible_printers_condition =
|
||||
top_solid_infill_acceleration = 2500
|
||||
draft_shield = disabled
|
||||
enable_arc_fitting = 1
|
||||
wall_infill_order = inner wall/outer wall/infill
|
||||
initial_layer_acceleration = 500
|
||||
arc_fitting = disabled
|
||||
;;;wall_infill_order = inner wall/outer wall/infill
|
||||
first_layer_acceleration = 500
|
||||
travel_acceleration = 2500
|
||||
inner_wall_acceleration = 2000
|
||||
ironing_flow = 15%
|
||||
perimeter_acceleration = 2000
|
||||
ironing_flowrate = 15%
|
||||
ironing_spacing = 0.1
|
||||
ironing_speed = 20
|
||||
ironing_type = top
|
||||
layer_height = 0.2
|
||||
overhang_1_4_speed = 0
|
||||
overhang_2_4_speed = 60
|
||||
overhang_3_4_speed = 30
|
||||
overhang_4_4_speed = 10
|
||||
skirt_loops = 0
|
||||
overhang_speed_0 = 0
|
||||
overhang_speed_1 = 60
|
||||
overhang_speed_2 = 30
|
||||
overhang_speed_3 = 10
|
||||
skirts = 2
|
||||
resolution = 0.012
|
||||
|
||||
top_surface_pattern = monotonic
|
||||
top_shell_layers = 4
|
||||
top_shell_thickness = 0.8
|
||||
initial_layer_infill_speed = 80
|
||||
top_fill_pattern = monotonic
|
||||
top_solid_layers = 4
|
||||
top_solid_min_thickness = 0.8
|
||||
first_layer_infill_speed = 80
|
||||
wipe_tower_no_sparse_layers = 0
|
||||
accel_to_decel_enable = 1
|
||||
accel_to_decel_factor = 25
|
||||
acceleration_limit_mess = [[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]
|
||||
acceleration_limit_mess_enable = 0
|
||||
ai_infill = 0
|
||||
alternate_extra_wall = 0
|
||||
bottom_solid_infill_flow_ratio = 1
|
||||
;;;accel_to_decel_enable = 1
|
||||
;;;accel_to_decel_factor = 25
|
||||
;;;acceleration_limit_mess = [[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]
|
||||
;;;acceleration_limit_mess_enable = 0
|
||||
;;;ai_infill = 0
|
||||
;;;alternate_extra_wall = 0
|
||||
;;;bottom_solid_infill_flow_ratio = 1
|
||||
bridge_acceleration = 50%
|
||||
bridge_angle = 0
|
||||
bridge_density = 100%
|
||||
brim_ears_detection_length = 1
|
||||
brim_ears_max_angle = 125
|
||||
;;;bridge_density = 100%
|
||||
;;;brim_ears_detection_length = 1
|
||||
;;;brim_ears_max_angle = 125
|
||||
brim_type = no_brim
|
||||
counterbore_hole_bridging = none
|
||||
default_jerk = 10
|
||||
detect_narrow_internal_solid_infill = 1
|
||||
dont_filter_internal_bridges = disabled
|
||||
elefant_foot_compensation_layers = 1
|
||||
enable_overhang_speed = 1
|
||||
enforce_support_layers = 0
|
||||
;;;counterbore_hole_bridging = none
|
||||
;;;default_jerk = 10
|
||||
;;;detect_narrow_internal_solid_infill = 1
|
||||
;;;dont_filter_internal_bridges = disabled
|
||||
;;;elefant_foot_compensation_layers = 1
|
||||
enable_dynamic_overhang_speeds = 1
|
||||
support_material_enforce_layers = 0
|
||||
ensure_vertical_shell_thickness = ensure_all
|
||||
exclude_object = 0
|
||||
;;;exclude_object = 0
|
||||
extra_perimeters_on_overhangs = 0
|
||||
filter_out_gap_fill = 0
|
||||
flush_into_infill = 0
|
||||
flush_into_objects = 0
|
||||
flush_into_support = 1
|
||||
;;;filter_out_gap_fill = 0
|
||||
;;;flush_into_infill = 0
|
||||
;;;flush_into_objects = 0
|
||||
;;;flush_into_support = 1
|
||||
fuzzy_skin = none
|
||||
fuzzy_skin_first_layer = 0
|
||||
fuzzy_skin_point_distance = 0.8
|
||||
;;;fuzzy_skin_first_layer = 0
|
||||
fuzzy_skin_point_dist = 0.8
|
||||
fuzzy_skin_thickness = 0.3
|
||||
gap_fill_target = everywhere
|
||||
gcode_add_line_number = 0
|
||||
gap_fill_enabled = everywhere
|
||||
;;;gcode_add_line_number = 0
|
||||
gcode_comments = 0
|
||||
gcode_label_objects = 1
|
||||
hole_to_polyhole = 0
|
||||
hole_to_polyhole_threshold = 0.01
|
||||
hole_to_polyhole_twisted = 1
|
||||
independent_support_layer_height = 1
|
||||
;;;hole_to_polyhole = 0
|
||||
;;;hole_to_polyhole_threshold = 0.01
|
||||
;;;hole_to_polyhole_twisted = 1
|
||||
;;;independent_support_layer_height = 1
|
||||
infill_anchor = 400%
|
||||
infill_anchor_max = 20
|
||||
infill_jerk = 10
|
||||
initial_layer_jerk = 10
|
||||
initial_layer_min_bead_width = 85%
|
||||
initial_layer_travel_speed = 100%
|
||||
inner_wall_jerk = 10
|
||||
internal_bridge_flow = 1
|
||||
internal_bridge_speed = 150%
|
||||
internal_solid_infill_acceleration = 100%
|
||||
internal_solid_infill_pattern = monotonic
|
||||
ironing_angle = -1
|
||||
ironing_pattern = zig-zag
|
||||
ironing_support_layer = 0
|
||||
is_infill_first = 0
|
||||
make_overhang_printable = 0
|
||||
make_overhang_printable_angle = 55
|
||||
make_overhang_printable_hole_size = 0
|
||||
material_flow_dependent_temperature = 0
|
||||
material_flow_temp_graph = [[3.0,210],[10.0,220],[12.0,230]]
|
||||
max_bridge_length = 10
|
||||
max_volumetric_extrusion_rate_slope = 0
|
||||
max_volumetric_extrusion_rate_slope_segment_length = 3
|
||||
;;;infill_jerk = 10
|
||||
;;;initial_layer_jerk = 10
|
||||
;;;initial_layer_min_bead_width = 85%
|
||||
;;;initial_layer_travel_speed = 100%
|
||||
;;;inner_wall_jerk = 10
|
||||
;;;internal_bridge_flow = 1
|
||||
;;;internal_bridge_speed = 150%
|
||||
solid_infill_acceleration = 100%
|
||||
solid_fill_pattern = monotonic
|
||||
;;;ironing_angle = -1
|
||||
;;;ironing_pattern = zigzag
|
||||
;;;ironing_support_layer = 0
|
||||
infill_first = 0
|
||||
;;;make_overhang_printable = 0
|
||||
;;;make_overhang_printable_angle = 55
|
||||
;;;make_overhang_printable_hole_size = 0
|
||||
;;;material_flow_dependent_temperature = 0
|
||||
;;;material_flow_temp_graph = [[3.0,210],[10.0,220],[12.0,230]]
|
||||
;;;max_bridge_length = 10
|
||||
;;;max_volumetric_extrusion_rate_slope = 0
|
||||
;;;max_volumetric_extrusion_rate_slope_segment_length = 3
|
||||
min_bead_width = 85%
|
||||
min_feature_size = 25%
|
||||
min_length_factor = 0.5
|
||||
min_width_top_surface = 300%
|
||||
minimum_support_area = 5
|
||||
;;;min_length_factor = 0.5
|
||||
;;;min_width_top_surface = 300%
|
||||
;;;minimum_support_area = 5
|
||||
mmu_segmented_region_interlocking_depth = 0
|
||||
mmu_segmented_region_max_width = 0
|
||||
only_one_wall_first_layer = 0
|
||||
only_one_wall_top = 1
|
||||
;;;only_one_wall_first_layer = 0
|
||||
top_one_perimeter_type = top
|
||||
ooze_prevention = 0
|
||||
outer_wall_acceleration = 1000
|
||||
outer_wall_jerk = 10
|
||||
overhang_reverse = 0
|
||||
overhang_reverse_internal_only = 0
|
||||
overhang_reverse_threshold = 50%
|
||||
overhang_speed_classic = 0
|
||||
precise_outer_wall = 0
|
||||
prime_tower_brim_width = 3
|
||||
prime_tower_enhance_type = chamfer
|
||||
prime_volume = 45
|
||||
print_flow_ratio = 1
|
||||
print_order = default
|
||||
external_perimeter_acceleration = 1000
|
||||
;;;outer_wall_jerk = 10
|
||||
;;;overhang_reverse = 0
|
||||
;;;overhang_reverse_internal_only = 0
|
||||
;;;overhang_reverse_threshold = 50%
|
||||
;;;overhang_speed_classic = 0
|
||||
;;;precise_outer_wall = 0
|
||||
wipe_tower_brim_width = 3
|
||||
;;;prime_tower_enhance_type = chamfer
|
||||
;;;prime_volume = 45
|
||||
;;;print_flow_ratio = 1
|
||||
;;;print_order = default
|
||||
raft_contact_distance = 0.1
|
||||
raft_expansion = 1.5
|
||||
raft_first_layer_density = 90%
|
||||
raft_first_layer_expansion = 2
|
||||
role_based_wipe_speed = 0
|
||||
scarf_angle_threshold = 155
|
||||
scarf_joint_flow_ratio = 1
|
||||
scarf_joint_speed = 100%
|
||||
scarf_overhang_threshold = 40%
|
||||
seam_gap = 10%
|
||||
seam_slope_conditional = 0
|
||||
seam_slope_entire_loop = 0
|
||||
seam_slope_inner_walls = 0
|
||||
seam_slope_min_length = 20
|
||||
seam_slope_start_height = 0
|
||||
seam_slope_steps = 10
|
||||
seam_slope_type = none
|
||||
;;;role_based_wipe_speed = 0
|
||||
;;;scarf_angle_threshold = 155
|
||||
;;;scarf_joint_flow_ratio = 1
|
||||
;;;scarf_joint_speed = 100%
|
||||
;;;scarf_overhang_threshold = 40%
|
||||
seam_gap_distance = 10%
|
||||
;;;seam_slope_conditional = 0
|
||||
scarf_seam_entire_loop = 0
|
||||
scarf_seam_on_inner_perimeters = 0
|
||||
scarf_seam_length = 20
|
||||
scarf_seam_start_height = 0
|
||||
;;;seam_slope_steps = 10
|
||||
;;;seam_slope_type = none
|
||||
single_extruder_multi_material_priming = 0
|
||||
skirt_speed = 50
|
||||
;;;skirt_speed = 50
|
||||
slice_closing_radius = 0.049
|
||||
slicing_mode = regular
|
||||
slow_down_layers = 0
|
||||
slowdown_for_curled_perimeters = 0
|
||||
small_area_infill_flow_compensation = 0
|
||||
small_area_infill_flow_compensation_model = 0,0;"\n0.2,0.4444";"\n0.4,0.6145";"\n0.6,0.7059";"\n0.8,0.7619";"\n1.5,0.8571";"\n2,0.8889";"\n3,0.9231";"\n5,0.9520";"\n10,1"
|
||||
;;;slow_down_layers = 0
|
||||
avoid_crossing_curled_overhangs = 0
|
||||
;;;small_area_infill_flow_compensation = 0
|
||||
;;;small_area_infill_flow_compensation_model = 0,0;"\n0.2,0.4444";"\n0.4,0.6145";"\n0.6,0.7059";"\n0.8,0.7619";"\n1.5,0.8571";"\n2,0.8889";"\n3,0.9231";"\n5,0.9520";"\n10,1"
|
||||
small_perimeter_speed = 50%
|
||||
small_perimeter_threshold = 0
|
||||
solid_infill_filament = 1
|
||||
sparse_infill_acceleration = 100%
|
||||
sparse_infill_filament = 1
|
||||
speed_limit_to_height = [[100,150,100,6000],[150,200,80,5500],[200,250,60,5000]]
|
||||
speed_limit_to_height_enable = 0
|
||||
spiral_mode_max_xy_smoothing = 200%
|
||||
spiral_mode_smooth = 0
|
||||
;;;small_perimeter_threshold = 0
|
||||
;;;solid_infill_filament = 1
|
||||
infill_acceleration = 100%
|
||||
;;;sparse_infill_filament = 1
|
||||
;;;speed_limit_to_height = [[100,150,100,6000],[150,200,80,5500],[200,250,60,5000]]
|
||||
;;;speed_limit_to_height_enable = 0
|
||||
;;;spiral_mode_max_xy_smoothing = 200%
|
||||
;;;spiral_mode_smooth = 0
|
||||
staggered_inner_seams = 1
|
||||
|
||||
thick_bridges = 0
|
||||
thick_internal_bridges = 1
|
||||
timelapse_type = 0
|
||||
top_solid_infill_flow_ratio = 1
|
||||
top_surface_jerk = 8
|
||||
travel_jerk = 10
|
||||
;;;thick_internal_bridges = 1
|
||||
;;;timelapse_type = 0
|
||||
;;;top_solid_infill_flow_ratio = 1
|
||||
;;;top_surface_jerk = 8
|
||||
;;;travel_jerk = 10
|
||||
travel_speed_z = 0
|
||||
|
||||
wall_direction = auto
|
||||
;;;wall_direction = auto
|
||||
wall_distribution_count = 1
|
||||
wall_filament = 1
|
||||
wall_generator = arachne
|
||||
wall_sequence = inner wall/outer wall
|
||||
;;;wall_filament = 1
|
||||
perimeter_generator = arachne
|
||||
;;;wall_sequence = inner wall/outer wall
|
||||
wall_transition_angle = 10
|
||||
wall_transition_filter_deviation = 25%
|
||||
wall_transition_length = 100%
|
||||
wipe_before_external_loop = 0
|
||||
wipe_on_loops = 0
|
||||
wipe_speed = 100%
|
||||
;;;wipe_before_external_loop = 0
|
||||
;;;wipe_on_loops = 0
|
||||
;;;wipe_speed = 100%
|
||||
wipe_tower_bridging = 10
|
||||
wipe_tower_cone_angle = 0
|
||||
wipe_tower_extra_spacing = 100%
|
||||
wipe_tower_rotation_angle = 0
|
||||
wiping_volumes_extruders = 70,70,70,70,70,70,70,70,70,70
|
||||
;;;wipe_tower_rotation_angle = 0
|
||||
;;;wiping_volumes_extruders = 70,70,70,70,70,70,70,70,70,70
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
[metadata]
|
||||
show_name = Grid Support
|
||||
show_name = 网状支撑 (Grid Support)
|
||||
|
||||
|
||||
[settings]
|
||||
@@ -7,11 +7,11 @@ support_material = 1
|
||||
support_material_auto = 1
|
||||
support_material_extrusion_width = 0.4
|
||||
support_material_interface_extruder = 0
|
||||
support_top_z_distance = 0.2
|
||||
support_interface_loop_pattern = 0
|
||||
support_interface_top_layers = 2
|
||||
support_interface_spacing = 0.5
|
||||
support_interface_speed = 100%
|
||||
support_material_contact_distance = 0.2
|
||||
;;;support_interface_loop_pattern = 0
|
||||
support_material_interface_layers = 2
|
||||
support_material_interface_spacing = 0.5
|
||||
support_material_interface_speed = 100%
|
||||
support_material_pattern = rectilinear
|
||||
support_material_spacing = 2.5
|
||||
support_material_speed = 50
|
||||
@@ -24,11 +24,11 @@ support_material_bottom_interface_layers = 2
|
||||
|
||||
|
||||
support_material_angle = 0
|
||||
support_bottom_interface_spacing = 0.5
|
||||
support_bottom_z_distance = 0.2
|
||||
support_critical_regions_only = 0
|
||||
support_expansion = 0
|
||||
support_interface_not_for_body = 1
|
||||
support_interface_pattern = auto
|
||||
support_remove_small_overhang = 1
|
||||
support_xy_overrides_z = xy_overrides_z
|
||||
;;;support_bottom_interface_spacing = 0.5
|
||||
support_material_bottom_contact_distance = 0.2
|
||||
;;;support_critical_regions_only = 0
|
||||
;;;support_expansion = 0
|
||||
;;;support_interface_not_for_body = 1
|
||||
support_material_interface_pattern = auto
|
||||
;;;support_remove_small_overhang = 1
|
||||
;;;support_xy_overrides_z = xy_overrides_z
|
||||
|
||||
@@ -1,50 +1,50 @@
|
||||
[metadata]
|
||||
show_name = No Support
|
||||
show_name = 无支撑 (No Support)
|
||||
|
||||
|
||||
[settings]
|
||||
support_material = 0
|
||||
|
||||
support_line_width = 0.4
|
||||
support_interface_filament = 0
|
||||
support_on_build_plate_only = 0
|
||||
support_top_z_distance = 0.2
|
||||
support_interface_loop_pattern = 0
|
||||
support_interface_top_layers = 2
|
||||
support_interface_spacing = 0.5
|
||||
support_interface_speed = 100%
|
||||
support_base_pattern = rectilinear
|
||||
support_base_pattern_spacing = 2.5
|
||||
support_speed = 50
|
||||
support_threshold_angle = 30
|
||||
support_object_xy_distance = 0.35
|
||||
;;;support_line_width = 0.4
|
||||
;;;support_interface_filament = 0
|
||||
;;;support_on_build_plate_only = 0
|
||||
support_material_contact_distance = 0.2
|
||||
;;;support_interface_loop_pattern = 0
|
||||
support_material_interface_layers = 2
|
||||
support_material_interface_spacing = 0.5
|
||||
support_material_interface_speed = 100%
|
||||
;;;support_base_pattern = rectilinear
|
||||
;;;support_base_pattern_spacing = 2.5
|
||||
support_material_speed = 50
|
||||
;;;support_threshold_angle = 30
|
||||
;;;support_object_xy_distance = 0.35
|
||||
|
||||
support_type = normal(auto)
|
||||
;;;support_type = 1
|
||||
support_material_style = default
|
||||
support_interface_bottom_layers = 2
|
||||
tree_support_branch_angle = 45
|
||||
tree_support_wall_count = 0
|
||||
support_material_bottom_interface_layers = 2
|
||||
;;;tree_support_branch_angle = 45
|
||||
;;;tree_support_wall_count = 0
|
||||
|
||||
support_angle = 0
|
||||
support_bottom_interface_spacing = 0.5
|
||||
support_bottom_z_distance = 0.2
|
||||
support_critical_regions_only = 0
|
||||
support_expansion = 0
|
||||
support_interface_not_for_body = 1
|
||||
support_interface_pattern = auto
|
||||
support_remove_small_overhang = 1
|
||||
support_xy_overrides_z = xy_overrides_z
|
||||
support_material_angle = 0
|
||||
;;;support_bottom_interface_spacing = 0.5
|
||||
support_material_bottom_contact_distance = 0.2
|
||||
;;;support_critical_regions_only = 0
|
||||
;;;support_expansion = 0
|
||||
;;;support_interface_not_for_body = 1
|
||||
support_material_interface_pattern = auto
|
||||
;;;support_remove_small_overhang = 1
|
||||
;;;support_xy_overrides_z = xy_overrides_z
|
||||
|
||||
tree_support_adaptive_layer_height = 1
|
||||
tree_support_angle_slow = 25
|
||||
tree_support_auto_brim = 1
|
||||
tree_support_branch_angle_organic = 40
|
||||
tree_support_branch_diameter = 2
|
||||
tree_support_branch_diameter_angle = 5
|
||||
tree_support_branch_diameter_double_wall = 3
|
||||
tree_support_branch_diameter_organic = 2
|
||||
tree_support_branch_distance = 5
|
||||
tree_support_branch_distance_organic = 1
|
||||
tree_support_brim_width = 3
|
||||
tree_support_tip_diameter = 0.8
|
||||
tree_support_top_rate = 30%
|
||||
;;;tree_support_adaptive_layer_height = 1
|
||||
;;;tree_support_angle_slow = 25
|
||||
;;;tree_support_auto_brim = 1
|
||||
;;;tree_support_branch_angle_organic = 40
|
||||
;;;tree_support_branch_diameter = 2
|
||||
;;;tree_support_branch_diameter_angle = 5
|
||||
;;;tree_support_branch_diameter_double_wall = 3
|
||||
;;;tree_support_branch_diameter_organic = 2
|
||||
;;;tree_support_branch_distance = 5
|
||||
;;;tree_support_branch_distance_organic = 1
|
||||
;;;tree_support_brim_width = 3
|
||||
;;;tree_support_tip_diameter = 0.8
|
||||
;;;tree_support_top_rate = 30%
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
[metadata]
|
||||
show_name = Snug Support
|
||||
show_name = 松散支撑 (Snug Support)
|
||||
|
||||
|
||||
[settings]
|
||||
@@ -7,11 +7,11 @@ support_material = 1
|
||||
support_material_auto = 1
|
||||
support_material_extrusion_width = 0.4
|
||||
support_material_interface_extruder = 0
|
||||
support_top_z_distance = 0.2
|
||||
support_interface_loop_pattern = 0
|
||||
support_interface_top_layers = 2
|
||||
support_interface_spacing = 0.5
|
||||
support_interface_speed = 100%
|
||||
support_material_contact_distance = 0.2
|
||||
;;;support_interface_loop_pattern = 0
|
||||
support_material_interface_layers = 2
|
||||
support_material_interface_spacing = 0.5
|
||||
support_material_interface_speed = 100%
|
||||
support_material_pattern = rectilinear
|
||||
support_material_spacing = 2.5
|
||||
support_material_speed = 50
|
||||
@@ -24,11 +24,11 @@ support_material_bottom_interface_layers = 2
|
||||
|
||||
|
||||
support_material_angle = 0
|
||||
support_bottom_interface_spacing = 0.5
|
||||
support_bottom_z_distance = 0.2
|
||||
support_critical_regions_only = 0
|
||||
support_expansion = 0
|
||||
support_interface_not_for_body = 1
|
||||
support_interface_pattern = auto
|
||||
support_remove_small_overhang = 1
|
||||
support_xy_overrides_z = xy_overrides_z
|
||||
;;;support_bottom_interface_spacing = 0.5
|
||||
support_material_bottom_contact_distance = 0.2
|
||||
;;;support_critical_regions_only = 0
|
||||
;;;support_expansion = 0
|
||||
;;;support_interface_not_for_body = 1
|
||||
support_material_interface_pattern = auto
|
||||
;;;support_remove_small_overhang = 1
|
||||
;;;support_xy_overrides_z = xy_overrides_z
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
[metadata]
|
||||
show_name = Tree Support
|
||||
show_name = 树状支撑 (Tree Support)
|
||||
|
||||
|
||||
[settings]
|
||||
@@ -7,11 +7,11 @@ support_material = 1
|
||||
support_material_auto = 1
|
||||
support_material_extrusion_width = 0.4
|
||||
support_material_interface_extruder = 0
|
||||
support_top_z_distance = 0.2
|
||||
support_interface_loop_pattern = 0
|
||||
support_interface_top_layers = 2
|
||||
support_interface_spacing = 0.5
|
||||
support_interface_speed = 100%
|
||||
support_material_contact_distance = 0.2
|
||||
;;;support_interface_loop_pattern = 0
|
||||
support_material_interface_layers = 2
|
||||
support_material_interface_spacing = 0.5
|
||||
support_material_interface_speed = 100%
|
||||
support_material_pattern = rectilinear
|
||||
support_material_spacing = 2.5
|
||||
support_material_speed = 50
|
||||
@@ -24,14 +24,14 @@ support_material_bottom_interface_layers = 2
|
||||
|
||||
|
||||
support_material_angle = 0
|
||||
support_bottom_interface_spacing = 0.5
|
||||
support_bottom_z_distance = 0.2
|
||||
support_critical_regions_only = 0
|
||||
support_expansion = 0
|
||||
support_interface_not_for_body = 1
|
||||
support_interface_pattern = auto
|
||||
support_remove_small_overhang = 1
|
||||
support_xy_overrides_z = xy_overrides_z
|
||||
;;;support_bottom_interface_spacing = 0.5
|
||||
support_material_bottom_contact_distance = 0.2
|
||||
;;;support_critical_regions_only = 0
|
||||
;;;support_expansion = 0
|
||||
;;;support_interface_not_for_body = 1
|
||||
support_material_interface_pattern = auto
|
||||
;;;support_remove_small_overhang = 1
|
||||
;;;support_xy_overrides_z = xy_overrides_z
|
||||
|
||||
|
||||
support_tree_angle = 45
|
||||
|
||||
997
pru-all-cli.md
@@ -1,997 +0,0 @@
|
||||
Actions:
|
||||
--export-3mf Export the model(s) as 3MF.
|
||||
--export-amf Export the model(s) as AMF.
|
||||
--export-gcode, --gcode, -g
|
||||
Slice the model and export toolpaths as G-code.
|
||||
--export-obj Export the model(s) as OBJ.
|
||||
--export-sla, --sla Slice the model and export SLA printing layers as PNG.
|
||||
--export-stl Export the model(s) as STL.
|
||||
--gcodeviewer Visualize an already sliced and saved G-code
|
||||
--help, -h Show this help.
|
||||
--help-fff Show the full list of print/G-code configuration options.
|
||||
--help-sla Show the full list of SLA print configuration options.
|
||||
--info Write information about the model to the console.
|
||||
--save ABCD Save configuration to the specified file.
|
||||
--slice, -s Slice the model as FFF or SLA based on the printer_technology configuration
|
||||
value.
|
||||
|
||||
Transform options:
|
||||
--align-xy X,Y Align the model to the given point.
|
||||
--center X,Y Center the print around the given center.
|
||||
--cut N Cut model at the given Z.
|
||||
--dont-arrange Do not rearrange the given models before merging and keep their original XY
|
||||
coordinates.
|
||||
--duplicate N Multiply copies by this factor.
|
||||
--duplicate-grid X,Y
|
||||
Multiply copies by creating a grid.
|
||||
--ensure-on-bed Lift the object above the bed when it is partially below. Enabled by default,
|
||||
use --no-ensure-on-bed to disable.
|
||||
--merge, -m Arrange the supplied models in a plate and merge them in a single model in order
|
||||
to perform actions once.
|
||||
--repair Try to repair any non-manifold meshes (this option is implicitly added whenever
|
||||
we need to slice the model to perform the requested action).
|
||||
--rotate N Rotation angle around the Z axis in degrees.
|
||||
--rotate-x N Rotation angle around the X axis in degrees.
|
||||
--rotate-y N Rotation angle around the Y axis in degrees.
|
||||
--scale N Scaling factor or percentage.
|
||||
--scale-to-fit X,Y,Z
|
||||
Scale to fit the given volume.
|
||||
--split Detect unconnected parts in the given model(s) and split them into separate
|
||||
objects.
|
||||
|
||||
Other options:
|
||||
--config-compatibility
|
||||
This version of PrusaSlicer may not understand configurations produced by the
|
||||
newest PrusaSlicer versions. For example, newer PrusaSlicer may extend the list
|
||||
of supported firmware flavors. One may decide to bail out or to substitute an
|
||||
unknown value with a default silently or verbosely. (disable, enable,
|
||||
enable_silent; default: enable)
|
||||
--datadir ABCD Load and store settings at the given directory. This is useful for maintaining
|
||||
different profiles or including configurations from a network storage.
|
||||
--ignore-nonexistent-config
|
||||
Do not fail if a file supplied to --load does not exist.
|
||||
--load ABCD Load configuration from the specified file. It can be used more than once to
|
||||
load options from multiple files.
|
||||
--loglevel N Sets logging sensitivity. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:trace
|
||||
For example. loglevel=2 logs fatal, error and warning level messages.
|
||||
--output ABCD, -o ABCD
|
||||
The file where the output will be written (if not specified, it will be based on
|
||||
the input file).
|
||||
--single-instance If enabled, the command line arguments are sent to an existing instance of GUI
|
||||
PrusaSlicer, or an existing PrusaSlicer window is activated. Overrides the
|
||||
"single_instance" configuration value from application preferences.
|
||||
|
||||
Print options are processed in the following order:
|
||||
1) Config keys from the command line, for example --fill-pattern=stars
|
||||
(highest priority, overwrites everything below)
|
||||
2) Config files loaded with --load
|
||||
3) Config values loaded from amf or 3mf files
|
||||
|
||||
Misc options:
|
||||
--avoid-crossing-perimeters
|
||||
Optimize travel moves in order to minimize the crossing of perimeters. This is
|
||||
mostly useful with Bowden extruders which suffer from oozing. This feature slows
|
||||
down both the print and the G-code generation.
|
||||
--bed-custom-model ABCD
|
||||
|
||||
--bed-custom-texture ABCD
|
||||
|
||||
--bed-shape (default: 0x0,200x0,200x200,0x200)
|
||||
--bed-temperature N Bed temperature for layers after the first one. Set this to zero to disable bed
|
||||
temperature control commands in the output. (°C, default: 0)
|
||||
--before-layer-gcode ABCD
|
||||
This custom code is inserted at every layer change, right before the Z move.
|
||||
Note that you can use placeholder variables for all Slic3r settings as well as
|
||||
[layer_num] and [layer_z].
|
||||
--between-objects-gcode ABCD
|
||||
This code is inserted between objects when using sequential printing. By default
|
||||
extruder and bed temperature are reset using non-wait command; however if M104,
|
||||
M109, M140 or M190 are detected in this custom code, Slic3r will not add
|
||||
temperature commands. Note that you can use placeholder variables for all Slic3r
|
||||
settings, so you can put a "M109 S[first_layer_temperature]" command wherever
|
||||
you want.
|
||||
--bridge-acceleration N
|
||||
This is the acceleration your printer will use for bridges. Set zero to disable
|
||||
acceleration control for bridges. (mm/s², default: 0)
|
||||
--bridge-fan-speed N
|
||||
This fan speed is enforced during all bridges and overhangs. (%, default: 100)
|
||||
--clip-multipart-objects
|
||||
When printing multi-material objects, this settings will make Slic3r to clip the
|
||||
overlapping object parts one by the other (2nd part will be clipped by the 1st,
|
||||
3rd part will be clipped by the 1st and 2nd etc).
|
||||
--color-change-gcode ABCD
|
||||
This G-code will be used as a code for the color change (default: M600)
|
||||
--colorprint-heights N
|
||||
Heights at which a filament change is to occur. (default: )
|
||||
--complete-objects When printing multiple objects or copies, this feature will complete each object
|
||||
before moving onto next one (and starting it from its bottom layer). This
|
||||
feature is useful to avoid the risk of ruined prints. Slic3r should warn and
|
||||
prevent you from extruder collisions, but beware.
|
||||
--cooling This flag enables the automatic cooling logic that adjusts print speed and fan
|
||||
speed according to layer printing time. (default: 1)
|
||||
--cooling-tube-length N
|
||||
Length of the cooling tube to limit space for cooling moves inside it. (mm,
|
||||
default: 5)
|
||||
--cooling-tube-retraction N
|
||||
Distance of the center-point of the cooling tube from the extruder tip. (mm,
|
||||
default: 91.5)
|
||||
--default-acceleration N
|
||||
This is the acceleration your printer will be reset to after the role-specific
|
||||
acceleration values are used (perimeter/infill). Set zero to prevent resetting
|
||||
acceleration at all. (mm/s², default: 0)
|
||||
--deretract-speed N The speed for loading of a filament into extruder after retraction (it only
|
||||
applies to the extruder motor). If left to zero, the retraction speed is used.
|
||||
(mm/s, default: 0)
|
||||
--disable-fan-first-layers N
|
||||
You can set this to a positive value to disable fan at all during the first
|
||||
layers, so that it does not make adhesion worse. (layers, default: 3)
|
||||
--draft-shield With draft shield active, the skirt will be printed skirt_distance from the
|
||||
object, possibly intersecting brim. Enabled = skirt is as tall as the highest
|
||||
printed object. Limited = skirt is as tall as specified by skirt_height. This is
|
||||
useful to protect an ABS or ASA print from warping and detaching from print bed
|
||||
due to wind draft. (disabled, limited, enabled; default: disabled)
|
||||
--duplicate-distance N
|
||||
Distance used for the auto-arrange feature of the plater. (mm, default: 6)
|
||||
--end-filament-gcode ABCD
|
||||
This end procedure is inserted at the end of the output file, before the printer
|
||||
end gcode (and before any toolchange from this filament in case of multimaterial
|
||||
printers). Note that you can use placeholder variables for all PrusaSlicer
|
||||
settings. If you have multiple extruders, the gcode is processed in extruder
|
||||
order. (default: "; Filament-specific end gcode \n;END gcode for filament\n")
|
||||
--end-gcode ABCD This end procedure is inserted at the end of the output file. Note that you can
|
||||
use placeholder variables for all PrusaSlicer settings. (default: M104 S0 ; turn
|
||||
off temperature\nG28 X0 ; home X axis\nM84 ; disable motors\n)
|
||||
--extra-loading-move N
|
||||
When set to zero, the distance the filament is moved from parking position
|
||||
during load is exactly the same as it was moved back during unload. When
|
||||
positive, it is loaded further, if negative, the loading move is shorter than
|
||||
unloading. (mm, default: -2)
|
||||
--extruder-clearance-height N
|
||||
Set this to the vertical distance between your nozzle tip and (usually) the X
|
||||
carriage rods. In other words, this is the height of the clearance cylinder
|
||||
around your extruder, and it represents the maximum depth the extruder can peek
|
||||
before colliding with other printed objects. (mm, default: 20)
|
||||
--extruder-clearance-radius N
|
||||
Set this to the clearance radius around your extruder. If the extruder is not
|
||||
centered, choose the largest value for safety. This setting is used to check for
|
||||
collisions and to display the graphical preview in the plater. (mm, default: 20)
|
||||
--extruder-colour ABCD
|
||||
This is only used in the Slic3r interface as a visual help. (default: "")
|
||||
--extruder-offset If your firmware doesn't handle the extruder displacement you need the G-code to
|
||||
take it into account. This option lets you specify the displacement of each
|
||||
extruder with respect to the first one. It expects positive coordinates (they
|
||||
will be subtracted from the XY coordinate). (mm, default: 0x0)
|
||||
--extrusion-axis ABCD
|
||||
Use this option to set the axis letter associated to your printer's extruder
|
||||
(usually E but some printers use A). (default: E)
|
||||
--extrusion-multiplier N
|
||||
This factor changes the amount of flow proportionally. You may need to tweak
|
||||
this setting to get nice surface finish and correct single wall widths. Usual
|
||||
values are between 0.9 and 1.1. If you think you need to change this more, check
|
||||
filament diameter and your firmware E steps. (default: 1)
|
||||
--fan-always-on If this is enabled, fan will never be disabled and will be kept running at least
|
||||
at its minimum speed. Useful for PLA, harmful for ABS. (default: 0)
|
||||
--fan-below-layer-time N
|
||||
If layer print time is estimated below this number of seconds, fan will be
|
||||
enabled and its speed will be calculated by interpolating the minimum and
|
||||
maximum speeds. (approximate seconds, default: 60)
|
||||
--filament-colour ABCD
|
||||
This is only used in the Slic3r interface as a visual help. (default: #29B2B2)
|
||||
--filament-cooling-final-speed N
|
||||
Cooling moves are gradually accelerating towards this speed. (mm/s, default:
|
||||
3.4)
|
||||
--filament-cooling-initial-speed N
|
||||
Cooling moves are gradually accelerating beginning at this speed. (mm/s,
|
||||
default: 2.2)
|
||||
--filament-cooling-moves N
|
||||
Filament is cooled by being moved back and forth in the cooling tubes. Specify
|
||||
desired number of these moves. (default: 4)
|
||||
--filament-cost N Enter your filament cost per kg here. This is only for statistical information.
|
||||
(money/kg, default: 0)
|
||||
--filament-density N
|
||||
Enter your filament density here. This is only for statistical information. A
|
||||
decent way is to weigh a known length of filament and compute the ratio of the
|
||||
length to volume. Better is to calculate the volume directly through
|
||||
displacement. (g/cm³, default: 0)
|
||||
--filament-deretract-speed N
|
||||
The speed for loading of a filament into extruder after retraction (it only
|
||||
applies to the extruder motor). If left to zero, the retraction speed is used.
|
||||
(mm/s, default: 0)
|
||||
--filament-diameter N
|
||||
Enter your filament diameter here. Good precision is required, so use a caliper
|
||||
and do multiple measurements along the filament, then compute the average. (mm,
|
||||
default: 1.75)
|
||||
--filament-load-time N
|
||||
Time for the printer firmware (or the Multi Material Unit 2.0) to load a new
|
||||
filament during a tool change (when executing the T code). This time is added to
|
||||
the total print time by the G-code time estimator. (s, default: 0)
|
||||
--filament-loading-speed N
|
||||
Speed used for loading the filament on the wipe tower. (mm/s, default: 28)
|
||||
--filament-loading-speed-start N
|
||||
Speed used at the very beginning of loading phase. (mm/s, default: 3)
|
||||
--filament-max-volumetric-speed N
|
||||
Maximum volumetric speed allowed for this filament. Limits the maximum
|
||||
volumetric speed of a print to the minimum of print and filament volumetric
|
||||
speed. Set to zero for no limit. (mm³/s, default: 0)
|
||||
--filament-minimal-purge-on-wipe-tower N
|
||||
After a tool change, the exact position of the newly loaded filament inside the
|
||||
nozzle may not be known, and the filament pressure is likely not yet stable.
|
||||
Before purging the print head into an infill or a sacrificial object, Slic3r
|
||||
will always prime this amount of material into the wipe tower to produce
|
||||
successive infill or sacrificial object extrusions reliably. (mm³, default: 15)
|
||||
--filament-notes ABCD
|
||||
You can put your notes regarding the filament here. (default: "")
|
||||
--filament-ramming-parameters ABCD
|
||||
This string is edited by RammingDialog and contains ramming specific parameters.
|
||||
(default: "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8
|
||||
0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95
|
||||
7.6")
|
||||
--filament-retract-before-travel N
|
||||
Retraction is not triggered when travel moves are shorter than this length. (mm,
|
||||
default: 2)
|
||||
--filament-retract-before-wipe
|
||||
With bowden extruders, it may be wise to do some amount of quick retract before
|
||||
doing the wipe movement. (%, default: 0%)
|
||||
--filament-retract-layer-change
|
||||
This flag enforces a retraction whenever a Z move is done. (default: 0)
|
||||
--filament-retract-length N
|
||||
When retraction is triggered, filament is pulled back by the specified amount
|
||||
(the length is measured on raw filament, before it enters the extruder). (mm
|
||||
(zero to disable), default: 2)
|
||||
--filament-retract-lift N
|
||||
If you set this to a positive value, Z is quickly raised every time a retraction
|
||||
is triggered. When using multiple extruders, only the setting for the first
|
||||
extruder will be considered. (mm, default: 0)
|
||||
--filament-retract-lift-above N
|
||||
If you set this to a positive value, Z lift will only take place above the
|
||||
specified absolute Z. You can tune this setting for skipping lift on the first
|
||||
layers. (mm, default: 0)
|
||||
--filament-retract-lift-below N
|
||||
If you set this to a positive value, Z lift will only take place below the
|
||||
specified absolute Z. You can tune this setting for limiting lift to the first
|
||||
layers. (mm, default: 0)
|
||||
--filament-retract-restart-extra N
|
||||
When the retraction is compensated after the travel move, the extruder will push
|
||||
this additional amount of filament. This setting is rarely needed. (mm, default:
|
||||
0)
|
||||
--filament-retract-speed N
|
||||
The speed for retractions (it only applies to the extruder motor). (mm/s,
|
||||
default: 40)
|
||||
--filament-soluble Soluble material is most likely used for a soluble support. (default: 0)
|
||||
--filament-spool-weight N
|
||||
Enter weight of the empty filament spool. One may weigh a partially consumed
|
||||
filament spool before printing and one may compare the measured weight with the
|
||||
calculated weight of the filament with the spool to find out whether the amount
|
||||
of filament on the spool is sufficient to finish the print. (g, default: 0)
|
||||
--filament-toolchange-delay N
|
||||
Time to wait after the filament is unloaded. May help to get reliable
|
||||
toolchanges with flexible materials that may need more time to shrink to
|
||||
original dimensions. (s, default: 0)
|
||||
--filament-type ABCD
|
||||
The filament material type for use in custom G-codes. (PLA, PET, ABS, ASA, FLEX,
|
||||
HIPS, EDGE, NGEN, PA, NYLON, PVA, PC, PP, PEI, PEEK, PEKK, POM, PSU, PVDF,
|
||||
SCAFF; default: PLA)
|
||||
--filament-unload-time N
|
||||
Time for the printer firmware (or the Multi Material Unit 2.0) to unload a
|
||||
filament during a tool change (when executing the T code). This time is added to
|
||||
the total print time by the G-code time estimator. (s, default: 0)
|
||||
--filament-unloading-speed N
|
||||
Speed used for unloading the filament on the wipe tower (does not affect initial
|
||||
part of unloading just after ramming). (mm/s, default: 90)
|
||||
--filament-unloading-speed-start N
|
||||
Speed used for unloading the tip of the filament immediately after ramming.
|
||||
(mm/s, default: 100)
|
||||
--filament-wipe This flag will move the nozzle while retracting to minimize the possible blob on
|
||||
leaky extruders. (default: 0)
|
||||
--first-layer-acceleration N
|
||||
This is the acceleration your printer will use for first layer. Set zero to
|
||||
disable acceleration control for first layer. (mm/s², default: 0)
|
||||
--first-layer-acceleration-over-raft N
|
||||
This is the acceleration your printer will use for first layer of object above
|
||||
raft interface. Set zero to disable acceleration control for first layer of
|
||||
object above raft interface. (mm/s², default: 0)
|
||||
--first-layer-bed-temperature N
|
||||
Heated build plate temperature for the first layer. Set this to zero to disable
|
||||
bed temperature control commands in the output. (°C, default: 0)
|
||||
--first-layer-speed N
|
||||
If expressed as absolute value in mm/s, this speed will be applied to all the
|
||||
print moves of the first layer, regardless of their type. If expressed as a
|
||||
percentage (for example: 40%) it will scale the default speeds. (mm/s or %,
|
||||
default: 30)
|
||||
--first-layer-speed-over-raft N
|
||||
If expressed as absolute value in mm/s, this speed will be applied to all the
|
||||
print moves of the first object layer above raft interface, regardless of their
|
||||
type. If expressed as a percentage (for example: 40%) it will scale the default
|
||||
speeds. (mm/s or %, default: 30)
|
||||
--first-layer-temperature N
|
||||
Nozzle temperature for the first layer. If you want to control temperature
|
||||
manually during print, set this to zero to disable temperature control commands
|
||||
in the output G-code. (°C, default: 200)
|
||||
--full-fan-speed-layer N
|
||||
Fan speed will be ramped up linearly from zero at layer
|
||||
"disable_fan_first_layers" to maximum at layer "full_fan_speed_layer".
|
||||
"full_fan_speed_layer" will be ignored if lower than "disable_fan_first_layers",
|
||||
in which case the fan will be running at maximum allowed speed at layer
|
||||
"disable_fan_first_layers" + 1. (default: 0)
|
||||
--gcode-comments Enable this to get a commented G-code file, with each line explained by a
|
||||
descriptive text. If you print from SD card, the additional weight of the file
|
||||
could make your firmware slow down.
|
||||
--gcode-flavor Some G/M-code commands, including temperature control and others, are not
|
||||
universal. Set this option to your printer's firmware to get a compatible
|
||||
output. The "No extrusion" flavor prevents PrusaSlicer from exporting any
|
||||
extrusion value at all. (reprap, reprapfirmware, repetier, teacup, makerware,
|
||||
marlin, marlin2, sailfish, mach3, machinekit, smoothie, no-extrusion; default:
|
||||
reprap)
|
||||
--gcode-label-objects
|
||||
Enable this to add comments into the G-Code labeling print moves with what
|
||||
object they belong to, which is useful for the Octoprint CancelObject plugin.
|
||||
This settings is NOT compatible with Single Extruder Multi Material setup and
|
||||
Wipe into Object / Wipe into Infill.
|
||||
--gcode-resolution N
|
||||
Maximum deviation of exported G-code paths from their full resolution
|
||||
counterparts. Very high resolution G-code requires huge amount of RAM to slice
|
||||
and preview, also a 3D printer may stutter not being able to process a high
|
||||
resolution G-code in a timely manner. On the other hand, a low resolution G-code
|
||||
will produce a low poly effect and because the G-code reduction is performed at
|
||||
each layer independently, visible artifacts may be produced. (mm, default:
|
||||
0.0125)
|
||||
--gcode-substitutions ABCD
|
||||
Find / replace patterns in G-code lines and substitute them. (default: )
|
||||
--high-current-on-filament-swap
|
||||
It may be beneficial to increase the extruder motor current during the filament
|
||||
exchange sequence to allow for rapid ramming feed rates and to overcome
|
||||
resistance when loading a filament with an ugly shaped tip.
|
||||
--infill-acceleration N
|
||||
This is the acceleration your printer will use for infill. Set zero to disable
|
||||
acceleration control for infill. (mm/s², default: 0)
|
||||
--infill-first This option will switch the print order of perimeters and infill, making the
|
||||
latter first.
|
||||
--after-layer-gcode ABCD, --layer-gcode ABCD
|
||||
This custom code is inserted at every layer change, right after the Z move and
|
||||
before the extruder moves to the first layer point. Note that you can use
|
||||
placeholder variables for all Slic3r settings as well as [layer_num] and
|
||||
[layer_z].
|
||||
--max-fan-speed N This setting represents the maximum speed of your fan. (%, default: 100)
|
||||
--max-layer-height N
|
||||
This is the highest printable layer height for this extruder, used to cap the
|
||||
variable layer height and support layer height. Maximum recommended layer height
|
||||
is 75% of the extrusion width to achieve reasonable inter-layer adhesion. If set
|
||||
to 0, layer height is limited to 75% of the nozzle diameter. (mm, default: 0)
|
||||
--max-print-height N
|
||||
Set this to the maximum height that can be reached by your extruder while
|
||||
printing. (mm, default: 200)
|
||||
--max-print-speed N When setting other speed settings to 0 Slic3r will autocalculate the optimal
|
||||
speed in order to keep constant extruder pressure. This experimental setting is
|
||||
used to set the highest print speed you want to allow. (mm/s, default: 80)
|
||||
--max-volumetric-extrusion-rate-slope-negative N
|
||||
This experimental setting is used to limit the speed of change in extrusion rate
|
||||
for a transition from higher speed to lower speed. A value of 1.8 mm³/s²
|
||||
ensures, that a change from the extrusion rate of 5.4 mm³/s (0.45 mm extrusion
|
||||
width, 0.2 mm extrusion height, feedrate 60 mm/s) to 1.8 mm³/s (feedrate 20
|
||||
mm/s) will take at least 2 seconds. (mm³/s², default: 0)
|
||||
--max-volumetric-extrusion-rate-slope-positive N
|
||||
This experimental setting is used to limit the speed of change in extrusion rate
|
||||
for a transition from lower speed to higher speed. A value of 1.8 mm³/s²
|
||||
ensures, that a change from the extrusion rate of 1.8 mm³/s (0.45 mm extrusion
|
||||
width, 0.2 mm extrusion height, feedrate 20 mm/s) to 5.4 mm³/s (feedrate 60
|
||||
mm/s) will take at least 2 seconds. (mm³/s², default: 0)
|
||||
--max-volumetric-speed N
|
||||
This experimental setting is used to set the maximum volumetric speed your
|
||||
extruder supports. (mm³/s, default: 0)
|
||||
--min-fan-speed N This setting represents the minimum PWM your fan needs to work. (%, default: 35)
|
||||
--min-layer-height N
|
||||
This is the lowest printable layer height for this extruder and limits the
|
||||
resolution for variable layer height. Typical values are between 0.05 mm and 0.1
|
||||
mm. (mm, default: 0.07)
|
||||
--min-print-speed N Slic3r will not scale speed down below this speed. (mm/s, default: 10)
|
||||
--min-skirt-length N
|
||||
Generate no less than the number of skirt loops required to consume the
|
||||
specified amount of filament on the bottom layer. For multi-extruder machines,
|
||||
this minimum applies to each extruder. (mm, default: 0)
|
||||
--notes ABCD You can put here your personal notes. This text will be added to the G-code
|
||||
header comments.
|
||||
--nozzle-diameter N This is the diameter of your extruder nozzle (for example: 0.5, 0.35 etc.) (mm,
|
||||
default: 0.4)
|
||||
--only-retract-when-crossing-perimeters
|
||||
Disables retraction when the travel path does not exceed the upper layer's
|
||||
perimeters (and thus any ooze will be probably invisible).
|
||||
--ooze-prevention This option will drop the temperature of the inactive extruders to prevent
|
||||
oozing. It will enable a tall skirt automatically and move extruders outside
|
||||
such skirt when changing temperatures.
|
||||
--output-filename-format ABCD
|
||||
You can use all configuration options as variables inside this template. For
|
||||
example: [layer_height], [fill_density] etc. You can also use [timestamp],
|
||||
[year], [month], [day], [hour], [minute], [second], [version], [input_filename],
|
||||
[input_filename_base]. (default: [input_filename_base].gcode)
|
||||
--parking-pos-retraction N
|
||||
Distance of the extruder tip from the position where the filament is parked when
|
||||
unloaded. This should match the value in printer firmware. (mm, default: 92)
|
||||
--pause-print-gcode ABCD
|
||||
This G-code will be used as a code for the pause print (default: M601)
|
||||
--perimeter-acceleration N
|
||||
This is the acceleration your printer will use for perimeters. Set zero to
|
||||
disable acceleration control for perimeters. (mm/s², default: 0)
|
||||
--post-process ABCD If you want to process the output G-code through custom scripts, just list their
|
||||
absolute paths here. Separate multiple scripts with a semicolon. Scripts will be
|
||||
passed the absolute path to the G-code file as the first argument, and they can
|
||||
access the Slic3r config settings by reading environment variables. (default: )
|
||||
--preset-name ABCD
|
||||
--preset-names ABCD Names of presets related to the physical printer (default: )
|
||||
--printer-notes ABCD
|
||||
You can put your notes regarding the printer here.
|
||||
--printer-technology
|
||||
Printer technology (FFF, SLA; default: FFF)
|
||||
--remaining-times Emit M73 P[percent printed] R[remaining time in minutes] at 1 minute intervals
|
||||
into the G-code to let the firmware show accurate remaining time. As of now only
|
||||
the Prusa i3 MK3 firmware recognizes M73. Also the i3 MK3 firmware supports M73
|
||||
Qxx Sxx for the silent mode.
|
||||
--resolution N Minimum detail resolution, used to simplify the input file for speeding up the
|
||||
slicing job and reducing memory usage. High-resolution models often carry more
|
||||
detail than printers can render. Set to zero to disable any simplification and
|
||||
use full resolution from input. (mm, default: 0)
|
||||
--retract-before-travel N
|
||||
Retraction is not triggered when travel moves are shorter than this length. (mm,
|
||||
default: 2)
|
||||
--retract-before-wipe
|
||||
With bowden extruders, it may be wise to do some amount of quick retract before
|
||||
doing the wipe movement. (%, default: 0%)
|
||||
--retract-layer-change
|
||||
This flag enforces a retraction whenever a Z move is done. (default: 0)
|
||||
--retract-length N When retraction is triggered, filament is pulled back by the specified amount
|
||||
(the length is measured on raw filament, before it enters the extruder). (mm
|
||||
(zero to disable), default: 2)
|
||||
--retract-length-toolchange N
|
||||
When retraction is triggered before changing tool, filament is pulled back by
|
||||
the specified amount (the length is measured on raw filament, before it enters
|
||||
the extruder). (mm (zero to disable), default: 10)
|
||||
--retract-lift N If you set this to a positive value, Z is quickly raised every time a retraction
|
||||
is triggered. When using multiple extruders, only the setting for the first
|
||||
extruder will be considered. (mm, default: 0)
|
||||
--retract-lift-above N
|
||||
If you set this to a positive value, Z lift will only take place above the
|
||||
specified absolute Z. You can tune this setting for skipping lift on the first
|
||||
layers. (mm, default: 0)
|
||||
--retract-lift-below N
|
||||
If you set this to a positive value, Z lift will only take place below the
|
||||
specified absolute Z. You can tune this setting for limiting lift to the first
|
||||
layers. (mm, default: 0)
|
||||
--retract-restart-extra N
|
||||
When the retraction is compensated after the travel move, the extruder will push
|
||||
this additional amount of filament. This setting is rarely needed. (mm, default:
|
||||
0)
|
||||
--retract-restart-extra-toolchange N
|
||||
When the retraction is compensated after changing tool, the extruder will push
|
||||
this additional amount of filament. (mm, default: 0)
|
||||
--retract-speed N The speed for retractions (it only applies to the extruder motor). (mm/s,
|
||||
default: 40)
|
||||
--silent-mode The firmware supports stealth mode
|
||||
--single-extruder-multi-material
|
||||
The printer multiplexes filaments into a single hot end.
|
||||
--single-extruder-multi-material-priming
|
||||
If enabled, all printing extruders will be primed at the front edge of the print
|
||||
bed at the start of the print.
|
||||
--skirt-distance N Distance between skirt and brim (when draft shield is not used) or objects. (mm,
|
||||
default: 6)
|
||||
--skirt-height N Height of skirt expressed in layers. (layers, default: 1)
|
||||
--skirts N Number of loops for the skirt. If the Minimum Extrusion Length option is set,
|
||||
the number of loops might be greater than the one configured here. Set this to
|
||||
zero to disable skirt completely. (default: 1)
|
||||
--slowdown-below-layer-time N
|
||||
If layer print time is estimated below this number of seconds, print moves speed
|
||||
will be scaled down to extend duration to this value. (approximate seconds,
|
||||
default: 5)
|
||||
--solid-layers N Number of solid layers to generate on top and bottom surfaces.
|
||||
--solid-min-thickness N
|
||||
Minimum thickness of a top / bottom shell
|
||||
--spiral-vase This feature will raise Z gradually while printing a single-walled object in
|
||||
order to remove any visible seam. This option requires a single perimeter, no
|
||||
infill, no top solid layers and no support material. You can still set any
|
||||
number of bottom solid layers as well as skirt/brim loops. It won't work when
|
||||
printing more than one single object.
|
||||
--standby-temperature-delta N
|
||||
Temperature difference to be applied when an extruder is not active. Enables a
|
||||
full-height "sacrificial" skirt on which the nozzles are periodically wiped.
|
||||
(∆°C, default: -5)
|
||||
--start-filament-gcode ABCD
|
||||
This start procedure is inserted at the beginning, after any printer start gcode
|
||||
(and after any toolchange to this filament in case of multi-material printers).
|
||||
This is used to override settings for a specific filament. If PrusaSlicer
|
||||
detects M104, M109, M140 or M190 in your custom codes, such commands will not be
|
||||
prepended automatically so you're free to customize the order of heating
|
||||
commands and other custom actions. Note that you can use placeholder variables
|
||||
for all PrusaSlicer settings, so you can put a "M109 S[first_layer_temperature]"
|
||||
command wherever you want. If you have multiple extruders, the gcode is
|
||||
processed in extruder order. (default: "; Filament gcode\n")
|
||||
--start-gcode ABCD This start procedure is inserted at the beginning, after bed has reached the
|
||||
target temperature and extruder just started heating, and before extruder has
|
||||
finished heating. If PrusaSlicer detects M104 or M190 in your custom codes, such
|
||||
commands will not be prepended automatically so you're free to customize the
|
||||
order of heating commands and other custom actions. Note that you can use
|
||||
placeholder variables for all PrusaSlicer settings, so you can put a "M109
|
||||
S[first_layer_temperature]" command wherever you want. (default: G28 ; home all
|
||||
axes\nG1 Z5 F5000 ; lift nozzle\n)
|
||||
--temperature N Nozzle temperature for layers after the first one. Set this to zero to disable
|
||||
temperature control commands in the output G-code. (°C, default: 200)
|
||||
--template-custom-gcode ABCD
|
||||
This G-code will be used as a custom code
|
||||
--thumbnails Picture sizes to be stored into a .gcode and .sl1 / .sl1s files, in the
|
||||
following format: "XxY, XxY, ..." (default: )
|
||||
--thumbnails-format Format of G-code thumbnails: PNG for best quality, JPG for smallest size, QOI
|
||||
for low memory firmware (PNG, JPG, QOI; default: PNG)
|
||||
--toolchange-gcode ABCD
|
||||
This custom code is inserted before every toolchange. Placeholder variables for
|
||||
all PrusaSlicer settings as well as {toolchange_z}, {previous_extruder} and
|
||||
{next_extruder} can be used. When a tool-changing command which changes to the
|
||||
correct extruder is included (such as T{next_extruder}), PrusaSlicer will emit
|
||||
no other such command. It is therefore possible to script custom behaviour both
|
||||
before and after the toolchange.
|
||||
--travel-speed N Speed for travel moves (jumps between distant extrusion points). (mm/s, default:
|
||||
130)
|
||||
--travel-speed-z N Speed for movements along the Z axis. When set to zero, the value is ignored and
|
||||
regular travel speed is used instead. (mm/s, default: 0)
|
||||
--use-firmware-retraction
|
||||
This experimental setting uses G10 and G11 commands to have the firmware handle
|
||||
the retraction. This is only supported in recent Marlin.
|
||||
--use-relative-e-distances
|
||||
If your firmware requires relative E values, check this, otherwise leave it
|
||||
unchecked. Most firmwares use absolute values.
|
||||
--use-volumetric-e This experimental setting uses outputs the E values in cubic millimeters instead
|
||||
of linear millimeters. If your firmware doesn't already know filament
|
||||
diameter(s), you can put commands like 'M200 D[filament_diameter_0] T0' in your
|
||||
start G-code in order to turn volumetric mode on and use the filament diameter
|
||||
associated to the filament selected in Slic3r. This is only supported in recent
|
||||
Marlin.
|
||||
--variable-layer-height
|
||||
Some printers or printer setups may have difficulties printing with a variable
|
||||
layer height. Enabled by default.
|
||||
--wipe This flag will move the nozzle while retracting to minimize the possible blob on
|
||||
leaky extruders. (default: 0)
|
||||
--wipe-tower Multi material printers may need to prime or purge extruders on tool changes.
|
||||
Extrude the excess material into the wipe tower.
|
||||
--wipe-tower-bridging N
|
||||
Maximal distance between supports on sparse infill sections. (mm, default: 10)
|
||||
--wipe-tower-brim-width N
|
||||
Wipe tower brim width (mm, default: 2)
|
||||
--wipe-tower-no-sparse-layers
|
||||
If enabled, the wipe tower will not be printed on layers with no toolchanges. On
|
||||
layers with a toolchange, extruder will travel downward to print the wipe tower.
|
||||
User is responsible for ensuring there is no collision with the print.
|
||||
--wipe-tower-rotation-angle N
|
||||
Wipe tower rotation angle with respect to x-axis. (°, default: 0)
|
||||
--wipe-tower-width N
|
||||
Width of a wipe tower (mm, default: 60)
|
||||
--wipe-tower-x N X coordinate of the left front corner of a wipe tower (mm, default: 180)
|
||||
--wipe-tower-y N Y coordinate of the left front corner of a wipe tower (mm, default: 140)
|
||||
--wiping-volumes-extruders N
|
||||
This vector saves required volumes to change from/to each tool used on the wipe
|
||||
tower. These values are used to simplify creation of the full purging volumes
|
||||
below. (default: 70,70,70,70,70,70,70,70,70,70)
|
||||
--wiping-volumes-matrix N
|
||||
This matrix describes volumes (in cubic milimetres) required to purge the new
|
||||
filament on the wipe tower for any given pair of tools. (default:
|
||||
0,140,140,140,140,140,0,140,140,140,140,140,0,140,140,140,140,140,0,140,140,140,140,140,0)
|
||||
--z-offset N This value will be added (or subtracted) from all the Z coordinates in the
|
||||
output G-code. It is used to compensate for bad Z endstop position: for example,
|
||||
if your endstop zero actually leaves the nozzle 0.3mm far from the print bed,
|
||||
set this to -0.3 (or fix your endstop). (mm, default: 0)
|
||||
Advanced:
|
||||
--bridge-flow-ratio N
|
||||
This factor affects the amount of plastic for bridging. You can decrease it
|
||||
slightly to pull the extrudates and prevent sagging, although default settings
|
||||
are usually good and you should experiment with cooling (use a fan) before
|
||||
tweaking this. (default: 1)
|
||||
--elefant-foot-compensation N
|
||||
The first layer will be shrunk in the XY plane by the configured value to
|
||||
compensate for the 1st layer squish aka an Elephant Foot effect. (mm, default:
|
||||
0)
|
||||
--infill-anchor N Connect an infill line to an internal perimeter with a short segment of an
|
||||
additional perimeter. If expressed as percentage (example: 15%) it is calculated
|
||||
over infill extrusion width. PrusaSlicer tries to connect two close infill lines
|
||||
to a short perimeter segment. If no such perimeter segment shorter than
|
||||
infill_anchor_max is found, the infill line is connected to a perimeter segment
|
||||
at just one side and the length of the perimeter segment taken is limited to
|
||||
this parameter, but no longer than anchor_length_max. Set this parameter to zero
|
||||
to disable anchoring perimeters connected to a single infill line. (mm or %,
|
||||
default: 600%)
|
||||
--infill-anchor-max N
|
||||
Connect an infill line to an internal perimeter with a short segment of an
|
||||
additional perimeter. If expressed as percentage (example: 15%) it is calculated
|
||||
over infill extrusion width. PrusaSlicer tries to connect two close infill lines
|
||||
to a short perimeter segment. If no such perimeter segment shorter than this
|
||||
parameter is found, the infill line is connected to a perimeter segment at just
|
||||
one side and the length of the perimeter segment taken is limited to
|
||||
infill_anchor, but no longer than this parameter. Set this parameter to zero to
|
||||
disable anchoring. (mm or %, default: 50)
|
||||
--infill-overlap N This setting applies an additional overlap between infill and perimeters for
|
||||
better bonding. Theoretically this shouldn't be needed, but backlash might cause
|
||||
gaps. If expressed as percentage (example: 15%) it is calculated over perimeter
|
||||
extrusion width. (mm or %, default: 25%)
|
||||
--min-bead-width N Width of the perimeter that will replace thin features (according to the Minimum
|
||||
feature size) of the model. If the Minimum perimeter width is thinner than the
|
||||
thickness of the feature, the perimeter will become as thick as the feature
|
||||
itself. If expressed as a percentage (for example 85%), it will be computed
|
||||
based on the nozzle diameter. (mm or %, default: 85%)
|
||||
--min-feature-size N
|
||||
Minimum thickness of thin features. Model features that are thinner than this
|
||||
value will not be printed, while features thicker than the Minimum feature size
|
||||
will be widened to the Minimum perimeter width. If expressed as a percentage
|
||||
(for example 25%), it will be computed based on the nozzle diameter. (mm or %,
|
||||
default: 25%)
|
||||
--mmu-segmented-region-max-width N
|
||||
Maximum width of a segmented region. Zero disables this feature. (mm (zero to
|
||||
disable), default: 0)
|
||||
--slice-closing-radius N
|
||||
Cracks smaller than 2x gap closing radius are being filled during the triangle
|
||||
mesh slicing. The gap closing operation may reduce the final print resolution,
|
||||
therefore it is advisable to keep the value reasonably low. (mm, default: 0.049)
|
||||
--slicing-mode Use "Even-odd" for 3DLabPrint airplane models. Use "Close holes" to close all
|
||||
holes in the model. (regular, even_odd, close_holes; default: regular)
|
||||
--wall-distribution-count N
|
||||
The number of perimeters, counted from the center, over which the variation
|
||||
needs to be spread. Lower values mean that the outer perimeters don't change in
|
||||
width. (default: 1)
|
||||
--wall-transition-angle N
|
||||
When to create transitions between even and odd numbers of perimeters. A wedge
|
||||
shape with an angle greater than this setting will not have transitions and no
|
||||
perimeters will be printed in the center to fill the remaining space. Reducing
|
||||
this setting reduces the number and length of these center perimeters, but may
|
||||
leave gaps or overextrude. (°, default: 10)
|
||||
--wall-transition-filter-deviation N
|
||||
Prevent transitioning back and forth between one extra perimeter and one less.
|
||||
This margin extends the range of extrusion widths which follow to [Minimum
|
||||
perimeter width - margin, 2 * Minimum perimeter width + margin]. Increasing this
|
||||
margin reduces the number of transitions, which reduces the number of extrusion
|
||||
starts/stops and travel time. However, large extrusion width variation can lead
|
||||
to under- or overextrusion problems. If expressed as a percentage (for example
|
||||
25%), it will be computed based on the nozzle diameter. (mm or %, default: 25%)
|
||||
--wall-transition-length N
|
||||
When transitioning between different numbers of perimeters as the part becomes
|
||||
thinner, a certain amount of space is allotted to split or join the perimeter
|
||||
segments. If expressed as a percentage (for example 100%), it will be computed
|
||||
based on the nozzle diameter. (mm or %, default: 100%)
|
||||
--xy-size-compensation N
|
||||
The object will be grown/shrunk in the XY plane by the configured value
|
||||
(negative = inwards, positive = outwards). This might be useful for fine-tuning
|
||||
hole sizes. (mm, default: 0)
|
||||
Extruders:
|
||||
--extruder N The extruder to use (unless more specific extruder settings are specified). This
|
||||
value overrides perimeter and infill extruders, but not the support extruders.
|
||||
--infill-extruder N The extruder to use when printing infill. (default: 1)
|
||||
--perimeter-extruder N
|
||||
The extruder to use when printing perimeters and brim. First extruder is 1.
|
||||
(default: 1)
|
||||
--solid-infill-extruder N
|
||||
The extruder to use when printing solid infill. (default: 1)
|
||||
--support-material-extruder N
|
||||
The extruder to use when printing support material, raft and skirt (1+, 0 to use
|
||||
the current extruder to minimize tool changes). (default: 1)
|
||||
--support-material-interface-extruder N
|
||||
The extruder to use when printing support material interface (1+, 0 to use the
|
||||
current extruder to minimize tool changes). This affects raft too. (default: 1)
|
||||
Extrusion Width:
|
||||
--external-perimeter-extrusion-width N
|
||||
Set this to a non-zero value to set a manual extrusion width for external
|
||||
perimeters. If left zero, default extrusion width will be used if set, otherwise
|
||||
1.125 x nozzle diameter will be used. If expressed as percentage (for example
|
||||
200%), it will be computed over layer height. (mm or %, default: 0)
|
||||
--extrusion-width N Set this to a non-zero value to allow a manual extrusion width. If left to zero,
|
||||
Slic3r derives extrusion widths from the nozzle diameter (see the tooltips for
|
||||
perimeter extrusion width, infill extrusion width etc). If expressed as
|
||||
percentage (for example: 230%), it will be computed over layer height. (mm or %,
|
||||
default: 0)
|
||||
--first-layer-extrusion-width N
|
||||
Set this to a non-zero value to set a manual extrusion width for first layer.
|
||||
You can use this to force fatter extrudates for better adhesion. If expressed as
|
||||
percentage (for example 120%) it will be computed over first layer height. If
|
||||
set to zero, it will use the default extrusion width. (mm or %, default: 200%)
|
||||
--infill-extrusion-width N
|
||||
Set this to a non-zero value to set a manual extrusion width for infill. If left
|
||||
zero, default extrusion width will be used if set, otherwise 1.125 x nozzle
|
||||
diameter will be used. You may want to use fatter extrudates to speed up the
|
||||
infill and make your parts stronger. If expressed as percentage (for example
|
||||
90%) it will be computed over layer height. (mm or %, default: 0)
|
||||
--perimeter-extrusion-width N
|
||||
Set this to a non-zero value to set a manual extrusion width for perimeters. You
|
||||
may want to use thinner extrudates to get more accurate surfaces. If left zero,
|
||||
default extrusion width will be used if set, otherwise 1.125 x nozzle diameter
|
||||
will be used. If expressed as percentage (for example 200%) it will be computed
|
||||
over layer height. (mm or %, default: 0)
|
||||
--solid-infill-extrusion-width N
|
||||
Set this to a non-zero value to set a manual extrusion width for infill for
|
||||
solid surfaces. If left zero, default extrusion width will be used if set,
|
||||
otherwise 1.125 x nozzle diameter will be used. If expressed as percentage (for
|
||||
example 90%) it will be computed over layer height. (mm or %, default: 0)
|
||||
--support-material-extrusion-width N
|
||||
Set this to a non-zero value to set a manual extrusion width for support
|
||||
material. If left zero, default extrusion width will be used if set, otherwise
|
||||
nozzle diameter will be used. If expressed as percentage (for example 90%) it
|
||||
will be computed over layer height. (mm or %, default: 0)
|
||||
--top-infill-extrusion-width N
|
||||
Set this to a non-zero value to set a manual extrusion width for infill for top
|
||||
surfaces. You may want to use thinner extrudates to fill all narrow regions and
|
||||
get a smoother finish. If left zero, default extrusion width will be used if
|
||||
set, otherwise nozzle diameter will be used. If expressed as percentage (for
|
||||
example 90%) it will be computed over layer height. (mm or %, default: 0)
|
||||
Fuzzy Skin:
|
||||
--fuzzy-skin Fuzzy skin type. (none, external, all; default: none)
|
||||
--fuzzy-skin-point-dist N
|
||||
Perimeters will be split into multiple segments by inserting Fuzzy skin points.
|
||||
Lowering the Fuzzy skin point distance will increase the number of randomly
|
||||
offset points on the perimeter wall. (mm, default: 0.8)
|
||||
--fuzzy-skin-thickness N
|
||||
The maximum distance that each skin point can be offset (both ways), measured
|
||||
perpendicular to the perimeter wall. (mm, default: 0.3)
|
||||
Infill:
|
||||
--bottom-fill-pattern, --external-fill-pattern, --solid-fill-pattern
|
||||
Fill pattern for bottom infill. This only affects the bottom external visible
|
||||
layer, and not its adjacent solid shells. (rectilinear, monotonic,
|
||||
alignedrectilinear, concentric, hilbertcurve, archimedeanchords, octagramspiral;
|
||||
default: monotonic)
|
||||
--bridge-angle N Bridging angle override. If left to zero, the bridging angle will be calculated
|
||||
automatically. Otherwise the provided angle will be used for all bridges. Use
|
||||
180° for zero angle. (°, default: 0)
|
||||
--fill-angle N Default base angle for infill orientation. Cross-hatching will be applied to
|
||||
this. Bridges will be infilled using the best direction Slic3r can detect, so
|
||||
this setting does not affect them. (°, default: 45)
|
||||
--fill-density Density of internal infill, expressed in the range 0% - 100%. (%, default: 20%)
|
||||
--fill-pattern Fill pattern for general low-density infill. (rectilinear, alignedrectilinear,
|
||||
grid, triangles, stars, cubic, line, concentric, honeycomb, 3dhoneycomb, gyroid,
|
||||
hilbertcurve, archimedeanchords, octagramspiral, adaptivecubic, supportcubic,
|
||||
lightning; default: stars)
|
||||
--infill-every-layers N
|
||||
This feature allows to combine infill and speed up your print by extruding
|
||||
thicker infill layers while preserving thin perimeters, thus accuracy. (layers,
|
||||
default: 1)
|
||||
--infill-only-where-needed
|
||||
This option will limit infill to the areas actually needed for supporting
|
||||
ceilings (it will act as internal support material). If enabled, slows down the
|
||||
G-code generation due to the multiple checks involved.
|
||||
--solid-infill-below-area N
|
||||
Force solid infill for regions having a smaller area than the specified
|
||||
threshold. (mm², default: 70)
|
||||
--solid-infill-every-layers N
|
||||
This feature allows to force a solid layer every given number of layers. Zero to
|
||||
disable. You can set this to any value (for example 9999); Slic3r will
|
||||
automatically choose the maximum possible number of layers to combine according
|
||||
to nozzle diameter and layer height. (layers, default: 0)
|
||||
--top-fill-pattern, --external-fill-pattern, --solid-fill-pattern
|
||||
Fill pattern for top infill. This only affects the top visible layer, and not
|
||||
its adjacent solid shells. (rectilinear, monotonic, alignedrectilinear,
|
||||
concentric, hilbertcurve, archimedeanchords, octagramspiral; default: monotonic)
|
||||
Ironing:
|
||||
--ironing Enable ironing of the top layers with the hot print head for smooth surface
|
||||
--ironing-flowrate Percent of a flow rate relative to object's normal layer height. (%, default:
|
||||
15%)
|
||||
--ironing-spacing N Distance between ironing lines (mm, default: 0.1)
|
||||
--ironing-type Ironing Type (top, topmost, solid; default: top)
|
||||
Layers and Perimeters:
|
||||
--avoid-crossing-perimeters-max-detour N
|
||||
The maximum detour length for avoid crossing perimeters. If the detour is longer
|
||||
than this value, avoid crossing perimeters is not applied for this travel path.
|
||||
Detour length could be specified either as an absolute value or as percentage
|
||||
(for example 50%) of a direct travel path. (mm or % (zero to disable), default:
|
||||
0)
|
||||
--bottom-solid-layers N
|
||||
Number of solid layers to generate on bottom surfaces. (default: 3)
|
||||
--bottom-solid-min-thickness N
|
||||
The number of bottom solid layers is increased above bottom_solid_layers if
|
||||
necessary to satisfy minimum thickness of bottom shell. (mm, default: 0)
|
||||
--ensure-vertical-shell-thickness
|
||||
Add solid infill near sloping surfaces to guarantee the vertical shell thickness
|
||||
(top+bottom solid layers).
|
||||
--external-perimeters-first
|
||||
Print contour perimeters from the outermost one to the innermost one instead of
|
||||
the default inverse order.
|
||||
--extra-perimeters Add more perimeters when needed for avoiding gaps in sloping walls. Slic3r keeps
|
||||
adding perimeters, until more than 70% of the loop immediately above is
|
||||
supported.
|
||||
--first-layer-height N
|
||||
When printing with very low layer heights, you might still want to print a
|
||||
thicker bottom layer to improve adhesion and tolerance for non perfect build
|
||||
plates. (mm, default: 0.35)
|
||||
--gap-fill-enabled Enables filling of gaps between perimeters and between the inner most perimeters
|
||||
and infill.
|
||||
--interface-shells Force the generation of solid shells between adjacent materials/volumes. Useful
|
||||
for multi-extruder prints with translucent materials or manual soluble support
|
||||
material.
|
||||
--layer-height N This setting controls the height (and thus the total number) of the
|
||||
slices/layers. Thinner layers give better accuracy but take more time to print.
|
||||
(mm, default: 0.3)
|
||||
--overhangs Experimental option to adjust flow for overhangs (bridge flow will be used), to
|
||||
apply bridge speed to them and enable fan.
|
||||
--perimeter-generator
|
||||
Classic perimeter generator produces perimeters with constant extrusion width
|
||||
and for very thin areas is used gap-fill. Arachne engine produces perimeters
|
||||
with variable extrusion width. This setting also affects the Concentric infill.
|
||||
(classic, arachne; default: arachne)
|
||||
--perimeters N This option sets the number of perimeters to generate for each layer. Note that
|
||||
Slic3r may increase this number automatically when it detects sloping surfaces
|
||||
which benefit from a higher number of perimeters if the Extra Perimeters option
|
||||
is enabled. ((minimum), default: 3)
|
||||
--seam-position Position of perimeters starting points. (random, nearest, aligned, rear;
|
||||
default: aligned)
|
||||
--thick-bridges If enabled, bridges are more reliable, can bridge longer distances, but may look
|
||||
worse. If disabled, bridges look better but are reliable just for shorter
|
||||
bridged distances.
|
||||
--thin-walls Detect single-width walls (parts where two extrusions don't fit and we need to
|
||||
collapse them into a single trace).
|
||||
--top-solid-layers N
|
||||
Number of solid layers to generate on top surfaces. (default: 3)
|
||||
--top-solid-min-thickness N
|
||||
The number of top solid layers is increased above top_solid_layers if necessary
|
||||
to satisfy minimum thickness of top shell. This is useful to prevent pillowing
|
||||
effect when printing with variable layer height. (mm, default: 0)
|
||||
Machine limits:
|
||||
--machine-limits-usage
|
||||
How to apply the Machine Limits (emit_to_gcode, time_estimate_only, ignore;
|
||||
default: time_estimate_only)
|
||||
--machine-max-acceleration-e N
|
||||
Maximum acceleration of the E axis (mm/s², default: 10000,5000)
|
||||
--machine-max-acceleration-extruding N
|
||||
Maximum acceleration when extruding (M204 P) Marlin (legacy) firmware flavor
|
||||
will use this also as travel acceleration (M204 T). (mm/s², default: 1500,1250)
|
||||
--machine-max-acceleration-retracting N
|
||||
Maximum acceleration when retracting (M204 R) (mm/s², default: 1500,1250)
|
||||
--machine-max-acceleration-travel N
|
||||
Maximum acceleration for travel moves (M204 T) (mm/s², default: 1500,1250)
|
||||
--machine-max-acceleration-x N
|
||||
Maximum acceleration of the X axis (mm/s², default: 9000,1000)
|
||||
--machine-max-acceleration-y N
|
||||
Maximum acceleration of the Y axis (mm/s², default: 9000,1000)
|
||||
--machine-max-acceleration-z N
|
||||
Maximum acceleration of the Z axis (mm/s², default: 500,200)
|
||||
--machine-max-feedrate-e N
|
||||
Maximum feedrate of the E axis (mm/s, default: 120,120)
|
||||
--machine-max-feedrate-x N
|
||||
Maximum feedrate of the X axis (mm/s, default: 500,200)
|
||||
--machine-max-feedrate-y N
|
||||
Maximum feedrate of the Y axis (mm/s, default: 500,200)
|
||||
--machine-max-feedrate-z N
|
||||
Maximum feedrate of the Z axis (mm/s, default: 12,12)
|
||||
--machine-max-jerk-e N
|
||||
Maximum jerk of the E axis (mm/s, default: 2.5,2.5)
|
||||
--machine-max-jerk-x N
|
||||
Maximum jerk of the X axis (mm/s, default: 10,10)
|
||||
--machine-max-jerk-y N
|
||||
Maximum jerk of the Y axis (mm/s, default: 10,10)
|
||||
--machine-max-jerk-z N
|
||||
Maximum jerk of the Z axis (mm/s, default: 0.2,0.4)
|
||||
--machine-min-extruding-rate N
|
||||
Minimum feedrate when extruding (M205 S) (mm/s, default: 0,0)
|
||||
--machine-min-travel-rate N
|
||||
Minimum travel feedrate (M205 T) (mm/s, default: 0,0)
|
||||
Skirt and brim:
|
||||
--brim-separation N Offset of brim from the printed object. The offset is applied after the elephant
|
||||
foot compensation. (mm, default: 0)
|
||||
--brim-type The places where the brim will be printed around each object on the first layer.
|
||||
(no_brim, outer_only, inner_only, outer_and_inner; default: outer_only)
|
||||
--brim-width N The horizontal width of the brim that will be printed around each object on the
|
||||
first layer. When raft is used, no brim is generated (use
|
||||
raft_first_layer_expansion). (mm, default: 0)
|
||||
Speed:
|
||||
--bridge-speed N Speed for printing bridges. (mm/s, default: 60)
|
||||
--external-perimeter-speed N
|
||||
This separate setting will affect the speed of external perimeters (the visible
|
||||
ones). If expressed as percentage (for example: 80%) it will be calculated on
|
||||
the perimeters speed setting above. Set to zero for auto. (mm/s or %, default:
|
||||
50%)
|
||||
--gap-fill-speed N Speed for filling small gaps using short zigzag moves. Keep this reasonably low
|
||||
to avoid too much shaking and resonance issues. Set zero to disable gaps
|
||||
filling. (mm/s, default: 20)
|
||||
--infill-speed N Speed for printing the internal fill. Set to zero for auto. (mm/s, default: 80)
|
||||
--ironing-speed N Ironing (mm/s, default: 15)
|
||||
--perimeter-speed N Speed for perimeters (contours, aka vertical shells). Set to zero for auto.
|
||||
(mm/s, default: 60)
|
||||
--small-perimeter-speed N
|
||||
This separate setting will affect the speed of perimeters having radius <= 6.5mm
|
||||
(usually holes). If expressed as percentage (for example: 80%) it will be
|
||||
calculated on the perimeters speed setting above. Set to zero for auto. (mm/s or
|
||||
%, default: 15)
|
||||
--solid-infill-speed N
|
||||
Speed for printing solid regions (top/bottom/internal horizontal shells). This
|
||||
can be expressed as a percentage (for example: 80%) over the default infill
|
||||
speed above. Set to zero for auto. (mm/s or %, default: 20)
|
||||
--top-solid-infill-speed N
|
||||
Speed for printing top solid layers (it only applies to the uppermost external
|
||||
layers and not to their internal solid layers). You may want to slow down this
|
||||
to get a nicer surface finish. This can be expressed as a percentage (for
|
||||
example: 80%) over the solid infill speed above. Set to zero for auto. (mm/s or
|
||||
%, default: 15)
|
||||
Support material:
|
||||
--dont-support-bridges
|
||||
Experimental option for preventing support material from being generated under
|
||||
bridged areas.
|
||||
--raft-contact-distance N
|
||||
The vertical distance between object and raft. Ignored for soluble interface.
|
||||
(mm, default: 0.1)
|
||||
--raft-expansion N Expansion of the raft in XY plane for better stability. (mm, default: 1.5)
|
||||
--raft-first-layer-density
|
||||
Density of the first raft or support layer. (%, default: 90%)
|
||||
--raft-first-layer-expansion N
|
||||
Expansion of the first raft or support layer to improve adhesion to print bed.
|
||||
(mm, default: 3)
|
||||
--raft-layers N The object will be raised by this number of layers, and support material will be
|
||||
generated under it. (layers, default: 0)
|
||||
--support-material Enable support material generation.
|
||||
--support-material-angle N
|
||||
Use this setting to rotate the support material pattern on the horizontal plane.
|
||||
(°, default: 0)
|
||||
--support-material-auto
|
||||
If checked, supports will be generated automatically based on the overhang
|
||||
threshold value. If unchecked, supports will be generated inside the "Support
|
||||
Enforcer" volumes only.
|
||||
--support-material-bottom-contact-distance N
|
||||
The vertical distance between the object top surface and the support material
|
||||
interface. If set to zero, support_material_contact_distance will be used for
|
||||
both top and bottom contact Z distances. (mm, default: 0)
|
||||
--support-material-bottom-interface-layers N
|
||||
Number of interface layers to insert between the object(s) and support material.
|
||||
Set to -1 to use support_material_interface_layers (layers, default: -1)
|
||||
--support-material-buildplate-only
|
||||
Only create support if it lies on a build plate. Don't create support on a
|
||||
print.
|
||||
--support-material-closing-radius N
|
||||
For snug supports, the support regions will be merged using morphological
|
||||
closing operation. Gaps smaller than the closing radius will be filled in. (mm,
|
||||
default: 2)
|
||||
--support-material-contact-distance N
|
||||
The vertical distance between object and support material interface. Setting
|
||||
this to 0 will also prevent Slic3r from using bridge flow and speed for the
|
||||
first object layer. (mm, default: 0.2)
|
||||
--support-material-enforce-layers N
|
||||
Generate support material for the specified number of layers counting from
|
||||
bottom, regardless of whether normal support material is enabled or not and
|
||||
regardless of any angle threshold. This is useful for getting more adhesion of
|
||||
objects having a very thin or poor footprint on the build plate. (layers,
|
||||
default: 0)
|
||||
--support-material-interface-contact-loops
|
||||
Cover the top contact layer of the supports with loops. Disabled by default.
|
||||
--support-material-interface-layers N
|
||||
Number of interface layers to insert between the object(s) and support material.
|
||||
(layers, default: 3)
|
||||
--support-material-interface-pattern
|
||||
Pattern used to generate support material interface. Default pattern for
|
||||
non-soluble support interface is Rectilinear, while default pattern for soluble
|
||||
support interface is Concentric. (auto, rectilinear, concentric; default:
|
||||
rectilinear)
|
||||
--support-material-interface-spacing N
|
||||
Spacing between interface lines. Set zero to get a solid interface. (mm,
|
||||
default: 0)
|
||||
--support-material-interface-speed N
|
||||
Speed for printing support material interface layers. If expressed as percentage
|
||||
(for example 50%) it will be calculated over support material speed. (mm/s or %,
|
||||
default: 100%)
|
||||
--support-material-pattern
|
||||
Pattern used to generate support material. (rectilinear, rectilinear-grid,
|
||||
honeycomb; default: rectilinear)
|
||||
--support-material-spacing N
|
||||
Spacing between support material lines. (mm, default: 2.5)
|
||||
--support-material-speed N
|
||||
Speed for printing support material. (mm/s, default: 60)
|
||||
--support-material-style
|
||||
Style and shape of the support towers. Projecting the supports into a regular
|
||||
grid will create more stable supports, while snug support towers will save
|
||||
material and reduce object scarring. (grid, snug; default: grid)
|
||||
--support-material-synchronize-layers
|
||||
Synchronize support layers with the object print layers. This is useful with
|
||||
multi-material printers, where the extruder switch is expensive.
|
||||
--support-material-threshold N
|
||||
Support material will not be generated for overhangs whose slope angle (90° =
|
||||
vertical) is above the given threshold. In other words, this value represent the
|
||||
most horizontal slope (measured from the horizontal plane) that you can print
|
||||
without support material. Set to zero for automatic detection (recommended).
|
||||
(°, default: 0)
|
||||
--support-material-with-sheath
|
||||
Add a sheath (a single perimeter line) around the base support. This makes the
|
||||
support more reliable, but also more difficult to remove.
|
||||
--support-material-xy-spacing N
|
||||
XY separation between an object and its support. If expressed as percentage (for
|
||||
example 50%), it will be calculated over external perimeter width. (mm or %,
|
||||
default: 50%)
|
||||
Wipe options:
|
||||
--wipe-into-infill Purging after toolchange will be done inside this object's infills. This lowers
|
||||
the amount of waste but may result in longer print time due to additional travel
|
||||
moves.
|
||||
--wipe-into-objects Object will be used to purge the nozzle after a toolchange to save material that
|
||||
would otherwise end up in the wipe tower and decrease print time. Colours of the
|
||||
objects will be mixed as a result.
|
||||
905
pru-cli.md
@@ -1,905 +0,0 @@
|
||||
--avoid-crossing-perimeters
|
||||
Optimize travel moves in order to minimize the crossing of perimeters. This is
|
||||
mostly useful with Bowden extruders which suffer from oozing. This feature slows
|
||||
down both the print and the G-code generation.
|
||||
--bed-custom-model ABCD
|
||||
|
||||
--bed-custom-texture ABCD
|
||||
|
||||
--bed-shape (default: 0x0,200x0,200x200,0x200)
|
||||
--bed-temperature N Bed temperature for layers after the first one. Set this to zero to disable bed
|
||||
temperature control commands in the output. (°C, default: 0)
|
||||
--before-layer-gcode ABCD
|
||||
This custom code is inserted at every layer change, right before the Z move.
|
||||
Note that you can use placeholder variables for all Slic3r settings as well as
|
||||
[layer_num] and [layer_z].
|
||||
--between-objects-gcode ABCD
|
||||
This code is inserted between objects when using sequential printing. By default
|
||||
extruder and bed temperature are reset using non-wait command; however if M104,
|
||||
M109, M140 or M190 are detected in this custom code, Slic3r will not add
|
||||
temperature commands. Note that you can use placeholder variables for all Slic3r
|
||||
settings, so you can put a "M109 S[first_layer_temperature]" command wherever
|
||||
you want.
|
||||
--bridge-acceleration N
|
||||
This is the acceleration your printer will use for bridges. Set zero to disable
|
||||
acceleration control for bridges. (mm/s², default: 0)
|
||||
--bridge-fan-speed N
|
||||
This fan speed is enforced during all bridges and overhangs. (%, default: 100)
|
||||
--clip-multipart-objects
|
||||
When printing multi-material objects, this settings will make Slic3r to clip the
|
||||
overlapping object parts one by the other (2nd part will be clipped by the 1st,
|
||||
3rd part will be clipped by the 1st and 2nd etc).
|
||||
--color-change-gcode ABCD
|
||||
This G-code will be used as a code for the color change (default: M600)
|
||||
--colorprint-heights N
|
||||
Heights at which a filament change is to occur. (default: )
|
||||
--complete-objects When printing multiple objects or copies, this feature will complete each object
|
||||
before moving onto next one (and starting it from its bottom layer). This
|
||||
feature is useful to avoid the risk of ruined prints. Slic3r should warn and
|
||||
prevent you from extruder collisions, but beware.
|
||||
--cooling This flag enables the automatic cooling logic that adjusts print speed and fan
|
||||
speed according to layer printing time. (default: 1)
|
||||
--cooling-tube-length N
|
||||
Length of the cooling tube to limit space for cooling moves inside it. (mm,
|
||||
default: 5)
|
||||
--cooling-tube-retraction N
|
||||
Distance of the center-point of the cooling tube from the extruder tip. (mm,
|
||||
default: 91.5)
|
||||
--default-acceleration N
|
||||
This is the acceleration your printer will be reset to after the role-specific
|
||||
acceleration values are used (perimeter/infill). Set zero to prevent resetting
|
||||
acceleration at all. (mm/s², default: 0)
|
||||
--deretract-speed N The speed for loading of a filament into extruder after retraction (it only
|
||||
applies to the extruder motor). If left to zero, the retraction speed is used.
|
||||
(mm/s, default: 0)
|
||||
--disable-fan-first-layers N
|
||||
You can set this to a positive value to disable fan at all during the first
|
||||
layers, so that it does not make adhesion worse. (layers, default: 3)
|
||||
--draft-shield With draft shield active, the skirt will be printed skirt_distance from the
|
||||
object, possibly intersecting brim. Enabled = skirt is as tall as the highest
|
||||
printed object. Limited = skirt is as tall as specified by skirt_height. This is
|
||||
useful to protect an ABS or ASA print from warping and detaching from print bed
|
||||
due to wind draft. (disabled, limited, enabled; default: disabled)
|
||||
--duplicate-distance N
|
||||
Distance used for the auto-arrange feature of the plater. (mm, default: 6)
|
||||
--end-filament-gcode ABCD
|
||||
This end procedure is inserted at the end of the output file, before the printer
|
||||
end gcode (and before any toolchange from this filament in case of multimaterial
|
||||
printers). Note that you can use placeholder variables for all PrusaSlicer
|
||||
settings. If you have multiple extruders, the gcode is processed in extruder
|
||||
order. (default: "; Filament-specific end gcode \n;END gcode for filament\n")
|
||||
--end-gcode ABCD This end procedure is inserted at the end of the output file. Note that you can
|
||||
use placeholder variables for all PrusaSlicer settings. (default: M104 S0 ; turn
|
||||
off temperature\nG28 X0 ; home X axis\nM84 ; disable motors\n)
|
||||
--extra-loading-move N
|
||||
When set to zero, the distance the filament is moved from parking position
|
||||
during load is exactly the same as it was moved back during unload. When
|
||||
positive, it is loaded further, if negative, the loading move is shorter than
|
||||
unloading. (mm, default: -2)
|
||||
--extruder-clearance-height N
|
||||
Set this to the vertical distance between your nozzle tip and (usually) the X
|
||||
carriage rods. In other words, this is the height of the clearance cylinder
|
||||
around your extruder, and it represents the maximum depth the extruder can peek
|
||||
before colliding with other printed objects. (mm, default: 20)
|
||||
--extruder-clearance-radius N
|
||||
Set this to the clearance radius around your extruder. If the extruder is not
|
||||
centered, choose the largest value for safety. This setting is used to check for
|
||||
collisions and to display the graphical preview in the plater. (mm, default: 20)
|
||||
--extruder-colour ABCD
|
||||
This is only used in the Slic3r interface as a visual help. (default: "")
|
||||
--extruder-offset If your firmware doesn't handle the extruder displacement you need the G-code to
|
||||
take it into account. This option lets you specify the displacement of each
|
||||
extruder with respect to the first one. It expects positive coordinates (they
|
||||
will be subtracted from the XY coordinate). (mm, default: 0x0)
|
||||
--extrusion-axis ABCD
|
||||
Use this option to set the axis letter associated to your printer's extruder
|
||||
(usually E but some printers use A). (default: E)
|
||||
--extrusion-multiplier N
|
||||
This factor changes the amount of flow proportionally. You may need to tweak
|
||||
this setting to get nice surface finish and correct single wall widths. Usual
|
||||
values are between 0.9 and 1.1. If you think you need to change this more, check
|
||||
filament diameter and your firmware E steps. (default: 1)
|
||||
--fan-always-on If this is enabled, fan will never be disabled and will be kept running at least
|
||||
at its minimum speed. Useful for PLA, harmful for ABS. (default: 0)
|
||||
--fan-below-layer-time N
|
||||
If layer print time is estimated below this number of seconds, fan will be
|
||||
enabled and its speed will be calculated by interpolating the minimum and
|
||||
maximum speeds. (approximate seconds, default: 60)
|
||||
--filament-colour ABCD
|
||||
This is only used in the Slic3r interface as a visual help. (default: #29B2B2)
|
||||
--filament-cooling-final-speed N
|
||||
Cooling moves are gradually accelerating towards this speed. (mm/s, default:
|
||||
3.4)
|
||||
--filament-cooling-initial-speed N
|
||||
Cooling moves are gradually accelerating beginning at this speed. (mm/s,
|
||||
default: 2.2)
|
||||
--filament-cooling-moves N
|
||||
Filament is cooled by being moved back and forth in the cooling tubes. Specify
|
||||
desired number of these moves. (default: 4)
|
||||
--filament-cost N Enter your filament cost per kg here. This is only for statistical information.
|
||||
(money/kg, default: 0)
|
||||
--filament-density N
|
||||
Enter your filament density here. This is only for statistical information. A
|
||||
decent way is to weigh a known length of filament and compute the ratio of the
|
||||
length to volume. Better is to calculate the volume directly through
|
||||
displacement. (g/cm³, default: 0)
|
||||
--filament-deretract-speed N
|
||||
The speed for loading of a filament into extruder after retraction (it only
|
||||
applies to the extruder motor). If left to zero, the retraction speed is used.
|
||||
(mm/s, default: 0)
|
||||
--filament-diameter N
|
||||
Enter your filament diameter here. Good precision is required, so use a caliper
|
||||
and do multiple measurements along the filament, then compute the average. (mm,
|
||||
default: 1.75)
|
||||
--filament-load-time N
|
||||
Time for the printer firmware (or the Multi Material Unit 2.0) to load a new
|
||||
filament during a tool change (when executing the T code). This time is added to
|
||||
the total print time by the G-code time estimator. (s, default: 0)
|
||||
--filament-loading-speed N
|
||||
Speed used for loading the filament on the wipe tower. (mm/s, default: 28)
|
||||
--filament-loading-speed-start N
|
||||
Speed used at the very beginning of loading phase. (mm/s, default: 3)
|
||||
--filament-max-volumetric-speed N
|
||||
Maximum volumetric speed allowed for this filament. Limits the maximum
|
||||
volumetric speed of a print to the minimum of print and filament volumetric
|
||||
speed. Set to zero for no limit. (mm³/s, default: 0)
|
||||
--filament-minimal-purge-on-wipe-tower N
|
||||
After a tool change, the exact position of the newly loaded filament inside the
|
||||
nozzle may not be known, and the filament pressure is likely not yet stable.
|
||||
Before purging the print head into an infill or a sacrificial object, Slic3r
|
||||
will always prime this amount of material into the wipe tower to produce
|
||||
successive infill or sacrificial object extrusions reliably. (mm³, default: 15)
|
||||
--filament-notes ABCD
|
||||
You can put your notes regarding the filament here. (default: "")
|
||||
--filament-ramming-parameters ABCD
|
||||
This string is edited by RammingDialog and contains ramming specific parameters.
|
||||
(default: "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8
|
||||
0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95
|
||||
7.6")
|
||||
--filament-retract-before-travel N
|
||||
Retraction is not triggered when travel moves are shorter than this length. (mm,
|
||||
default: 2)
|
||||
--filament-retract-before-wipe
|
||||
With bowden extruders, it may be wise to do some amount of quick retract before
|
||||
doing the wipe movement. (%, default: 0%)
|
||||
--filament-retract-layer-change
|
||||
This flag enforces a retraction whenever a Z move is done. (default: 0)
|
||||
--filament-retract-length N
|
||||
When retraction is triggered, filament is pulled back by the specified amount
|
||||
(the length is measured on raw filament, before it enters the extruder). (mm
|
||||
(zero to disable), default: 2)
|
||||
--filament-retract-lift N
|
||||
If you set this to a positive value, Z is quickly raised every time a retraction
|
||||
is triggered. When using multiple extruders, only the setting for the first
|
||||
extruder will be considered. (mm, default: 0)
|
||||
--filament-retract-lift-above N
|
||||
If you set this to a positive value, Z lift will only take place above the
|
||||
specified absolute Z. You can tune this setting for skipping lift on the first
|
||||
layers. (mm, default: 0)
|
||||
--filament-retract-lift-below N
|
||||
If you set this to a positive value, Z lift will only take place below the
|
||||
specified absolute Z. You can tune this setting for limiting lift to the first
|
||||
layers. (mm, default: 0)
|
||||
--filament-retract-restart-extra N
|
||||
When the retraction is compensated after the travel move, the extruder will push
|
||||
this additional amount of filament. This setting is rarely needed. (mm, default:
|
||||
0)
|
||||
--filament-retract-speed N
|
||||
The speed for retractions (it only applies to the extruder motor). (mm/s,
|
||||
default: 40)
|
||||
--filament-soluble Soluble material is most likely used for a soluble support. (default: 0)
|
||||
--filament-spool-weight N
|
||||
Enter weight of the empty filament spool. One may weigh a partially consumed
|
||||
filament spool before printing and one may compare the measured weight with the
|
||||
calculated weight of the filament with the spool to find out whether the amount
|
||||
of filament on the spool is sufficient to finish the print. (g, default: 0)
|
||||
--filament-toolchange-delay N
|
||||
Time to wait after the filament is unloaded. May help to get reliable
|
||||
toolchanges with flexible materials that may need more time to shrink to
|
||||
original dimensions. (s, default: 0)
|
||||
--filament-type ABCD
|
||||
The filament material type for use in custom G-codes. (PLA, PET, ABS, ASA, FLEX,
|
||||
HIPS, EDGE, NGEN, PA, NYLON, PVA, PC, PP, PEI, PEEK, PEKK, POM, PSU, PVDF,
|
||||
SCAFF; default: PLA)
|
||||
--filament-unload-time N
|
||||
Time for the printer firmware (or the Multi Material Unit 2.0) to unload a
|
||||
filament during a tool change (when executing the T code). This time is added to
|
||||
the total print time by the G-code time estimator. (s, default: 0)
|
||||
--filament-unloading-speed N
|
||||
Speed used for unloading the filament on the wipe tower (does not affect initial
|
||||
part of unloading just after ramming). (mm/s, default: 90)
|
||||
--filament-unloading-speed-start N
|
||||
Speed used for unloading the tip of the filament immediately after ramming.
|
||||
(mm/s, default: 100)
|
||||
--filament-wipe This flag will move the nozzle while retracting to minimize the possible blob on
|
||||
leaky extruders. (default: 0)
|
||||
--first-layer-acceleration N
|
||||
This is the acceleration your printer will use for first layer. Set zero to
|
||||
disable acceleration control for first layer. (mm/s², default: 0)
|
||||
--first-layer-acceleration-over-raft N
|
||||
This is the acceleration your printer will use for first layer of object above
|
||||
raft interface. Set zero to disable acceleration control for first layer of
|
||||
object above raft interface. (mm/s², default: 0)
|
||||
--first-layer-bed-temperature N
|
||||
Heated build plate temperature for the first layer. Set this to zero to disable
|
||||
bed temperature control commands in the output. (°C, default: 0)
|
||||
--first-layer-speed N
|
||||
If expressed as absolute value in mm/s, this speed will be applied to all the
|
||||
print moves of the first layer, regardless of their type. If expressed as a
|
||||
percentage (for example: 40%) it will scale the default speeds. (mm/s or %,
|
||||
default: 30)
|
||||
--first-layer-speed-over-raft N
|
||||
If expressed as absolute value in mm/s, this speed will be applied to all the
|
||||
print moves of the first object layer above raft interface, regardless of their
|
||||
type. If expressed as a percentage (for example: 40%) it will scale the default
|
||||
speeds. (mm/s or %, default: 30)
|
||||
--first-layer-temperature N
|
||||
Nozzle temperature for the first layer. If you want to control temperature
|
||||
manually during print, set this to zero to disable temperature control commands
|
||||
in the output G-code. (°C, default: 200)
|
||||
--full-fan-speed-layer N
|
||||
Fan speed will be ramped up linearly from zero at layer
|
||||
"disable_fan_first_layers" to maximum at layer "full_fan_speed_layer".
|
||||
"full_fan_speed_layer" will be ignored if lower than "disable_fan_first_layers",
|
||||
in which case the fan will be running at maximum allowed speed at layer
|
||||
"disable_fan_first_layers" + 1. (default: 0)
|
||||
--gcode-comments Enable this to get a commented G-code file, with each line explained by a
|
||||
descriptive text. If you print from SD card, the additional weight of the file
|
||||
could make your firmware slow down.
|
||||
--gcode-flavor Some G/M-code commands, including temperature control and others, are not
|
||||
universal. Set this option to your printer's firmware to get a compatible
|
||||
output. The "No extrusion" flavor prevents PrusaSlicer from exporting any
|
||||
extrusion value at all. (reprap, reprapfirmware, repetier, teacup, makerware,
|
||||
marlin, marlin2, sailfish, mach3, machinekit, smoothie, no-extrusion; default:
|
||||
reprap)
|
||||
--gcode-label-objects
|
||||
Enable this to add comments into the G-Code labeling print moves with what
|
||||
object they belong to, which is useful for the Octoprint CancelObject plugin.
|
||||
This settings is NOT compatible with Single Extruder Multi Material setup and
|
||||
Wipe into Object / Wipe into Infill.
|
||||
--gcode-resolution N
|
||||
Maximum deviation of exported G-code paths from their full resolution
|
||||
counterparts. Very high resolution G-code requires huge amount of RAM to slice
|
||||
and preview, also a 3D printer may stutter not being able to process a high
|
||||
resolution G-code in a timely manner. On the other hand, a low resolution G-code
|
||||
will produce a low poly effect and because the G-code reduction is performed at
|
||||
each layer independently, visible artifacts may be produced. (mm, default:
|
||||
0.0125)
|
||||
--gcode-substitutions ABCD
|
||||
Find / replace patterns in G-code lines and substitute them. (default: )
|
||||
--high-current-on-filament-swap
|
||||
It may be beneficial to increase the extruder motor current during the filament
|
||||
exchange sequence to allow for rapid ramming feed rates and to overcome
|
||||
resistance when loading a filament with an ugly shaped tip.
|
||||
--infill-acceleration N
|
||||
This is the acceleration your printer will use for infill. Set zero to disable
|
||||
acceleration control for infill. (mm/s², default: 0)
|
||||
--infill-first This option will switch the print order of perimeters and infill, making the
|
||||
latter first.
|
||||
--after-layer-gcode ABCD, --layer-gcode ABCD
|
||||
This custom code is inserted at every layer change, right after the Z move and
|
||||
before the extruder moves to the first layer point. Note that you can use
|
||||
placeholder variables for all Slic3r settings as well as [layer_num] and
|
||||
[layer_z].
|
||||
--max-fan-speed N This setting represents the maximum speed of your fan. (%, default: 100)
|
||||
--max-layer-height N
|
||||
This is the highest printable layer height for this extruder, used to cap the
|
||||
variable layer height and support layer height. Maximum recommended layer height
|
||||
is 75% of the extrusion width to achieve reasonable inter-layer adhesion. If set
|
||||
to 0, layer height is limited to 75% of the nozzle diameter. (mm, default: 0)
|
||||
--max-print-height N
|
||||
Set this to the maximum height that can be reached by your extruder while
|
||||
printing. (mm, default: 200)
|
||||
--max-print-speed N When setting other speed settings to 0 Slic3r will autocalculate the optimal
|
||||
speed in order to keep constant extruder pressure. This experimental setting is
|
||||
used to set the highest print speed you want to allow. (mm/s, default: 80)
|
||||
--max-volumetric-extrusion-rate-slope-negative N
|
||||
This experimental setting is used to limit the speed of change in extrusion rate
|
||||
for a transition from higher speed to lower speed. A value of 1.8 mm³/s²
|
||||
ensures, that a change from the extrusion rate of 5.4 mm³/s (0.45 mm extrusion
|
||||
width, 0.2 mm extrusion height, feedrate 60 mm/s) to 1.8 mm³/s (feedrate 20
|
||||
mm/s) will take at least 2 seconds. (mm³/s², default: 0)
|
||||
--max-volumetric-extrusion-rate-slope-positive N
|
||||
This experimental setting is used to limit the speed of change in extrusion rate
|
||||
for a transition from lower speed to higher speed. A value of 1.8 mm³/s²
|
||||
ensures, that a change from the extrusion rate of 1.8 mm³/s (0.45 mm extrusion
|
||||
width, 0.2 mm extrusion height, feedrate 20 mm/s) to 5.4 mm³/s (feedrate 60
|
||||
mm/s) will take at least 2 seconds. (mm³/s², default: 0)
|
||||
--max-volumetric-speed N
|
||||
This experimental setting is used to set the maximum volumetric speed your
|
||||
extruder supports. (mm³/s, default: 0)
|
||||
--min-fan-speed N This setting represents the minimum PWM your fan needs to work. (%, default: 35)
|
||||
--min-layer-height N
|
||||
This is the lowest printable layer height for this extruder and limits the
|
||||
resolution for variable layer height. Typical values are between 0.05 mm and 0.1
|
||||
mm. (mm, default: 0.07)
|
||||
--min-print-speed N Slic3r will not scale speed down below this speed. (mm/s, default: 10)
|
||||
--min-skirt-length N
|
||||
Generate no less than the number of skirt loops required to consume the
|
||||
specified amount of filament on the bottom layer. For multi-extruder machines,
|
||||
this minimum applies to each extruder. (mm, default: 0)
|
||||
--notes ABCD You can put here your personal notes. This text will be added to the G-code
|
||||
header comments.
|
||||
--nozzle-diameter N This is the diameter of your extruder nozzle (for example: 0.5, 0.35 etc.) (mm,
|
||||
default: 0.4)
|
||||
--only-retract-when-crossing-perimeters
|
||||
Disables retraction when the travel path does not exceed the upper layer's
|
||||
perimeters (and thus any ooze will be probably invisible).
|
||||
--ooze-prevention This option will drop the temperature of the inactive extruders to prevent
|
||||
oozing. It will enable a tall skirt automatically and move extruders outside
|
||||
such skirt when changing temperatures.
|
||||
--output-filename-format ABCD
|
||||
You can use all configuration options as variables inside this template. For
|
||||
example: [layer_height], [fill_density] etc. You can also use [timestamp],
|
||||
[year], [month], [day], [hour], [minute], [second], [version], [input_filename],
|
||||
[input_filename_base]. (default: [input_filename_base].gcode)
|
||||
--parking-pos-retraction N
|
||||
Distance of the extruder tip from the position where the filament is parked when
|
||||
unloaded. This should match the value in printer firmware. (mm, default: 92)
|
||||
--pause-print-gcode ABCD
|
||||
This G-code will be used as a code for the pause print (default: M601)
|
||||
--perimeter-acceleration N
|
||||
This is the acceleration your printer will use for perimeters. Set zero to
|
||||
disable acceleration control for perimeters. (mm/s², default: 0)
|
||||
--post-process ABCD If you want to process the output G-code through custom scripts, just list their
|
||||
absolute paths here. Separate multiple scripts with a semicolon. Scripts will be
|
||||
passed the absolute path to the G-code file as the first argument, and they can
|
||||
access the Slic3r config settings by reading environment variables. (default: )
|
||||
--preset-name ABCD
|
||||
--preset-names ABCD Names of presets related to the physical printer (default: )
|
||||
--printer-notes ABCD
|
||||
You can put your notes regarding the printer here.
|
||||
--printer-technology
|
||||
Printer technology (FFF, SLA; default: FFF)
|
||||
--remaining-times Emit M73 P[percent printed] R[remaining time in minutes] at 1 minute intervals
|
||||
into the G-code to let the firmware show accurate remaining time. As of now only
|
||||
the Prusa i3 MK3 firmware recognizes M73. Also the i3 MK3 firmware supports M73
|
||||
Qxx Sxx for the silent mode.
|
||||
--resolution N Minimum detail resolution, used to simplify the input file for speeding up the
|
||||
slicing job and reducing memory usage. High-resolution models often carry more
|
||||
detail than printers can render. Set to zero to disable any simplification and
|
||||
use full resolution from input. (mm, default: 0)
|
||||
--retract-before-travel N
|
||||
Retraction is not triggered when travel moves are shorter than this length. (mm,
|
||||
default: 2)
|
||||
--retract-before-wipe
|
||||
With bowden extruders, it may be wise to do some amount of quick retract before
|
||||
doing the wipe movement. (%, default: 0%)
|
||||
--retract-layer-change
|
||||
This flag enforces a retraction whenever a Z move is done. (default: 0)
|
||||
--retract-length N When retraction is triggered, filament is pulled back by the specified amount
|
||||
(the length is measured on raw filament, before it enters the extruder). (mm
|
||||
(zero to disable), default: 2)
|
||||
--retract-length-toolchange N
|
||||
When retraction is triggered before changing tool, filament is pulled back by
|
||||
the specified amount (the length is measured on raw filament, before it enters
|
||||
the extruder). (mm (zero to disable), default: 10)
|
||||
--retract-lift N If you set this to a positive value, Z is quickly raised every time a retraction
|
||||
is triggered. When using multiple extruders, only the setting for the first
|
||||
extruder will be considered. (mm, default: 0)
|
||||
--retract-lift-above N
|
||||
If you set this to a positive value, Z lift will only take place above the
|
||||
specified absolute Z. You can tune this setting for skipping lift on the first
|
||||
layers. (mm, default: 0)
|
||||
--retract-lift-below N
|
||||
If you set this to a positive value, Z lift will only take place below the
|
||||
specified absolute Z. You can tune this setting for limiting lift to the first
|
||||
layers. (mm, default: 0)
|
||||
--retract-restart-extra N
|
||||
When the retraction is compensated after the travel move, the extruder will push
|
||||
this additional amount of filament. This setting is rarely needed. (mm, default:
|
||||
0)
|
||||
--retract-restart-extra-toolchange N
|
||||
When the retraction is compensated after changing tool, the extruder will push
|
||||
this additional amount of filament. (mm, default: 0)
|
||||
--retract-speed N The speed for retractions (it only applies to the extruder motor). (mm/s,
|
||||
default: 40)
|
||||
--silent-mode The firmware supports stealth mode
|
||||
--single-extruder-multi-material
|
||||
The printer multiplexes filaments into a single hot end.
|
||||
--single-extruder-multi-material-priming
|
||||
If enabled, all printing extruders will be primed at the front edge of the print
|
||||
bed at the start of the print.
|
||||
--skirt-distance N Distance between skirt and brim (when draft shield is not used) or objects. (mm,
|
||||
default: 6)
|
||||
--skirt-height N Height of skirt expressed in layers. (layers, default: 1)
|
||||
--skirts N Number of loops for the skirt. If the Minimum Extrusion Length option is set,
|
||||
the number of loops might be greater than the one configured here. Set this to
|
||||
zero to disable skirt completely. (default: 1)
|
||||
--slowdown-below-layer-time N
|
||||
If layer print time is estimated below this number of seconds, print moves speed
|
||||
will be scaled down to extend duration to this value. (approximate seconds,
|
||||
default: 5)
|
||||
--solid-layers N Number of solid layers to generate on top and bottom surfaces.
|
||||
--solid-min-thickness N
|
||||
Minimum thickness of a top / bottom shell
|
||||
--spiral-vase This feature will raise Z gradually while printing a single-walled object in
|
||||
order to remove any visible seam. This option requires a single perimeter, no
|
||||
infill, no top solid layers and no support material. You can still set any
|
||||
number of bottom solid layers as well as skirt/brim loops. It won't work when
|
||||
printing more than one single object.
|
||||
--standby-temperature-delta N
|
||||
Temperature difference to be applied when an extruder is not active. Enables a
|
||||
full-height "sacrificial" skirt on which the nozzles are periodically wiped.
|
||||
(∆°C, default: -5)
|
||||
--start-filament-gcode ABCD
|
||||
This start procedure is inserted at the beginning, after any printer start gcode
|
||||
(and after any toolchange to this filament in case of multi-material printers).
|
||||
This is used to override settings for a specific filament. If PrusaSlicer
|
||||
detects M104, M109, M140 or M190 in your custom codes, such commands will not be
|
||||
prepended automatically so you're free to customize the order of heating
|
||||
commands and other custom actions. Note that you can use placeholder variables
|
||||
for all PrusaSlicer settings, so you can put a "M109 S[first_layer_temperature]"
|
||||
command wherever you want. If you have multiple extruders, the gcode is
|
||||
processed in extruder order. (default: "; Filament gcode\n")
|
||||
--start-gcode ABCD This start procedure is inserted at the beginning, after bed has reached the
|
||||
target temperature and extruder just started heating, and before extruder has
|
||||
finished heating. If PrusaSlicer detects M104 or M190 in your custom codes, such
|
||||
commands will not be prepended automatically so you're free to customize the
|
||||
order of heating commands and other custom actions. Note that you can use
|
||||
placeholder variables for all PrusaSlicer settings, so you can put a "M109
|
||||
S[first_layer_temperature]" command wherever you want. (default: G28 ; home all
|
||||
axes\nG1 Z5 F5000 ; lift nozzle\n)
|
||||
--temperature N Nozzle temperature for layers after the first one. Set this to zero to disable
|
||||
temperature control commands in the output G-code. (°C, default: 200)
|
||||
--template-custom-gcode ABCD
|
||||
This G-code will be used as a custom code
|
||||
--thumbnails Picture sizes to be stored into a .gcode and .sl1 / .sl1s files, in the
|
||||
following format: "XxY, XxY, ..." (default: )
|
||||
--thumbnails-format Format of G-code thumbnails: PNG for best quality, JPG for smallest size, QOI
|
||||
for low memory firmware (PNG, JPG, QOI; default: PNG)
|
||||
--toolchange-gcode ABCD
|
||||
This custom code is inserted before every toolchange. Placeholder variables for
|
||||
all PrusaSlicer settings as well as {toolchange_z}, {previous_extruder} and
|
||||
{next_extruder} can be used. When a tool-changing command which changes to the
|
||||
correct extruder is included (such as T{next_extruder}), PrusaSlicer will emit
|
||||
no other such command. It is therefore possible to script custom behaviour both
|
||||
before and after the toolchange.
|
||||
--travel-speed N Speed for travel moves (jumps between distant extrusion points). (mm/s, default:
|
||||
130)
|
||||
--travel-speed-z N Speed for movements along the Z axis. When set to zero, the value is ignored and
|
||||
regular travel speed is used instead. (mm/s, default: 0)
|
||||
--use-firmware-retraction
|
||||
This experimental setting uses G10 and G11 commands to have the firmware handle
|
||||
the retraction. This is only supported in recent Marlin.
|
||||
--use-relative-e-distances
|
||||
If your firmware requires relative E values, check this, otherwise leave it
|
||||
unchecked. Most firmwares use absolute values.
|
||||
--use-volumetric-e This experimental setting uses outputs the E values in cubic millimeters instead
|
||||
of linear millimeters. If your firmware doesn't already know filament
|
||||
diameter(s), you can put commands like 'M200 D[filament_diameter_0] T0' in your
|
||||
start G-code in order to turn volumetric mode on and use the filament diameter
|
||||
associated to the filament selected in Slic3r. This is only supported in recent
|
||||
Marlin.
|
||||
--variable-layer-height
|
||||
Some printers or printer setups may have difficulties printing with a variable
|
||||
layer height. Enabled by default.
|
||||
--wipe This flag will move the nozzle while retracting to minimize the possible blob on
|
||||
leaky extruders. (default: 0)
|
||||
--wipe-tower Multi material printers may need to prime or purge extruders on tool changes.
|
||||
Extrude the excess material into the wipe tower.
|
||||
--wipe-tower-bridging N
|
||||
Maximal distance between supports on sparse infill sections. (mm, default: 10)
|
||||
--wipe-tower-brim-width N
|
||||
Wipe tower brim width (mm, default: 2)
|
||||
--wipe-tower-no-sparse-layers
|
||||
If enabled, the wipe tower will not be printed on layers with no toolchanges. On
|
||||
layers with a toolchange, extruder will travel downward to print the wipe tower.
|
||||
User is responsible for ensuring there is no collision with the print.
|
||||
--wipe-tower-rotation-angle N
|
||||
Wipe tower rotation angle with respect to x-axis. (°, default: 0)
|
||||
--wipe-tower-width N
|
||||
Width of a wipe tower (mm, default: 60)
|
||||
--wipe-tower-x N X coordinate of the left front corner of a wipe tower (mm, default: 180)
|
||||
--wipe-tower-y N Y coordinate of the left front corner of a wipe tower (mm, default: 140)
|
||||
--wiping-volumes-extruders N
|
||||
This vector saves required volumes to change from/to each tool used on the wipe
|
||||
tower. These values are used to simplify creation of the full purging volumes
|
||||
below. (default: 70,70,70,70,70,70,70,70,70,70)
|
||||
--wiping-volumes-matrix N
|
||||
This matrix describes volumes (in cubic milimetres) required to purge the new
|
||||
filament on the wipe tower for any given pair of tools. (default:
|
||||
0,140,140,140,140,140,0,140,140,140,140,140,0,140,140,140,140,140,0,140,140,140,140,140,0)
|
||||
--z-offset N This value will be added (or subtracted) from all the Z coordinates in the
|
||||
output G-code. It is used to compensate for bad Z endstop position: for example,
|
||||
if your endstop zero actually leaves the nozzle 0.3mm far from the print bed,
|
||||
set this to -0.3 (or fix your endstop). (mm, default: 0)
|
||||
Advanced:
|
||||
--bridge-flow-ratio N
|
||||
This factor affects the amount of plastic for bridging. You can decrease it
|
||||
slightly to pull the extrudates and prevent sagging, although default settings
|
||||
are usually good and you should experiment with cooling (use a fan) before
|
||||
tweaking this. (default: 1)
|
||||
--elefant-foot-compensation N
|
||||
The first layer will be shrunk in the XY plane by the configured value to
|
||||
compensate for the 1st layer squish aka an Elephant Foot effect. (mm, default:
|
||||
0)
|
||||
--infill-anchor N Connect an infill line to an internal perimeter with a short segment of an
|
||||
additional perimeter. If expressed as percentage (example: 15%) it is calculated
|
||||
over infill extrusion width. PrusaSlicer tries to connect two close infill lines
|
||||
to a short perimeter segment. If no such perimeter segment shorter than
|
||||
infill_anchor_max is found, the infill line is connected to a perimeter segment
|
||||
at just one side and the length of the perimeter segment taken is limited to
|
||||
this parameter, but no longer than anchor_length_max. Set this parameter to zero
|
||||
to disable anchoring perimeters connected to a single infill line. (mm or %,
|
||||
default: 600%)
|
||||
--infill-anchor-max N
|
||||
Connect an infill line to an internal perimeter with a short segment of an
|
||||
additional perimeter. If expressed as percentage (example: 15%) it is calculated
|
||||
over infill extrusion width. PrusaSlicer tries to connect two close infill lines
|
||||
to a short perimeter segment. If no such perimeter segment shorter than this
|
||||
parameter is found, the infill line is connected to a perimeter segment at just
|
||||
one side and the length of the perimeter segment taken is limited to
|
||||
infill_anchor, but no longer than this parameter. Set this parameter to zero to
|
||||
disable anchoring. (mm or %, default: 50)
|
||||
--infill-overlap N This setting applies an additional overlap between infill and perimeters for
|
||||
better bonding. Theoretically this shouldn't be needed, but backlash might cause
|
||||
gaps. If expressed as percentage (example: 15%) it is calculated over perimeter
|
||||
extrusion width. (mm or %, default: 25%)
|
||||
--min-bead-width N Width of the perimeter that will replace thin features (according to the Minimum
|
||||
feature size) of the model. If the Minimum perimeter width is thinner than the
|
||||
thickness of the feature, the perimeter will become as thick as the feature
|
||||
itself. If expressed as a percentage (for example 85%), it will be computed
|
||||
based on the nozzle diameter. (mm or %, default: 85%)
|
||||
--min-feature-size N
|
||||
Minimum thickness of thin features. Model features that are thinner than this
|
||||
value will not be printed, while features thicker than the Minimum feature size
|
||||
will be widened to the Minimum perimeter width. If expressed as a percentage
|
||||
(for example 25%), it will be computed based on the nozzle diameter. (mm or %,
|
||||
default: 25%)
|
||||
--mmu-segmented-region-max-width N
|
||||
Maximum width of a segmented region. Zero disables this feature. (mm (zero to
|
||||
disable), default: 0)
|
||||
--slice-closing-radius N
|
||||
Cracks smaller than 2x gap closing radius are being filled during the triangle
|
||||
mesh slicing. The gap closing operation may reduce the final print resolution,
|
||||
therefore it is advisable to keep the value reasonably low. (mm, default: 0.049)
|
||||
--slicing-mode Use "Even-odd" for 3DLabPrint airplane models. Use "Close holes" to close all
|
||||
holes in the model. (regular, even_odd, close_holes; default: regular)
|
||||
--wall-distribution-count N
|
||||
The number of perimeters, counted from the center, over which the variation
|
||||
needs to be spread. Lower values mean that the outer perimeters don't change in
|
||||
width. (default: 1)
|
||||
--wall-transition-angle N
|
||||
When to create transitions between even and odd numbers of perimeters. A wedge
|
||||
shape with an angle greater than this setting will not have transitions and no
|
||||
perimeters will be printed in the center to fill the remaining space. Reducing
|
||||
this setting reduces the number and length of these center perimeters, but may
|
||||
leave gaps or overextrude. (°, default: 10)
|
||||
--wall-transition-filter-deviation N
|
||||
Prevent transitioning back and forth between one extra perimeter and one less.
|
||||
This margin extends the range of extrusion widths which follow to [Minimum
|
||||
perimeter width - margin, 2 * Minimum perimeter width + margin]. Increasing this
|
||||
margin reduces the number of transitions, which reduces the number of extrusion
|
||||
starts/stops and travel time. However, large extrusion width variation can lead
|
||||
to under- or overextrusion problems. If expressed as a percentage (for example
|
||||
25%), it will be computed based on the nozzle diameter. (mm or %, default: 25%)
|
||||
--wall-transition-length N
|
||||
When transitioning between different numbers of perimeters as the part becomes
|
||||
thinner, a certain amount of space is allotted to split or join the perimeter
|
||||
segments. If expressed as a percentage (for example 100%), it will be computed
|
||||
based on the nozzle diameter. (mm or %, default: 100%)
|
||||
--xy-size-compensation N
|
||||
The object will be grown/shrunk in the XY plane by the configured value
|
||||
(negative = inwards, positive = outwards). This might be useful for fine-tuning
|
||||
hole sizes. (mm, default: 0)
|
||||
Extruders:
|
||||
--extruder N The extruder to use (unless more specific extruder settings are specified). This
|
||||
value overrides perimeter and infill extruders, but not the support extruders.
|
||||
--infill-extruder N The extruder to use when printing infill. (default: 1)
|
||||
--perimeter-extruder N
|
||||
The extruder to use when printing perimeters and brim. First extruder is 1.
|
||||
(default: 1)
|
||||
--solid-infill-extruder N
|
||||
The extruder to use when printing solid infill. (default: 1)
|
||||
--support-material-extruder N
|
||||
The extruder to use when printing support material, raft and skirt (1+, 0 to use
|
||||
the current extruder to minimize tool changes). (default: 1)
|
||||
--support-material-interface-extruder N
|
||||
The extruder to use when printing support material interface (1+, 0 to use the
|
||||
current extruder to minimize tool changes). This affects raft too. (default: 1)
|
||||
Extrusion Width:
|
||||
--external-perimeter-extrusion-width N
|
||||
Set this to a non-zero value to set a manual extrusion width for external
|
||||
perimeters. If left zero, default extrusion width will be used if set, otherwise
|
||||
1.125 x nozzle diameter will be used. If expressed as percentage (for example
|
||||
200%), it will be computed over layer height. (mm or %, default: 0)
|
||||
--extrusion-width N Set this to a non-zero value to allow a manual extrusion width. If left to zero,
|
||||
Slic3r derives extrusion widths from the nozzle diameter (see the tooltips for
|
||||
perimeter extrusion width, infill extrusion width etc). If expressed as
|
||||
percentage (for example: 230%), it will be computed over layer height. (mm or %,
|
||||
default: 0)
|
||||
--first-layer-extrusion-width N
|
||||
Set this to a non-zero value to set a manual extrusion width for first layer.
|
||||
You can use this to force fatter extrudates for better adhesion. If expressed as
|
||||
percentage (for example 120%) it will be computed over first layer height. If
|
||||
set to zero, it will use the default extrusion width. (mm or %, default: 200%)
|
||||
--infill-extrusion-width N
|
||||
Set this to a non-zero value to set a manual extrusion width for infill. If left
|
||||
zero, default extrusion width will be used if set, otherwise 1.125 x nozzle
|
||||
diameter will be used. You may want to use fatter extrudates to speed up the
|
||||
infill and make your parts stronger. If expressed as percentage (for example
|
||||
90%) it will be computed over layer height. (mm or %, default: 0)
|
||||
--perimeter-extrusion-width N
|
||||
Set this to a non-zero value to set a manual extrusion width for perimeters. You
|
||||
may want to use thinner extrudates to get more accurate surfaces. If left zero,
|
||||
default extrusion width will be used if set, otherwise 1.125 x nozzle diameter
|
||||
will be used. If expressed as percentage (for example 200%) it will be computed
|
||||
over layer height. (mm or %, default: 0)
|
||||
--solid-infill-extrusion-width N
|
||||
Set this to a non-zero value to set a manual extrusion width for infill for
|
||||
solid surfaces. If left zero, default extrusion width will be used if set,
|
||||
otherwise 1.125 x nozzle diameter will be used. If expressed as percentage (for
|
||||
example 90%) it will be computed over layer height. (mm or %, default: 0)
|
||||
--support-material-extrusion-width N
|
||||
Set this to a non-zero value to set a manual extrusion width for support
|
||||
material. If left zero, default extrusion width will be used if set, otherwise
|
||||
nozzle diameter will be used. If expressed as percentage (for example 90%) it
|
||||
will be computed over layer height. (mm or %, default: 0)
|
||||
--top-infill-extrusion-width N
|
||||
Set this to a non-zero value to set a manual extrusion width for infill for top
|
||||
surfaces. You may want to use thinner extrudates to fill all narrow regions and
|
||||
get a smoother finish. If left zero, default extrusion width will be used if
|
||||
set, otherwise nozzle diameter will be used. If expressed as percentage (for
|
||||
example 90%) it will be computed over layer height. (mm or %, default: 0)
|
||||
Fuzzy Skin:
|
||||
--fuzzy-skin Fuzzy skin type. (none, external, all; default: none)
|
||||
--fuzzy-skin-point-dist N
|
||||
Perimeters will be split into multiple segments by inserting Fuzzy skin points.
|
||||
Lowering the Fuzzy skin point distance will increase the number of randomly
|
||||
offset points on the perimeter wall. (mm, default: 0.8)
|
||||
--fuzzy-skin-thickness N
|
||||
The maximum distance that each skin point can be offset (both ways), measured
|
||||
perpendicular to the perimeter wall. (mm, default: 0.3)
|
||||
Infill:
|
||||
--bottom-fill-pattern, --external-fill-pattern, --solid-fill-pattern
|
||||
Fill pattern for bottom infill. This only affects the bottom external visible
|
||||
layer, and not its adjacent solid shells. (rectilinear, monotonic,
|
||||
alignedrectilinear, concentric, hilbertcurve, archimedeanchords, octagramspiral;
|
||||
default: monotonic)
|
||||
--bridge-angle N Bridging angle override. If left to zero, the bridging angle will be calculated
|
||||
automatically. Otherwise the provided angle will be used for all bridges. Use
|
||||
180° for zero angle. (°, default: 0)
|
||||
--fill-angle N Default base angle for infill orientation. Cross-hatching will be applied to
|
||||
this. Bridges will be infilled using the best direction Slic3r can detect, so
|
||||
this setting does not affect them. (°, default: 45)
|
||||
--fill-density Density of internal infill, expressed in the range 0% - 100%. (%, default: 20%)
|
||||
--fill-pattern Fill pattern for general low-density infill. (rectilinear, alignedrectilinear,
|
||||
grid, triangles, stars, cubic, line, concentric, honeycomb, 3dhoneycomb, gyroid,
|
||||
hilbertcurve, archimedeanchords, octagramspiral, adaptivecubic, supportcubic,
|
||||
lightning; default: stars)
|
||||
--infill-every-layers N
|
||||
This feature allows to combine infill and speed up your print by extruding
|
||||
thicker infill layers while preserving thin perimeters, thus accuracy. (layers,
|
||||
default: 1)
|
||||
--infill-only-where-needed
|
||||
This option will limit infill to the areas actually needed for supporting
|
||||
ceilings (it will act as internal support material). If enabled, slows down the
|
||||
G-code generation due to the multiple checks involved.
|
||||
--solid-infill-below-area N
|
||||
Force solid infill for regions having a smaller area than the specified
|
||||
threshold. (mm², default: 70)
|
||||
--solid-infill-every-layers N
|
||||
This feature allows to force a solid layer every given number of layers. Zero to
|
||||
disable. You can set this to any value (for example 9999); Slic3r will
|
||||
automatically choose the maximum possible number of layers to combine according
|
||||
to nozzle diameter and layer height. (layers, default: 0)
|
||||
--top-fill-pattern, --external-fill-pattern, --solid-fill-pattern
|
||||
Fill pattern for top infill. This only affects the top visible layer, and not
|
||||
its adjacent solid shells. (rectilinear, monotonic, alignedrectilinear,
|
||||
concentric, hilbertcurve, archimedeanchords, octagramspiral; default: monotonic)
|
||||
Ironing:
|
||||
--ironing Enable ironing of the top layers with the hot print head for smooth surface
|
||||
--ironing-flowrate Percent of a flow rate relative to object's normal layer height. (%, default:
|
||||
15%)
|
||||
--ironing-spacing N Distance between ironing lines (mm, default: 0.1)
|
||||
--ironing-type Ironing Type (top, topmost, solid; default: top)
|
||||
Layers and Perimeters:
|
||||
--avoid-crossing-perimeters-max-detour N
|
||||
The maximum detour length for avoid crossing perimeters. If the detour is longer
|
||||
than this value, avoid crossing perimeters is not applied for this travel path.
|
||||
Detour length could be specified either as an absolute value or as percentage
|
||||
(for example 50%) of a direct travel path. (mm or % (zero to disable), default:
|
||||
0)
|
||||
--bottom-solid-layers N
|
||||
Number of solid layers to generate on bottom surfaces. (default: 3)
|
||||
--bottom-solid-min-thickness N
|
||||
The number of bottom solid layers is increased above bottom_solid_layers if
|
||||
necessary to satisfy minimum thickness of bottom shell. (mm, default: 0)
|
||||
--ensure-vertical-shell-thickness
|
||||
Add solid infill near sloping surfaces to guarantee the vertical shell thickness
|
||||
(top+bottom solid layers).
|
||||
--external-perimeters-first
|
||||
Print contour perimeters from the outermost one to the innermost one instead of
|
||||
the default inverse order.
|
||||
--extra-perimeters Add more perimeters when needed for avoiding gaps in sloping walls. Slic3r keeps
|
||||
adding perimeters, until more than 70% of the loop immediately above is
|
||||
supported.
|
||||
--first-layer-height N
|
||||
When printing with very low layer heights, you might still want to print a
|
||||
thicker bottom layer to improve adhesion and tolerance for non perfect build
|
||||
plates. (mm, default: 0.35)
|
||||
--gap-fill-enabled Enables filling of gaps between perimeters and between the inner most perimeters
|
||||
and infill.
|
||||
--interface-shells Force the generation of solid shells between adjacent materials/volumes. Useful
|
||||
for multi-extruder prints with translucent materials or manual soluble support
|
||||
material.
|
||||
--layer-height N This setting controls the height (and thus the total number) of the
|
||||
slices/layers. Thinner layers give better accuracy but take more time to print.
|
||||
(mm, default: 0.3)
|
||||
--overhangs Experimental option to adjust flow for overhangs (bridge flow will be used), to
|
||||
apply bridge speed to them and enable fan.
|
||||
--perimeter-generator
|
||||
Classic perimeter generator produces perimeters with constant extrusion width
|
||||
and for very thin areas is used gap-fill. Arachne engine produces perimeters
|
||||
with variable extrusion width. This setting also affects the Concentric infill.
|
||||
(classic, arachne; default: arachne)
|
||||
--perimeters N This option sets the number of perimeters to generate for each layer. Note that
|
||||
Slic3r may increase this number automatically when it detects sloping surfaces
|
||||
which benefit from a higher number of perimeters if the Extra Perimeters option
|
||||
is enabled. ((minimum), default: 3)
|
||||
--seam-position Position of perimeters starting points. (random, nearest, aligned, rear;
|
||||
default: aligned)
|
||||
--thick-bridges If enabled, bridges are more reliable, can bridge longer distances, but may look
|
||||
worse. If disabled, bridges look better but are reliable just for shorter
|
||||
bridged distances.
|
||||
--thin-walls Detect single-width walls (parts where two extrusions don't fit and we need to
|
||||
collapse them into a single trace).
|
||||
--top-solid-layers N
|
||||
Number of solid layers to generate on top surfaces. (default: 3)
|
||||
--top-solid-min-thickness N
|
||||
The number of top solid layers is increased above top_solid_layers if necessary
|
||||
to satisfy minimum thickness of top shell. This is useful to prevent pillowing
|
||||
effect when printing with variable layer height. (mm, default: 0)
|
||||
Machine limits:
|
||||
--machine-limits-usage
|
||||
How to apply the Machine Limits (emit_to_gcode, time_estimate_only, ignore;
|
||||
default: time_estimate_only)
|
||||
--machine-max-acceleration-e N
|
||||
Maximum acceleration of the E axis (mm/s², default: 10000,5000)
|
||||
--machine-max-acceleration-extruding N
|
||||
Maximum acceleration when extruding (M204 P) Marlin (legacy) firmware flavor
|
||||
will use this also as travel acceleration (M204 T). (mm/s², default: 1500,1250)
|
||||
--machine-max-acceleration-retracting N
|
||||
Maximum acceleration when retracting (M204 R) (mm/s², default: 1500,1250)
|
||||
--machine-max-acceleration-travel N
|
||||
Maximum acceleration for travel moves (M204 T) (mm/s², default: 1500,1250)
|
||||
--machine-max-acceleration-x N
|
||||
Maximum acceleration of the X axis (mm/s², default: 9000,1000)
|
||||
--machine-max-acceleration-y N
|
||||
Maximum acceleration of the Y axis (mm/s², default: 9000,1000)
|
||||
--machine-max-acceleration-z N
|
||||
Maximum acceleration of the Z axis (mm/s², default: 500,200)
|
||||
--machine-max-feedrate-e N
|
||||
Maximum feedrate of the E axis (mm/s, default: 120,120)
|
||||
--machine-max-feedrate-x N
|
||||
Maximum feedrate of the X axis (mm/s, default: 500,200)
|
||||
--machine-max-feedrate-y N
|
||||
Maximum feedrate of the Y axis (mm/s, default: 500,200)
|
||||
--machine-max-feedrate-z N
|
||||
Maximum feedrate of the Z axis (mm/s, default: 12,12)
|
||||
--machine-max-jerk-e N
|
||||
Maximum jerk of the E axis (mm/s, default: 2.5,2.5)
|
||||
--machine-max-jerk-x N
|
||||
Maximum jerk of the X axis (mm/s, default: 10,10)
|
||||
--machine-max-jerk-y N
|
||||
Maximum jerk of the Y axis (mm/s, default: 10,10)
|
||||
--machine-max-jerk-z N
|
||||
Maximum jerk of the Z axis (mm/s, default: 0.2,0.4)
|
||||
--machine-min-extruding-rate N
|
||||
Minimum feedrate when extruding (M205 S) (mm/s, default: 0,0)
|
||||
--machine-min-travel-rate N
|
||||
Minimum travel feedrate (M205 T) (mm/s, default: 0,0)
|
||||
Skirt and brim:
|
||||
--brim-separation N Offset of brim from the printed object. The offset is applied after the elephant
|
||||
foot compensation. (mm, default: 0)
|
||||
--brim-type The places where the brim will be printed around each object on the first layer.
|
||||
(no_brim, outer_only, inner_only, outer_and_inner; default: outer_only)
|
||||
--brim-width N The horizontal width of the brim that will be printed around each object on the
|
||||
first layer. When raft is used, no brim is generated (use
|
||||
raft_first_layer_expansion). (mm, default: 0)
|
||||
Speed:
|
||||
--bridge-speed N Speed for printing bridges. (mm/s, default: 60)
|
||||
--external-perimeter-speed N
|
||||
This separate setting will affect the speed of external perimeters (the visible
|
||||
ones). If expressed as percentage (for example: 80%) it will be calculated on
|
||||
the perimeters speed setting above. Set to zero for auto. (mm/s or %, default:
|
||||
50%)
|
||||
--gap-fill-speed N Speed for filling small gaps using short zigzag moves. Keep this reasonably low
|
||||
to avoid too much shaking and resonance issues. Set zero to disable gaps
|
||||
filling. (mm/s, default: 20)
|
||||
--infill-speed N Speed for printing the internal fill. Set to zero for auto. (mm/s, default: 80)
|
||||
--ironing-speed N Ironing (mm/s, default: 15)
|
||||
--perimeter-speed N Speed for perimeters (contours, aka vertical shells). Set to zero for auto.
|
||||
(mm/s, default: 60)
|
||||
--small-perimeter-speed N
|
||||
This separate setting will affect the speed of perimeters having radius <= 6.5mm
|
||||
(usually holes). If expressed as percentage (for example: 80%) it will be
|
||||
calculated on the perimeters speed setting above. Set to zero for auto. (mm/s or
|
||||
%, default: 15)
|
||||
--solid-infill-speed N
|
||||
Speed for printing solid regions (top/bottom/internal horizontal shells). This
|
||||
can be expressed as a percentage (for example: 80%) over the default infill
|
||||
speed above. Set to zero for auto. (mm/s or %, default: 20)
|
||||
--top-solid-infill-speed N
|
||||
Speed for printing top solid layers (it only applies to the uppermost external
|
||||
layers and not to their internal solid layers). You may want to slow down this
|
||||
to get a nicer surface finish. This can be expressed as a percentage (for
|
||||
example: 80%) over the solid infill speed above. Set to zero for auto. (mm/s or
|
||||
%, default: 15)
|
||||
Support material:
|
||||
--dont-support-bridges
|
||||
Experimental option for preventing support material from being generated under
|
||||
bridged areas.
|
||||
--raft-contact-distance N
|
||||
The vertical distance between object and raft. Ignored for soluble interface.
|
||||
(mm, default: 0.1)
|
||||
--raft-expansion N Expansion of the raft in XY plane for better stability. (mm, default: 1.5)
|
||||
--raft-first-layer-density
|
||||
Density of the first raft or support layer. (%, default: 90%)
|
||||
--raft-first-layer-expansion N
|
||||
Expansion of the first raft or support layer to improve adhesion to print bed.
|
||||
(mm, default: 3)
|
||||
--raft-layers N The object will be raised by this number of layers, and support material will be
|
||||
generated under it. (layers, default: 0)
|
||||
--support-material Enable support material generation.
|
||||
--support-material-angle N
|
||||
Use this setting to rotate the support material pattern on the horizontal plane.
|
||||
(°, default: 0)
|
||||
--support-material-auto
|
||||
If checked, supports will be generated automatically based on the overhang
|
||||
threshold value. If unchecked, supports will be generated inside the "Support
|
||||
Enforcer" volumes only.
|
||||
--support-material-bottom-contact-distance N
|
||||
The vertical distance between the object top surface and the support material
|
||||
interface. If set to zero, support_material_contact_distance will be used for
|
||||
both top and bottom contact Z distances. (mm, default: 0)
|
||||
--support-material-bottom-interface-layers N
|
||||
Number of interface layers to insert between the object(s) and support material.
|
||||
Set to -1 to use support_material_interface_layers (layers, default: -1)
|
||||
--support-material-buildplate-only
|
||||
Only create support if it lies on a build plate. Don't create support on a
|
||||
print.
|
||||
--support-material-closing-radius N
|
||||
For snug supports, the support regions will be merged using morphological
|
||||
closing operation. Gaps smaller than the closing radius will be filled in. (mm,
|
||||
default: 2)
|
||||
--support-material-contact-distance N
|
||||
The vertical distance between object and support material interface. Setting
|
||||
this to 0 will also prevent Slic3r from using bridge flow and speed for the
|
||||
first object layer. (mm, default: 0.2)
|
||||
--support-material-enforce-layers N
|
||||
Generate support material for the specified number of layers counting from
|
||||
bottom, regardless of whether normal support material is enabled or not and
|
||||
regardless of any angle threshold. This is useful for getting more adhesion of
|
||||
objects having a very thin or poor footprint on the build plate. (layers,
|
||||
default: 0)
|
||||
--support-material-interface-contact-loops
|
||||
Cover the top contact layer of the supports with loops. Disabled by default.
|
||||
--support-material-interface-layers N
|
||||
Number of interface layers to insert between the object(s) and support material.
|
||||
(layers, default: 3)
|
||||
--support-material-interface-pattern
|
||||
Pattern used to generate support material interface. Default pattern for
|
||||
non-soluble support interface is Rectilinear, while default pattern for soluble
|
||||
support interface is Concentric. (auto, rectilinear, concentric; default:
|
||||
rectilinear)
|
||||
--support-material-interface-spacing N
|
||||
Spacing between interface lines. Set zero to get a solid interface. (mm,
|
||||
default: 0)
|
||||
--support-material-interface-speed N
|
||||
Speed for printing support material interface layers. If expressed as percentage
|
||||
(for example 50%) it will be calculated over support material speed. (mm/s or %,
|
||||
default: 100%)
|
||||
--support-material-pattern
|
||||
Pattern used to generate support material. (rectilinear, rectilinear-grid,
|
||||
honeycomb; default: rectilinear)
|
||||
--support-material-spacing N
|
||||
--support-material-speed N
|
||||
--support-material-style
|
||||
--support-material-synchronize-layers
|
||||
--support-material-threshold N
|
||||
--support-material-with-sheath
|
||||
--support-material-xy-spacing N
|
||||
--wipe-into-infill
|
||||
--wipe-into-objects
|
||||
661
prusaslicer/PrusaSlicer/LICENSE
Normal file
@@ -0,0 +1,661 @@
|
||||
GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
Version 3, 19 November 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU Affero General Public License is a free, copyleft license for
|
||||
software and other kinds of works, specifically designed to ensure
|
||||
cooperation with the community in the case of network server software.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
our General Public Licenses are intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
Developers that use our General Public Licenses protect your rights
|
||||
with two steps: (1) assert copyright on the software, and (2) offer
|
||||
you this License which gives you legal permission to copy, distribute
|
||||
and/or modify the software.
|
||||
|
||||
A secondary benefit of defending all users' freedom is that
|
||||
improvements made in alternate versions of the program, if they
|
||||
receive widespread use, become available for other developers to
|
||||
incorporate. Many developers of free software are heartened and
|
||||
encouraged by the resulting cooperation. However, in the case of
|
||||
software used on network servers, this result may fail to come about.
|
||||
The GNU General Public License permits making a modified version and
|
||||
letting the public access it on a server without ever releasing its
|
||||
source code to the public.
|
||||
|
||||
The GNU Affero General Public License is designed specifically to
|
||||
ensure that, in such cases, the modified source code becomes available
|
||||
to the community. It requires the operator of a network server to
|
||||
provide the source code of the modified version running there to the
|
||||
users of that server. Therefore, public use of a modified version, on
|
||||
a publicly accessible server, gives the public access to the source
|
||||
code of the modified version.
|
||||
|
||||
An older license, called the Affero General Public License and
|
||||
published by Affero, was designed to accomplish similar goals. This is
|
||||
a different license, not a version of the Affero GPL, but Affero has
|
||||
released a new version of the Affero GPL which permits relicensing under
|
||||
this license.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU Affero General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Remote Network Interaction; Use with the GNU General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, if you modify the
|
||||
Program, your modified version must prominently offer all users
|
||||
interacting with it remotely through a computer network (if your version
|
||||
supports such interaction) an opportunity to receive the Corresponding
|
||||
Source of your version by providing access to the Corresponding Source
|
||||
from a network server at no charge, through some standard or customary
|
||||
means of facilitating copying of software. This Corresponding Source
|
||||
shall include the Corresponding Source for any work covered by version 3
|
||||
of the GNU General Public License that is incorporated pursuant to the
|
||||
following paragraph.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the work with which it is combined will remain governed by version
|
||||
3 of the GNU General Public License.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU Affero General Public License from time to time. Such new versions
|
||||
will be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU Affero General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU Affero General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU Affero General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If your software can interact with users remotely through a computer
|
||||
network, you should also make sure that it provides a way for users to
|
||||
get its source. For example, if your program is a web application, its
|
||||
interface could display a "Source" link that leads users to an archive
|
||||
of the code. There are many ways you could offer source, and different
|
||||
solutions will be better for different programs; see section 13 for the
|
||||
specific requirements.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU AGPL, see
|
||||
<http://www.gnu.org/licenses/>.
|
||||
@@ -1,9 +1,25 @@
|
||||
Flask>=3.0.0
|
||||
Flask-SQLAlchemy>=3.1.0
|
||||
Flask-Login>=0.6.0
|
||||
Flask-Babel>=4.0.0
|
||||
huey>=2.5.0
|
||||
Werkzeug>=3.0.0
|
||||
trimesh>=4.0.0
|
||||
requests>=2.31.0
|
||||
httpx>=0.25.0
|
||||
Flask-SQLAlchemy
|
||||
Flask-Login
|
||||
Flask-Babel
|
||||
huey
|
||||
Werkzeug
|
||||
trimesh
|
||||
requests
|
||||
httpx
|
||||
gunicorn>=26.0.0
|
||||
Markdown>=3.3.0
|
||||
|
||||
# Numeric & STL handling
|
||||
numpy>=1.25.0
|
||||
numpy-stl>=3.0.0
|
||||
|
||||
# WebSocket support used by printer routes
|
||||
flask-sock>=0.6.0
|
||||
websockets>=11.0.0
|
||||
|
||||
# Optional / heavy dependencies for STL simplification (may require system libraries)
|
||||
# pymeshlab
|
||||
# open3d
|
||||
# pyfqmr
|
||||
|
||||
|
||||
2
run.py
@@ -23,4 +23,4 @@ def init_admin():
|
||||
|
||||
if __name__ == '__main__':
|
||||
init_admin()
|
||||
app.run(host='0.0.0.0', port=5001, debug=True)
|
||||
app.run(host='0.0.0.0', port=5001, debug=False)
|
||||
|
||||
12
run_huey.sh
Executable file
@@ -0,0 +1,12 @@
|
||||
#!/bin/bash
|
||||
|
||||
# You can change these path by environ
|
||||
# export UPLOAD_FOLDER="$(dirname "$0")/uploads"
|
||||
# export PRINT_CONFIG_FOLDER="$(dirname "$0")/print_config"
|
||||
# export PRUSA_SLICE_BIN="$(dirname "$0")/prusaslicer/PrusaSlicer-2.9.4-aarch64-full.AppImage"
|
||||
|
||||
|
||||
source "$(dirname "$0")/venv/bin/activate"
|
||||
|
||||
# huey_consumer "run_huey.huey" > /dev/null 2>&1
|
||||
huey_consumer "run_huey.huey"
|
||||
14
run_main.sh
Executable file
@@ -0,0 +1,14 @@
|
||||
#!/bin/bash
|
||||
|
||||
# You can change these path by environ
|
||||
# export UPLOAD_FOLDER="$(dirname "$0")/uploads"
|
||||
# export PRINT_CONFIG_FOLDER="$(dirname "$0")/print_config"
|
||||
# export PRUSA_SLICE_BIN="$(dirname "$0")/prusaslicer/PrusaSlicer-2.9.4-aarch64-full.AppImage"
|
||||
|
||||
source "$(dirname "$0")/venv/bin/activate"
|
||||
|
||||
# python "$(dirname "$0")/run.py" > /dev/null 2>&1
|
||||
python "$(dirname "$0")/run.py"
|
||||
|
||||
# python -c "from run import init_admin; init_admin()" # 确保管理员初始化被执行
|
||||
# gunicorn -k gthread --threads 10 -w 4 -b 0.0.0.0:5001 "run:app"
|
||||
432
scripts/all_keys.txt
Normal file
@@ -0,0 +1,432 @@
|
||||
acceleration_limit_mess
|
||||
acceleration_limit_mess_enable
|
||||
accel_to_decel_enable
|
||||
accel_to_decel_factor
|
||||
activate_air_filtration
|
||||
activate_chamber_temp_control
|
||||
adaptive_layer_height
|
||||
additional_cooling_fan_speed
|
||||
after_layer_gcode
|
||||
ai_infill
|
||||
alternate_extra_wall
|
||||
bed_shape
|
||||
bed_type
|
||||
before_layer_gcode
|
||||
bottom_shell_layers
|
||||
bottom_shell_thickness
|
||||
bottom_solid_infill_flow_ratio
|
||||
bottom_surface_pattern
|
||||
bridge_acceleration
|
||||
bridge_angle
|
||||
bridge_density
|
||||
bridge_flow
|
||||
bridge_no_support
|
||||
bridge_speed
|
||||
brim_ears_detection_length
|
||||
brim_ears_max_angle
|
||||
brim_object_gap
|
||||
brim_type
|
||||
brim_width
|
||||
chamber_temperature
|
||||
close_fan_the_first_x_layers
|
||||
compatible_printers_condition
|
||||
complete_print_exhaust_fan_speed
|
||||
cool_cds_fan_start_at_height
|
||||
cooling_tube_length
|
||||
cooling_tube_retraction
|
||||
cool_plate_temp
|
||||
cool_plate_temp_initial_layer
|
||||
cool_special_cds_fan_speed
|
||||
counterbore_hole_bridging
|
||||
customized_plate_temp
|
||||
customized_plate_temp_initial_layer
|
||||
default_acceleration
|
||||
default_filament_colour
|
||||
default_jerk
|
||||
deretract_speed
|
||||
detect_narrow_internal_solid_infill
|
||||
detect_overhang_wall
|
||||
detect_thin_wall
|
||||
dont_filter_internal_bridges
|
||||
draft_shield
|
||||
during_print_exhaust_fan_speed
|
||||
elefant_foot_compensation
|
||||
elefant_foot_compensation_layers
|
||||
enable_arc_fitting
|
||||
enable_overhang_bridge_fan
|
||||
enable_overhang_speed
|
||||
enable_pressure_advance
|
||||
enable_prime_tower
|
||||
enable_special_area_additional_cooling_fan
|
||||
end_gcode
|
||||
enforce_support_layers
|
||||
eng_plate_temp
|
||||
eng_plate_temp_initial_layer
|
||||
ensure_vertical_shell_thickness
|
||||
epoxy_resin_plate_temp
|
||||
epoxy_resin_plate_temp_initial_layer
|
||||
exclude_object
|
||||
extra_loading_move
|
||||
extra_perimeters_on_overhangs
|
||||
extruder_clearance_height_to_lid
|
||||
extruder_clearance_height_to_rod
|
||||
extruder_clearance_radius
|
||||
extruder_colour
|
||||
extruder_offset
|
||||
family
|
||||
fan_cooling_layer_time
|
||||
fan_max_speed
|
||||
fan_min_speed
|
||||
filament_cooling_final_speed
|
||||
filament_cooling_initial_speed
|
||||
filament_cooling_moves
|
||||
filament_cost
|
||||
filament_density
|
||||
filament_deretraction_speed
|
||||
filament_diameter
|
||||
filament_end_gcode
|
||||
filament_flow_ratio
|
||||
filament_is_support
|
||||
filament_loading_speed
|
||||
filament_loading_speed_start
|
||||
filament_load_time
|
||||
filament_max_volumetric_speed
|
||||
filament_minimal_purge_on_wipe_tower
|
||||
filament_multitool_ramming
|
||||
filament_multitool_ramming_flow
|
||||
filament_multitool_ramming_volume
|
||||
filament_notes
|
||||
filament_ramming_parameters
|
||||
filament_retract_before_wipe
|
||||
filament_retraction_length
|
||||
filament_retraction_minimum_travel
|
||||
filament_retraction_speed
|
||||
filament_retract_lift_above
|
||||
filament_retract_lift_below
|
||||
filament_retract_lift_enforce
|
||||
filament_retract_restart_extra
|
||||
filament_retract_when_changing_layer
|
||||
filament_settings_id
|
||||
filament_shrink
|
||||
filament_shrinkage_compensation_z
|
||||
filament_soluble
|
||||
filament_start_gcode
|
||||
filament_toolchange_delay
|
||||
filament_type
|
||||
filament_unloading_speed
|
||||
filament_unloading_speed_start
|
||||
filament_unload_time
|
||||
filament_vendor
|
||||
filament_wipe
|
||||
filament_wipe_distance
|
||||
filament_z_hop
|
||||
filament_z_hop_types
|
||||
filter_out_gap_fill
|
||||
first_layer_bed_temperature
|
||||
flush_into_infill
|
||||
flush_into_objects
|
||||
flush_into_support
|
||||
full_fan_speed_layer
|
||||
fuzzy_skin
|
||||
fuzzy_skin_first_layer
|
||||
fuzzy_skin_point_distance
|
||||
fuzzy_skin_thickness
|
||||
gap_fill_target
|
||||
gap_infill_speed
|
||||
gcode_add_line_number
|
||||
gcode_comments
|
||||
gcode_flavor
|
||||
gcode_label_objects
|
||||
high_current_on_filament_swap
|
||||
hole_to_polyhole
|
||||
hole_to_polyhole_threshold
|
||||
hole_to_polyhole_twisted
|
||||
hot_plate_temp
|
||||
hot_plate_temp_initial_layer
|
||||
idle_temperature
|
||||
independent_support_layer_height
|
||||
infill_anchor
|
||||
infill_anchor_max
|
||||
infill_combination
|
||||
infill_direction
|
||||
infill_jerk
|
||||
infill_wall_overlap
|
||||
initial_layer_acceleration
|
||||
initial_layer_infill_speed
|
||||
initial_layer_jerk
|
||||
initial_layer_line_width
|
||||
initial_layer_min_bead_width
|
||||
initial_layer_print_height
|
||||
initial_layer_speed
|
||||
initial_layer_travel_speed
|
||||
inner_wall_acceleration
|
||||
inner_wall_jerk
|
||||
inner_wall_line_width
|
||||
inner_wall_speed
|
||||
interface_shells
|
||||
internal_bridge_flow
|
||||
internal_bridge_speed
|
||||
internal_solid_infill_acceleration
|
||||
internal_solid_infill_line_width
|
||||
internal_solid_infill_pattern
|
||||
internal_solid_infill_speed
|
||||
ironing_angle
|
||||
ironing_flow
|
||||
ironing_pattern
|
||||
ironing_spacing
|
||||
ironing_speed
|
||||
ironing_support_layer
|
||||
ironing_type
|
||||
is_infill_first
|
||||
layer_height
|
||||
line_width
|
||||
machine_limits_usage
|
||||
machine_max_acceleration_e
|
||||
machine_max_acceleration_extruding
|
||||
machine_max_acceleration_retracting
|
||||
machine_max_acceleration_travel
|
||||
machine_max_acceleration_x
|
||||
machine_max_acceleration_y
|
||||
machine_max_acceleration_z
|
||||
machine_max_jerk_e
|
||||
machine_max_jerk_x
|
||||
machine_max_jerk_y
|
||||
machine_max_jerk_z
|
||||
machine_max_speed_e
|
||||
machine_max_speed_x
|
||||
machine_max_speed_y
|
||||
machine_max_speed_z
|
||||
machine_min_extruding_rate
|
||||
machine_min_travel_rate
|
||||
make_overhang_printable
|
||||
make_overhang_printable_angle
|
||||
make_overhang_printable_hole_size
|
||||
material_flow_dependent_temperature
|
||||
material_flow_temp_graph
|
||||
material_type
|
||||
max_bridge_length
|
||||
max_layer_height
|
||||
max_print_height
|
||||
max_travel_detour_distance
|
||||
max_volumetric_extrusion_rate_slope
|
||||
max_volumetric_extrusion_rate_slope_segment_length
|
||||
min_bead_width
|
||||
min_feature_size
|
||||
minimum_sparse_infill_area
|
||||
minimum_support_area
|
||||
min_layer_height
|
||||
min_length_factor
|
||||
min_width_top_surface
|
||||
mmu_segmented_region_interlocking_depth
|
||||
mmu_segmented_region_max_width
|
||||
nozzle_diameter
|
||||
nozzle_temperature
|
||||
nozzle_temperature_initial_layer
|
||||
nozzle_temperature_range_high
|
||||
nozzle_temperature_range_low
|
||||
only_one_wall_first_layer
|
||||
only_one_wall_top
|
||||
ooze_prevention
|
||||
outer_wall_acceleration
|
||||
outer_wall_jerk
|
||||
outer_wall_line_width
|
||||
outer_wall_speed
|
||||
overhang_1_4_speed
|
||||
overhang_2_4_speed
|
||||
overhang_3_4_speed
|
||||
overhang_4_4_speed
|
||||
overhang_fan_speed
|
||||
overhang_fan_threshold
|
||||
overhang_reverse
|
||||
overhang_reverse_internal_only
|
||||
overhang_reverse_threshold
|
||||
overhang_speed_classic
|
||||
parking_pos_retraction
|
||||
pause_print_gcode
|
||||
precise_outer_wall
|
||||
pressure_advance
|
||||
prime_tower_brim_width
|
||||
prime_tower_enhance_type
|
||||
prime_tower_width
|
||||
prime_volume
|
||||
printer_model
|
||||
printer_technology
|
||||
printer_variant
|
||||
print_flow_ratio
|
||||
print_order
|
||||
print_sequence
|
||||
print_settings_id
|
||||
raft_contact_distance
|
||||
raft_expansion
|
||||
raft_first_layer_density
|
||||
raft_first_layer_expansion
|
||||
raft_layers
|
||||
reduce_crossing_wall
|
||||
reduce_fan_stop_start_freq
|
||||
reduce_infill_retraction
|
||||
required_nozzle_HRC
|
||||
resolution
|
||||
retract_before_travel
|
||||
retract_before_wipe
|
||||
retract_layer_change
|
||||
retract_length
|
||||
retract_length_toolchange
|
||||
retract_lift_above
|
||||
retract_lift_below
|
||||
retract_restart_extra
|
||||
retract_restart_extra_toolchange
|
||||
retract_speed
|
||||
role_based_wipe_speed
|
||||
scarf_angle_threshold
|
||||
scarf_joint_flow_ratio
|
||||
scarf_joint_speed
|
||||
scarf_overhang_threshold
|
||||
seam_gap
|
||||
seam_position
|
||||
seam_slope_conditional
|
||||
seam_slope_entire_loop
|
||||
seam_slope_inner_walls
|
||||
seam_slope_min_length
|
||||
seam_slope_start_height
|
||||
seam_slope_steps
|
||||
seam_slope_type
|
||||
show_name
|
||||
silent_mode
|
||||
single_extruder_multi_material
|
||||
single_extruder_multi_material_priming
|
||||
skirt_distance
|
||||
skirt_height
|
||||
skirt_loops
|
||||
skirt_speed
|
||||
slice_closing_radius
|
||||
slicing_mode
|
||||
slowdown_for_curled_perimeters
|
||||
slow_down_for_layer_cooling
|
||||
slow_down_layers
|
||||
slow_down_layer_time
|
||||
slow_down_min_speed
|
||||
small_area_infill_flow_compensation
|
||||
small_area_infill_flow_compensation_model
|
||||
small_perimeter_speed
|
||||
small_perimeter_threshold
|
||||
solid_infill_filament
|
||||
sparse_infill_acceleration
|
||||
sparse_infill_density
|
||||
sparse_infill_filament
|
||||
sparse_infill_line_width
|
||||
sparse_infill_pattern
|
||||
sparse_infill_speed
|
||||
speed_limit_to_height
|
||||
speed_limit_to_height_enable
|
||||
spiral_mode
|
||||
spiral_mode_max_xy_smoothing
|
||||
spiral_mode_smooth
|
||||
staggered_inner_seams
|
||||
standby_temperature_delta
|
||||
start_filament_gcode
|
||||
start_gcode
|
||||
support_angle
|
||||
support_base_pattern
|
||||
support_base_pattern_spacing
|
||||
support_bottom_interface_spacing
|
||||
support_bottom_z_distance
|
||||
support_critical_regions_only
|
||||
support_expansion
|
||||
support_interface_bottom_layers
|
||||
support_interface_filament
|
||||
support_interface_loop_pattern
|
||||
support_interface_not_for_body
|
||||
support_interface_pattern
|
||||
support_interface_spacing
|
||||
support_interface_speed
|
||||
support_interface_top_layers
|
||||
support_line_width
|
||||
support_material
|
||||
support_material_angle
|
||||
support_material_auto
|
||||
support_material_bottom_interface_layers
|
||||
support_material_extrusion_width
|
||||
support_material_interface_extruder
|
||||
support_material_interface_fan_speed
|
||||
support_material_pattern
|
||||
support_material_spacing
|
||||
support_material_speed
|
||||
support_material_style
|
||||
support_material_threshold
|
||||
support_material_xy_spacing
|
||||
support_object_xy_distance
|
||||
support_on_build_plate_only
|
||||
support_remove_small_overhang
|
||||
support_speed
|
||||
support_threshold_angle
|
||||
support_top_z_distance
|
||||
support_tree_angle
|
||||
support_tree_angle_slow
|
||||
support_tree_branch_diameter
|
||||
support_tree_branch_diameter_angle
|
||||
support_tree_branch_diameter_double_wall
|
||||
support_tree_branch_distance
|
||||
support_tree_tip_diameter
|
||||
support_tree_top_rate
|
||||
support_type
|
||||
support_xy_overrides_z
|
||||
temperature_vitrification
|
||||
textured_plate_temp
|
||||
textured_plate_temp_initial_layer
|
||||
thick_bridges
|
||||
thick_internal_bridges
|
||||
timelapse_type
|
||||
top_shell_layers
|
||||
top_shell_thickness
|
||||
top_solid_infill_flow_ratio
|
||||
top_surface_acceleration
|
||||
top_surface_jerk
|
||||
top_surface_line_width
|
||||
top_surface_pattern
|
||||
top_surface_speed
|
||||
travel_acceleration
|
||||
travel_jerk
|
||||
travel_speed
|
||||
travel_speed_z
|
||||
tree_support_adaptive_layer_height
|
||||
tree_support_angle_slow
|
||||
tree_support_auto_brim
|
||||
tree_support_branch_angle
|
||||
tree_support_branch_angle_organic
|
||||
tree_support_branch_diameter
|
||||
tree_support_branch_diameter_angle
|
||||
tree_support_branch_diameter_double_wall
|
||||
tree_support_branch_diameter_organic
|
||||
tree_support_branch_distance
|
||||
tree_support_branch_distance_organic
|
||||
tree_support_brim_width
|
||||
tree_support_tip_diameter
|
||||
tree_support_top_rate
|
||||
tree_support_wall_count
|
||||
use_firmware_retraction
|
||||
use_relative_e_distances
|
||||
wall_direction
|
||||
wall_distribution_count
|
||||
wall_filament
|
||||
wall_generator
|
||||
wall_infill_order
|
||||
wall_loops
|
||||
wall_sequence
|
||||
wall_transition_angle
|
||||
wall_transition_filter_deviation
|
||||
wall_transition_length
|
||||
wipe
|
||||
wipe_before_external_loop
|
||||
wipe_on_loops
|
||||
wipe_speed
|
||||
wipe_tower_bridging
|
||||
wipe_tower_cone_angle
|
||||
wipe_tower_extra_spacing
|
||||
wipe_tower_no_sparse_layers
|
||||
wipe_tower_rotation_angle
|
||||
wiping_volumes_extruders
|
||||
xy_contour_compensation
|
||||
xy_hole_compensation
|
||||
z_hop
|
||||
z_hop_types
|
||||
z_offset
|
||||
54
scripts/fix_ini_files.py
Normal file
@@ -0,0 +1,54 @@
|
||||
import os
|
||||
import glob
|
||||
import difflib
|
||||
|
||||
# Read valid keys
|
||||
valid_keys = set()
|
||||
with open('valid_keys.txt', 'r') as f:
|
||||
for line in f:
|
||||
valid_keys.add(line.strip())
|
||||
|
||||
def process_file(filepath):
|
||||
with open(filepath, 'r') as f:
|
||||
lines = f.readlines()
|
||||
|
||||
new_lines = []
|
||||
changed = False
|
||||
|
||||
for line in lines:
|
||||
stripped = line.strip()
|
||||
# Skip empty lines, metadata sections, or already commented lines with ;
|
||||
if not stripped or stripped.startswith('[') or stripped.startswith(';'):
|
||||
new_lines.append(line)
|
||||
continue
|
||||
|
||||
if '=' in line:
|
||||
parts = line.split('=', 1)
|
||||
key = parts[0].strip()
|
||||
val = parts[1]
|
||||
|
||||
if key in valid_keys:
|
||||
new_lines.append(line)
|
||||
else:
|
||||
matches = difflib.get_close_matches(key, valid_keys, n=1, cutoff=0.8)
|
||||
if matches:
|
||||
new_key = matches[0]
|
||||
new_lines.append(line.replace(key + ' ', new_key + ' ', 1) if key + ' ' in line else line.replace(key + '=', new_key + '=', 1))
|
||||
print(f"{filepath}: Reacted {key} to {new_key}")
|
||||
changed = True
|
||||
else:
|
||||
new_lines.append(';;;' + line)
|
||||
print(f"{filepath}: Commented {key}")
|
||||
changed = True
|
||||
else:
|
||||
new_lines.append(line)
|
||||
|
||||
if changed:
|
||||
with open(filepath, 'w') as f:
|
||||
f.writelines(new_lines)
|
||||
|
||||
for root, dirs, files in os.walk('print_config/prusa_slicer'):
|
||||
for file in files:
|
||||
if file.endswith('.ini'):
|
||||
process_file(os.path.join(root, file))
|
||||
|
||||
246
scripts/llm_semantic_fix2.py
Normal file
@@ -0,0 +1,246 @@
|
||||
import os
|
||||
|
||||
def load_valid_keys():
|
||||
valid = set()
|
||||
if os.path.exists('valid_keys.txt'):
|
||||
with open('valid_keys.txt', 'r') as f:
|
||||
for line in f:
|
||||
if line.strip():
|
||||
valid.add(line.strip())
|
||||
# 补充一些在 PrusaSlicer ini常见但可能在cli中缺失的原生合法字段
|
||||
valid.update([
|
||||
"start_gcode", "end_gcode", "before_layer_gcode", "temperature",
|
||||
"first_layer_temperature", "bed_temperature", "first_layer_bed_temperature",
|
||||
"printer_model", "family", "z_offset", "printer_technology",
|
||||
"gcode_flavor", "silent_mode", "printer_variant", "max_print_height",
|
||||
"nozzle_diameter", "extruder_colour", "extruder_offset", "use_relative_e_distances",
|
||||
"use_firmware_retraction", "retract_layer_change", "retract_length",
|
||||
"retract_lift", "retract_lift_above", "retract_lift_below", "retract_speed",
|
||||
"deretract_speed", "retract_before_travel", "retract_before_wipe", "wipe",
|
||||
"machine_limits_usage", "machine_max_acceleration_x", "machine_max_acceleration_y",
|
||||
"machine_max_acceleration_z", "machine_max_acceleration_e",
|
||||
"machine_max_speed_x", "machine_max_speed_y", "machine_max_speed_z",
|
||||
"machine_max_speed_e", "machine_max_jerk_x", "machine_max_jerk_y",
|
||||
"machine_max_jerk_z", "machine_max_jerk_e", "machine_min_travel_rate",
|
||||
"default_filament_colour", "filament_type", "filament_diameter",
|
||||
"filament_density", "filament_cost", "fan_always_on", "cooling",
|
||||
"support_material", "support_material_auto", "support_material_style"
|
||||
])
|
||||
return valid
|
||||
|
||||
VALID_KEYS = load_valid_keys()
|
||||
|
||||
# 基于全量 all_keys.txt 逐一梳理的语义映射字典
|
||||
SEMANTIC_MAP = {
|
||||
# 打印层高相关
|
||||
"adaptive_layer_height": "variable_layer_height",
|
||||
"initial_layer_print_height": "first_layer_height",
|
||||
"layer_height": "layer_height",
|
||||
"min_layer_height": "min_layer_height",
|
||||
"max_layer_height": "max_layer_height",
|
||||
"print_sequence": "complete_objects",
|
||||
|
||||
# 线宽相关
|
||||
"line_width": "extrusion_width",
|
||||
"initial_layer_line_width": "first_layer_extrusion_width",
|
||||
"outer_wall_line_width": "external_perimeter_extrusion_width",
|
||||
"inner_wall_line_width": "perimeter_extrusion_width",
|
||||
"top_surface_line_width": "top_infill_extrusion_width",
|
||||
"sparse_infill_line_width": "infill_extrusion_width",
|
||||
"internal_solid_infill_line_width": "solid_infill_extrusion_width",
|
||||
|
||||
# 墙/外壳相关
|
||||
"wall_loops": "perimeters",
|
||||
"top_shell_layers": "top_solid_layers",
|
||||
"bottom_shell_layers": "bottom_solid_layers",
|
||||
"top_shell_thickness": "top_solid_min_thickness",
|
||||
"bottom_shell_thickness": "bottom_solid_min_thickness",
|
||||
"only_one_wall_top": "top_one_perimeter_type",
|
||||
"detect_thin_wall": "thin_walls",
|
||||
# "detect_narrow_internal_solid_infill": "thin_walls",
|
||||
"reduce_crossing_wall": "avoid_crossing_perimeters",
|
||||
|
||||
# 填充相关
|
||||
"sparse_infill_density": "fill_density",
|
||||
"sparse_infill_pattern": "fill_pattern",
|
||||
"infill_direction": "fill_angle",
|
||||
"infill_wall_overlap": "infill_overlap",
|
||||
"infill_combination": "solid_infill_every_layers",
|
||||
"bottom_surface_pattern": "bottom_fill_pattern",
|
||||
"top_surface_pattern": "top_fill_pattern",
|
||||
"gap_fill_target": "gap_fill_enabled",
|
||||
|
||||
# 速度相关
|
||||
"initial_layer_speed": "first_layer_speed",
|
||||
"initial_layer_infill_speed": "first_layer_infill_speed",
|
||||
"outer_wall_speed": "external_perimeter_speed",
|
||||
"inner_wall_speed": "perimeter_speed",
|
||||
"top_surface_speed": "top_solid_infill_speed",
|
||||
"sparse_infill_speed": "infill_speed",
|
||||
"internal_solid_infill_speed": "solid_infill_speed",
|
||||
"gap_infill_speed": "gap_fill_speed",
|
||||
"bridge_speed": "bridge_speed",
|
||||
"travel_speed": "travel_speed",
|
||||
"travel_speed_z": "travel_speed_z",
|
||||
"small_perimeter_speed": "small_perimeter_speed",
|
||||
"support_speed": "support_material_speed",
|
||||
"support_interface_speed": "support_material_interface_speed",
|
||||
|
||||
# 加速度相关
|
||||
"default_acceleration": "default_acceleration",
|
||||
"initial_layer_acceleration": "first_layer_acceleration",
|
||||
"outer_wall_acceleration": "external_perimeter_acceleration",
|
||||
"inner_wall_acceleration": "perimeter_acceleration",
|
||||
"top_surface_acceleration": "top_solid_infill_acceleration",
|
||||
"travel_acceleration": "travel_acceleration",
|
||||
"bridge_acceleration": "bridge_acceleration",
|
||||
|
||||
# 支撑相关
|
||||
"support_angle": "support_material_angle",
|
||||
"support_top_z_distance": "support_material_contact_distance",
|
||||
"support_bottom_z_distance": "support_material_bottom_contact_distance",
|
||||
"support_interface_top_layers": "support_material_interface_layers",
|
||||
"support_interface_bottom_layers": "support_material_bottom_interface_layers",
|
||||
"support_interface_spacing": "support_material_interface_spacing",
|
||||
# "support_remove_small_overhang": "support_material_threshold",
|
||||
"support_interface_pattern": "support_material_interface_pattern",
|
||||
|
||||
# 底座/附着相关
|
||||
"brim_width": "brim_width",
|
||||
"raft_layers": "raft_layers",
|
||||
"raft_contact_distance": "raft_contact_distance",
|
||||
"raft_expansion": "raft_expansion",
|
||||
"raft_first_layer_density": "raft_first_layer_density",
|
||||
"raft_first_layer_expansion": "raft_first_layer_expansion",
|
||||
"skirt_distance": "skirt_distance",
|
||||
"skirt_height": "skirt_height",
|
||||
"skirt_loops": "skirts",
|
||||
"elefant_foot_compensation": "elefant_foot_compensation",
|
||||
|
||||
# 回抽与耗材相关
|
||||
"z_hop": "retract_lift",
|
||||
"retract_length": "retract_length",
|
||||
"retract_speed": "retract_speed",
|
||||
"retract_before_wipe": "retract_before_wipe",
|
||||
"retract_before_travel": "retract_before_travel",
|
||||
"retract_layer_change": "retract_layer_change",
|
||||
"retract_lift_above": "retract_lift_above",
|
||||
"retract_lift_below": "retract_lift_below",
|
||||
"filament_deretraction_speed": "filament_deretract_speed",
|
||||
"filament_retraction_length": "filament_retract_length",
|
||||
"filament_retraction_speed": "filament_retract_speed",
|
||||
"material_type": "filament_type",
|
||||
"nozzle_temperature": "temperature",
|
||||
"nozzle_temperature_initial_layer": "first_layer_temperature",
|
||||
"filament_flow_ratio": "extrusion_multiplier",
|
||||
|
||||
# 其他属性
|
||||
"bridge_flow": "bridge_flow_ratio",
|
||||
# "idle_temperature": "standby_temperature_delta",
|
||||
"enable_arc_fitting": "arc_fitting",
|
||||
"slowdown_for_curled_perimeters": "avoid_crossing_curled_overhangs",
|
||||
"slow_down_layer_time": "slowdown_below_layer_time",
|
||||
"fan_max_speed": "max_fan_speed",
|
||||
"fan_min_speed": "min_fan_speed",
|
||||
"spiral_mode": "spiral_vase",
|
||||
"prime_tower_brim_width": "wipe_tower_brim_width",
|
||||
"prime_tower_width": "wipe_tower_width",
|
||||
|
||||
"bridge_no_support": "dont_support_bridges",
|
||||
"minimum_sparse_infill_area": "solid_infill_below_area",
|
||||
"xy_hole_compensation": "xy_size_compensation",
|
||||
"enable_prime_tower": "wipe_tower",
|
||||
"ironing_flow": "ironing_flowrate",
|
||||
"overhang_1_4_speed": "overhang_speed_0",
|
||||
"overhang_2_4_speed": "overhang_speed_1",
|
||||
"overhang_3_4_speed": "overhang_speed_2",
|
||||
"overhang_4_4_speed": "overhang_speed_3",
|
||||
"enable_overhang_speed": "enable_dynamic_overhang_speeds",
|
||||
"enforce_support_layers": "support_material_enforce_layers",
|
||||
"fuzzy_skin_point_distance": "fuzzy_skin_point_dist",
|
||||
# "initial_layer_min_bead_width": "min_bead_width",
|
||||
# "internal_bridge_flow": "bridge_flow_ratio",
|
||||
# "internal_bridge_speed": "bridge_speed",
|
||||
"internal_solid_infill_acceleration": "solid_infill_acceleration",
|
||||
"internal_solid_infill_pattern": "solid_fill_pattern",
|
||||
"is_infill_first": "infill_first",
|
||||
"seam_gap": "seam_gap_distance",
|
||||
"seam_slope_entire_loop": "scarf_seam_entire_loop",
|
||||
"seam_slope_inner_walls": "scarf_seam_on_inner_perimeters",
|
||||
"seam_slope_min_length": "scarf_seam_length",
|
||||
"seam_slope_start_height": "scarf_seam_start_height",
|
||||
"sparse_infill_acceleration": "infill_acceleration",
|
||||
"internal_solid_infill_acceleration": "solid_infill_acceleration",
|
||||
"wall_generator": "perimeter_generator",
|
||||
# "wipe_tower_rotation_angle": "wipe_tower_cone_angle"
|
||||
}
|
||||
|
||||
def process_file(filepath):
|
||||
with open(filepath, 'r') as f:
|
||||
lines = f.readlines()
|
||||
|
||||
new_lines = []
|
||||
changed = False
|
||||
|
||||
for line in lines:
|
||||
stripped = line.strip()
|
||||
# 忽略空行、段名和已经是原生的配置行
|
||||
if not stripped or stripped.startswith('[') or stripped.startswith(';') or stripped.startswith('show_name'):
|
||||
new_lines.append(line)
|
||||
continue
|
||||
|
||||
if '=' in line:
|
||||
parts = line.split('=', 1)
|
||||
raw_key = parts[0].strip()
|
||||
# 兼容前面可能被加了;;;的key重新解开的情况(以防跑多次)
|
||||
key = raw_key.lstrip(';')
|
||||
val = parts[1].strip()
|
||||
|
||||
# 处理一些特有的布尔值或字符串转义差异
|
||||
if key == "print_sequence" and val == "by layer":
|
||||
val = "0"
|
||||
elif key == "print_sequence" and val == "by object":
|
||||
val = "1"
|
||||
if key == "spiral_mode":
|
||||
val = "1" if val != "0" else "0"
|
||||
if key == "support_type" and "auto" in val:
|
||||
val = "1"
|
||||
|
||||
if val == "zig-zag":
|
||||
val = "zigzag"
|
||||
|
||||
if key == "enable_arc_fitting":
|
||||
if str(val) == "1":
|
||||
val = "emit_center"
|
||||
else:
|
||||
val = "disabled"
|
||||
|
||||
if key == "only_one_wall_top":
|
||||
if str(val) == "1":
|
||||
val = "top"
|
||||
else:
|
||||
val = "none"
|
||||
|
||||
if key in SEMANTIC_MAP:
|
||||
new_key = SEMANTIC_MAP[key]
|
||||
new_lines.append(f"{new_key} = {val}\n")
|
||||
changed = True
|
||||
elif key in VALID_KEYS:
|
||||
# 已经是PrusaSlicer的原生可用属性
|
||||
new_lines.append(f"{key} = {val}\n")
|
||||
else:
|
||||
# 在 all_keys.txt 中但找不到任何对应 PrusaSlicer 语义的属性
|
||||
new_lines.append(f";;;{raw_key} = {val}\n")
|
||||
changed = True
|
||||
else:
|
||||
new_lines.append(line)
|
||||
|
||||
if changed:
|
||||
with open(filepath, 'w') as f:
|
||||
f.writelines(new_lines)
|
||||
|
||||
for root, dirs, files in os.walk('print_config/prusa_slicer'):
|
||||
for file in files:
|
||||
if file.endswith('.ini'):
|
||||
process_file(os.path.join(root, file))
|
||||
print("All keys mapped exhaustively.")
|
||||
417
scripts/valid_keys.txt
Normal file
@@ -0,0 +1,417 @@
|
||||
load
|
||||
material_profile
|
||||
print_profile
|
||||
printer_profile
|
||||
export_3mf
|
||||
export_gcode
|
||||
gcode
|
||||
export_obj
|
||||
export_sla
|
||||
sla
|
||||
export_stl
|
||||
gcodeviewer
|
||||
help
|
||||
help_fff
|
||||
help_sla
|
||||
info
|
||||
query_print_filament_profiles
|
||||
query_printer_models
|
||||
save
|
||||
slice
|
||||
align_xy
|
||||
center
|
||||
cut
|
||||
dont_arrange
|
||||
duplicate
|
||||
duplicate_grid
|
||||
ensure_on_bed
|
||||
no_ensure_on_bed
|
||||
merge
|
||||
rotate
|
||||
rotate_x
|
||||
rotate_y
|
||||
scale
|
||||
scale_to_fit
|
||||
split
|
||||
config_compatibility
|
||||
datadir
|
||||
delete_after_load
|
||||
ignore_nonexistent_config
|
||||
load
|
||||
loglevel
|
||||
opengl_aa
|
||||
output
|
||||
single_instance
|
||||
threads
|
||||
fill_pattern
|
||||
load
|
||||
arc_fitting
|
||||
autoemit_temperature_commands
|
||||
avoid_crossing_curled_overhangs
|
||||
avoid_crossing_perimeters
|
||||
bed_custom_model
|
||||
bed_custom_texture
|
||||
bed_shape
|
||||
bed_temperature
|
||||
before_layer_gcode
|
||||
between_objects_gcode
|
||||
binary_gcode
|
||||
bridge_acceleration
|
||||
bridge_fan_speed
|
||||
chamber_minimal_temperature
|
||||
chamber_temperature
|
||||
color_change_gcode
|
||||
colorprint_heights
|
||||
complete_objects
|
||||
cooling
|
||||
cooling_perimeter_transition_distance
|
||||
cooling_slowdown_logic
|
||||
cooling_tube_length
|
||||
cooling_tube_retraction
|
||||
custom_parameters_filament
|
||||
custom_parameters_print
|
||||
custom_parameters_printer
|
||||
default_acceleration
|
||||
deretract_speed
|
||||
disable_fan_first_layers
|
||||
draft_shield
|
||||
duplicate_distance
|
||||
enable_dynamic_fan_speeds
|
||||
end_filament_gcode
|
||||
end_gcode
|
||||
external_perimeter_acceleration
|
||||
extra_loading_move
|
||||
extruder_clearance_height
|
||||
extruder_clearance_radius
|
||||
extruder_colour
|
||||
extruder_offset
|
||||
extrusion_axis
|
||||
extrusion_multiplier
|
||||
fan_always_on
|
||||
fan_below_layer_time
|
||||
filament_abrasive
|
||||
filament_colour
|
||||
filament_cooling_final_speed
|
||||
filament_cooling_initial_speed
|
||||
filament_cooling_moves
|
||||
filament_cost
|
||||
filament_density
|
||||
filament_deretract_speed
|
||||
filament_diameter
|
||||
filament_infill_max_crossing_speed
|
||||
filament_infill_max_speed
|
||||
filament_load_time
|
||||
filament_loading_speed
|
||||
filament_loading_speed_start
|
||||
filament_max_volumetric_speed
|
||||
filament_minimal_purge_on_wipe_tower
|
||||
filament_multitool_ramming
|
||||
filament_multitool_ramming_flow
|
||||
filament_multitool_ramming_volume
|
||||
filament_notes
|
||||
filament_purge_multiplier
|
||||
filament_ramming_parameters
|
||||
filament_retract_before_travel
|
||||
filament_retract_before_wipe
|
||||
filament_retract_layer_change
|
||||
filament_retract_length
|
||||
filament_retract_length_toolchange
|
||||
filament_retract_lift
|
||||
filament_retract_lift_above
|
||||
filament_retract_lift_below
|
||||
filament_retract_restart_extra
|
||||
filament_retract_restart_extra_toolchange
|
||||
filament_retract_speed
|
||||
filament_seam_gap_distance
|
||||
filament_shrinkage_compensation_xy
|
||||
filament_shrinkage_compensation_z
|
||||
filament_soluble
|
||||
filament_spool_weight
|
||||
filament_stamping_distance
|
||||
filament_stamping_loading_speed
|
||||
filament_toolchange_delay
|
||||
filament_travel_lift_before_obstacle
|
||||
filament_travel_max_lift
|
||||
filament_travel_ramping_lift
|
||||
filament_travel_slope
|
||||
filament_type
|
||||
filament_unload_time
|
||||
filament_unloading_speed
|
||||
filament_unloading_speed_start
|
||||
filament_wipe
|
||||
first_layer_acceleration
|
||||
first_layer_acceleration_over_raft
|
||||
first_layer_bed_temperature
|
||||
first_layer_infill_speed
|
||||
first_layer_speed
|
||||
first_layer_speed_over_raft
|
||||
first_layer_temperature
|
||||
full_fan_speed_layer
|
||||
gcode_comments
|
||||
gcode_flavor
|
||||
gcode_label_objects
|
||||
gcode_resolution
|
||||
gcode_substitutions
|
||||
high_current_on_filament_swap
|
||||
infill_acceleration
|
||||
infill_first
|
||||
after_layer_gcode
|
||||
layer_gcode
|
||||
max_fan_speed
|
||||
max_layer_height
|
||||
max_print_height
|
||||
max_print_speed
|
||||
max_volumetric_extrusion_rate_slope_negative
|
||||
max_volumetric_extrusion_rate_slope_positive
|
||||
max_volumetric_speed
|
||||
min_fan_speed
|
||||
min_layer_height
|
||||
min_print_speed
|
||||
min_skirt_length
|
||||
multimaterial_purging
|
||||
notes
|
||||
nozzle_diameter
|
||||
nozzle_high_flow
|
||||
only_retract_when_crossing_perimeters
|
||||
ooze_prevention
|
||||
output_filename_format
|
||||
overhang_fan_speed_0
|
||||
overhang_fan_speed_1
|
||||
overhang_fan_speed_2
|
||||
overhang_fan_speed_3
|
||||
parking_pos_retraction
|
||||
pause_print_gcode
|
||||
perimeter_acceleration
|
||||
post_process
|
||||
prefer_clockwise_movements
|
||||
preset_name
|
||||
preset_names
|
||||
printer_model
|
||||
printer_notes
|
||||
printer_technology
|
||||
printer_variant
|
||||
remaining_times
|
||||
resolution
|
||||
retract_before_travel
|
||||
retract_before_wipe
|
||||
retract_layer_change
|
||||
retract_length
|
||||
retract_length_toolchange
|
||||
retract_lift
|
||||
retract_lift_above
|
||||
retract_lift_below
|
||||
retract_restart_extra
|
||||
retract_restart_extra_toolchange
|
||||
retract_speed
|
||||
seam_gap_distance
|
||||
silent_mode
|
||||
single_extruder_multi_material
|
||||
single_extruder_multi_material_priming
|
||||
skirt_distance
|
||||
skirt_height
|
||||
skirts
|
||||
slowdown_below_layer_time
|
||||
solid_infill_acceleration
|
||||
solid_layers
|
||||
solid_min_thickness
|
||||
spiral_vase
|
||||
staggered_inner_seams
|
||||
standby_temperature_delta
|
||||
start_filament_gcode
|
||||
start_gcode
|
||||
temperature
|
||||
template_custom_gcode
|
||||
thumbnails
|
||||
thumbnails_format
|
||||
toolchange_gcode
|
||||
top_solid_infill_acceleration
|
||||
travel_acceleration
|
||||
travel_lift_before_obstacle
|
||||
travel_max_lift
|
||||
travel_ramping_lift
|
||||
travel_short_distance_acceleration
|
||||
travel_slope
|
||||
travel_speed
|
||||
travel_speed_z
|
||||
use_firmware_retraction
|
||||
use_relative_e_distances
|
||||
use_volumetric_e
|
||||
variable_layer_height
|
||||
wipe
|
||||
wipe_tower
|
||||
wipe_tower_acceleration
|
||||
wipe_tower_bridging
|
||||
wipe_tower_brim_width
|
||||
wipe_tower_cone_angle
|
||||
wipe_tower_extra_flow
|
||||
wipe_tower_extra_spacing
|
||||
wipe_tower_no_sparse_layers
|
||||
wipe_tower_width
|
||||
wiping_volumes_matrix
|
||||
wiping_volumes_use_custom_matrix
|
||||
z_offset
|
||||
bridge_flow_ratio
|
||||
elefant_foot_compensation
|
||||
infill_anchor
|
||||
infill_anchor_max
|
||||
infill_overlap
|
||||
interlocking_beam
|
||||
interlocking_beam_layer_count
|
||||
interlocking_beam_width
|
||||
interlocking_boundary_avoidance
|
||||
interlocking_depth
|
||||
interlocking_orientation
|
||||
min_bead_width
|
||||
min_feature_size
|
||||
mmu_segmented_region_interlocking_depth
|
||||
mmu_segmented_region_max_width
|
||||
slice_closing_radius
|
||||
slicing_mode
|
||||
wall_distribution_count
|
||||
wall_transition_angle
|
||||
wall_transition_filter_deviation
|
||||
wall_transition_length
|
||||
xy_size_compensation
|
||||
bed_temperature_extruder
|
||||
extruder
|
||||
infill_extruder
|
||||
perimeter_extruder
|
||||
solid_infill_extruder
|
||||
support_material_extruder
|
||||
support_material_interface_extruder
|
||||
wipe_tower_extruder
|
||||
automatic_extrusion_widths
|
||||
external_perimeter_extrusion_width
|
||||
extrusion_width
|
||||
first_layer_extrusion_width
|
||||
infill_extrusion_width
|
||||
perimeter_extrusion_width
|
||||
solid_infill_extrusion_width
|
||||
support_material_extrusion_width
|
||||
top_infill_extrusion_width
|
||||
fuzzy_skin
|
||||
fuzzy_skin_point_dist
|
||||
fuzzy_skin_thickness
|
||||
automatic_infill_combination
|
||||
automatic_infill_combination_max_layer_height
|
||||
bottom_fill_pattern
|
||||
external_fill_pattern
|
||||
solid_fill_pattern
|
||||
bridge_angle
|
||||
fill_angle
|
||||
fill_density
|
||||
fill_pattern
|
||||
infill_every_layers
|
||||
solid_infill_below_area
|
||||
solid_infill_every_layers
|
||||
top_fill_pattern
|
||||
external_fill_pattern
|
||||
solid_fill_pattern
|
||||
ironing
|
||||
ironing_flowrate
|
||||
ironing_spacing
|
||||
ironing_type
|
||||
avoid_crossing_perimeters_max_detour
|
||||
bottom_solid_layers
|
||||
bottom_solid_min_thickness
|
||||
ensure_vertical_shell_thickness
|
||||
external_perimeters_first
|
||||
extra_perimeters
|
||||
extra_perimeters_on_overhangs
|
||||
first_layer_height
|
||||
gap_fill_enabled
|
||||
interface_shells
|
||||
layer_height
|
||||
only_one_perimeter_first_layer
|
||||
overhangs
|
||||
perimeter_generator
|
||||
perimeters
|
||||
scarf_seam_entire_loop
|
||||
scarf_seam_length
|
||||
scarf_seam_max_segment_length
|
||||
scarf_seam_on_inner_perimeters
|
||||
scarf_seam_only_on_smooth
|
||||
scarf_seam_placement
|
||||
scarf_seam_start_height
|
||||
seam_position
|
||||
thick_bridges
|
||||
thin_walls
|
||||
top_one_perimeter_type
|
||||
top_solid_layers
|
||||
top_solid_min_thickness
|
||||
machine_limits_usage
|
||||
machine_max_acceleration_e
|
||||
machine_max_acceleration_extruding
|
||||
machine_max_acceleration_retracting
|
||||
machine_max_acceleration_travel
|
||||
machine_max_acceleration_x
|
||||
machine_max_acceleration_y
|
||||
machine_max_acceleration_z
|
||||
machine_max_feedrate_e
|
||||
machine_max_feedrate_x
|
||||
machine_max_feedrate_y
|
||||
machine_max_feedrate_z
|
||||
machine_max_jerk_e
|
||||
machine_max_jerk_x
|
||||
machine_max_jerk_y
|
||||
machine_max_jerk_z
|
||||
machine_max_junction_deviation
|
||||
machine_min_extruding_rate
|
||||
machine_min_travel_rate
|
||||
brim_separation
|
||||
brim_type
|
||||
brim_width
|
||||
bridge_speed
|
||||
enable_dynamic_overhang_speeds
|
||||
external_perimeter_speed
|
||||
gap_fill_speed
|
||||
infill_speed
|
||||
ironing_speed
|
||||
over_bridge_speed
|
||||
overhang_speed_0
|
||||
overhang_speed_1
|
||||
overhang_speed_2
|
||||
overhang_speed_3
|
||||
perimeter_speed
|
||||
small_perimeter_speed
|
||||
solid_infill_speed
|
||||
top_solid_infill_speed
|
||||
dont_support_bridges
|
||||
raft_contact_distance
|
||||
raft_expansion
|
||||
raft_first_layer_density
|
||||
raft_first_layer_expansion
|
||||
raft_layers
|
||||
support_material
|
||||
support_material_angle
|
||||
support_material_auto
|
||||
support_material_bottom_contact_distance
|
||||
support_material_bottom_interface_layers
|
||||
support_material_buildplate_only
|
||||
support_material_closing_radius
|
||||
support_material_contact_distance
|
||||
support_material_enforce_layers
|
||||
support_material_interface_contact_loops
|
||||
support_material_interface_layers
|
||||
support_material_interface_pattern
|
||||
support_material_interface_spacing
|
||||
support_material_interface_speed
|
||||
support_material_pattern
|
||||
support_material_spacing
|
||||
support_material_speed
|
||||
support_material_style
|
||||
support_material_synchronize_layers
|
||||
support_material_threshold
|
||||
support_material_with_sheath
|
||||
support_material_xy_spacing
|
||||
support_tree_angle
|
||||
support_tree_angle_slow
|
||||
support_tree_branch_diameter
|
||||
support_tree_branch_diameter_angle
|
||||
support_tree_branch_diameter_double_wall
|
||||
support_tree_branch_distance
|
||||
support_tree_tip_diameter
|
||||
support_tree_top_rate
|
||||
wipe_into_infill
|
||||
wipe_into_objects
|
||||
idle_temperature
|
||||