tmp prusa配置文件集

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
2026-04-24 00:47:32 +08:00
parent 0416922a94
commit 22a6493e24
31 changed files with 2255 additions and 168 deletions

View File

@@ -109,7 +109,7 @@
"Admin": "Admin",
"User": "Benutzer",
"WARNING: Are you sure you want to permanently delete this user AND ALL their uploaded files and G-codes?": "WARNUNG: Sind Sie sicher, dass Sie diesen Benutzer UND ALLE seine Dateien löschen wollen?",
"CuraEngine Configurations": "CuraEngine-Konfigurationen",
"SliceEngine Configurations": "Slicing-Engine-Konfigurationen",
"Plater Origin Offset X (mm)": "Druckbett Ursprung Offset X (mm)",
"Adjust the X-axis compilation offset for combined files on the build plate.": "X-Achsen-Offset für kombinierte Dateien anpassen.",
"Plater Origin Offset Y (mm)": "Druckbett Ursprung Offset Y (mm)",

View File

@@ -103,7 +103,7 @@
"Admin": "Admin",
"User": "User",
"WARNING: Are you sure you want to permanently delete this user AND ALL their uploaded files and G-codes?": "WARNING: Are you sure you want to permanently delete this user AND ALL their uploaded files and G-codes?",
"CuraEngine Configurations": "CuraEngine Configurations",
"SliceEngine Configurations": "SliceEngine Configurations",
"Plater Origin Offset X (mm)": "Plater Origin Offset X (mm)",
"Adjust the X-axis compilation offset for combined files on the build plate.": "Adjust the X-axis compilation offset for combined files on the build plate.",
"Plater Origin Offset Y (mm)": "Plater Origin Offset Y (mm)",

View File

@@ -109,7 +109,7 @@
"Admin": "管理员",
"User": "普通用户",
"WARNING: Are you sure you want to permanently delete this user AND ALL their uploaded files and G-codes?": "警告确定要永久删除该用户以及TA上传的所有文件和切片吗",
"CuraEngine Configurations": "CuraEngine 配置",
"SliceEngine Configurations": "切片引擎配置",
"Plater Origin Offset X (mm)": "构建板原点偏移 X (mm)",
"Adjust the X-axis compilation offset for combined files on the build plate.": "调整多文件在构建板合并切片时的X坐标偏移。",
"Plater Origin Offset Y (mm)": "构建板原点偏移 Y (mm)",

View File

@@ -13,6 +13,7 @@ from app.utils.tasks import merge_and_slice_task, slice_stl_task, simplify_stl_t
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
main_bp = Blueprint('main', __name__)
@@ -46,6 +47,8 @@ def settings():
default_support_pattern = request.form.get('default_support_pattern', 'tree')
default_quality = request.form.get('default_quality', 'base_global_standard.inst.cfg')
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()
# update or create config entries
config_items = [
@@ -57,6 +60,8 @@ def settings():
('default_support_pattern', default_support_pattern),
('default_quality', default_quality),
('gcode_upload_folder', gcode_upload_folder),
('slicer_engine', slicer_engine),
('build_plate_model_path', build_plate_model_path),
('default_guest_stl_quota_mb', request.form.get('default_guest_stl_quota_mb', '0')),
('default_guest_gcode_quota_mb', request.form.get('default_guest_gcode_quota_mb', '0')),
('default_user_stl_quota_mb', request.form.get('default_user_stl_quota_mb', '0')),
@@ -75,8 +80,8 @@ def settings():
return redirect(url_for('admin.settings'))
configs = {c.key: c.value for c in SystemConfig.query.all()}
presets = get_quality_presets()
return render_template('admin/settings.html', configs=configs, presets=presets)
engines = get_all_engines()
return render_template('admin/settings.html', configs=configs, engines=engines)
@admin_bp.route('/users')
def users():
@@ -192,18 +197,3 @@ def get_bed_dimensions():
except:
return 200, 200, 200
def get_quality_presets():
try:
path = os.path.join(current_app.root_path, '..', 'print_config', 'quality', 'creality', 'presets')
files = [f for f in os.listdir(path) if f.endswith('.inst.cfg')]
presets = []
for f in files:
# name = f.replace('.inst.cfg', '').replace('base_', '').replace('_', ' ')
name = f.replace('.inst.cfg', '')
presets.append((f, name))
presets.sort(key=lambda x: x[1])
return presets
except:
return []

View File

@@ -338,21 +338,6 @@ def get_bed_dimensions():
except:
return 200, 200, 200
def get_quality_presets():
try:
path = os.path.join(current_app.root_path, '..', 'print_config', 'quality', 'creality', 'presets')
files = [f for f in os.listdir(path) if f.endswith('.inst.cfg')]
presets = []
for f in files:
# name = f.replace('.inst.cfg', '').replace('base_', '').replace('_', ' ')
name = f.replace('.inst.cfg', '')
presets.append((f, name))
presets.sort(key=lambda x: x[1])
return presets
except:
return []
@main_bp.route('/plater')
@login_required
def plater():
@@ -360,7 +345,7 @@ def plater():
quota_exceeded = (quota_mb > 0 and current_size >= quota_mb * 1024 * 1024)
w, h, hd = get_bed_dimensions()
presets = get_quality_presets()
configs = {c.key: c.value for c in SystemConfig.query.all()}
offset_x = float(configs.get('offset_x', '0.0'))
@@ -373,7 +358,7 @@ def plater():
user_files = PrintFile.query.filter_by(user_id=current_user.id, file_type='stl').order_by(PrintFile.created_at.desc()).all()
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, presets=presets, last_quality=default_quality, 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)
return render_template('slice/plater.html', w=w, h=h, hd=hd, last_quality=default_quality, 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)
@main_bp.route('/file/<int:file_id>')
@login_required
@@ -553,3 +538,20 @@ def merge_and_slice():
return jsonify({'success': True, 'message': 'Plater slice queued!'})
@main_bp.route('/api/build_plate_model')
@login_required
def build_plate_model():
conf = SystemConfig.query.filter_by(key='build_plate_model_path').first()
if conf and conf.value and os.path.exists(conf.value):
return send_file(conf.value)
abort(404)
@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()
return jsonify({'presets': presets, 'support_patterns': patterns})

View File

@@ -7,8 +7,7 @@
<div class="card shadow-sm">
<div class="card-body">
<h5>{{ _('CuraEngine Configurations') }}</h5>
<hr>
<h5 class="card-title text-primary border-bottom pb-2 mt-4 mb-3">{{ _('SliceEngine Configurations') }}</h5>
<form id="settingsForm" onsubmit="submitSettings(event)">
<div class="mb-3">
<label for="offset_x" class="form-label">{{ _('Plater Origin Offset X (mm)') }}</label>
@@ -34,8 +33,13 @@
<div class="form-text">{{ _('Absolute path to save locally sliced GCode files (e.g. OctoPrint uploads folder like "/home/pi/.octoprint/uploads"). Leave empty to use system default.') }}</div>
</div>
<h5 class="mt-4">{{ _('Default Plater Settings') }}</h5>
<hr>
<h5 class="card-title text-primary border-bottom pb-2 mt-4 mb-3"><i class="bi bi-grid-3x3 me-2"></i>{{ _('Default Plater Settings') }}</h5>
<div class="mb-3">
<label for="build_plate_model_path" class="form-label">{{ _('Build Plate Model Path (.stl)') }}</label>
<input type="text" class="form-control" name="build_plate_model_path" id="build_plate_model_path" value="{{ configs.get('build_plate_model_path', '') }}">
<div class="form-text">{{ _('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_infill" class="form-label">{{ _('Default Infill Density (%)') }}</label>
@@ -53,29 +57,32 @@
<div class="mb-3">
<label for="default_support_pattern" class="form-label">{{ _('Default Support Type') }}</label>
<select class="form-select" name="default_support_pattern" id="default_support_pattern">
<option value="tree" {% if configs.get('default_support_pattern', 'tree') == 'tree' %}selected{% endif %}>{{ _('Tree') }}</option>
<option value="lines" {% if configs.get('default_support_pattern', 'tree') == 'lines' %}selected{% endif %}>{{ _('Lines') }}</option>
<option value="grid" {% if configs.get('default_support_pattern', 'tree') == 'grid' %}selected{% endif %}>{{ _('Grid') }}</option>
<option value="triangles" {% if configs.get('default_support_pattern', 'tree') == 'triangles' %}selected{% endif %}>{{ _('Triangles') }}</option>
<option value="concentric" {% if configs.get('default_support_pattern', 'tree') == 'concentric' %}selected{% endif %}>{{ _('Concentric') }}</option>
<option value="zigzag" {% if configs.get('default_support_pattern', 'tree') == 'zigzag' %}selected{% endif %}>{{ _('Zig Zag') }}</option>
<option value="cross" {% if configs.get('default_support_pattern', 'tree') == 'cross' %}selected{% endif %}>{{ _('Cross') }}</option>
<option value="gyroid" {% if configs.get('default_support_pattern', 'tree') == 'gyroid' %}selected{% endif %}>{{ _('Gyroid') }}</option>
<option value="honeycomb" {% if configs.get('default_support_pattern', 'tree') == 'honeycomb' %}selected{% endif %}>{{ _('Honeycomb') }}</option>
<option value="octagon" {% if configs.get('default_support_pattern', 'tree') == 'octagon' %}selected{% endif %}>{{ _('Octagon') }}</option>
<select class="form-select" name="default_support_pattern" id="default_support_pattern" data-selected="{{ configs.get('default_support_pattern', 'tree') }}">
<!-- Loaded via JS -->
</select>
</div>
<div class="mb-4">
<label for="default_quality" class="form-label">{{ _('Default Quality Profile') }}</label>
<select class="form-select" name="default_quality" id="default_quality">
{% for key, name in presets %}
<option value="{{ key }}" {% if configs.get('default_quality', 'base_global_standard.inst.cfg') == key %}selected{% endif %}>{{ _(name) }}</option>
{% endfor %}
<select class="form-select" name="default_quality" id="default_quality" data-selected="{{ configs.get('default_quality', 'base_global_standard.inst.cfg') }}">
<!-- Loaded via JS -->
</select>
</div>
<h5 class="card-title text-primary border-bottom pb-2 mt-4 mb-3"><i class="bi bi-cpu me-2"></i>{{ _('Slicing Engine Configurations') }}</h5>
<div class="mb-3">
<label for="slicer_engine" class="form-label">{{ _('Slicing Engine') }}</label>
<select class="form-select" name="slicer_engine" id="slicer_engine">
{% for engine in engines %}
<option value="{{ engine.name }}" {% if configs.get('slicer_engine', 'cura') == engine.name %}selected{% endif %} {% if not engine.is_available %}disabled{% endif %}>
{{ engine.display_name }} {% if not engine.is_available %}({{ _('Not Available') }}){% endif %}
</option>
{% endfor %}
</select>
<div class="form-text mt-2"><i class="bi bi-info-circle me-1"></i>{{ _('Select the engine to be used globally. Ensure the selected engine is installed and accessible on the server.') }}</div>
</div>
<h5 class="card-title text-primary border-bottom pb-2 mt-4 mb-3"><i class="bi bi-hdd-network me-2"></i>{{ _('Default Storage Quotas (MB)') }}</h5>
<div class="row">
@@ -140,5 +147,42 @@ function submitSettings(event) {
btn.innerHTML = originalText;
});
}
document.addEventListener('DOMContentLoaded', function() {
const engineSelect = document.getElementById('slicer_engine');
const qualitySelect = document.getElementById('default_quality');
const patternSelect = document.getElementById('default_support_pattern');
function updateOptions(engine) {
fetch(`/api/engine_options/${engine}`)
.then(res => res.json())
.then(data => {
const selQ = qualitySelect.getAttribute('data-selected');
qualitySelect.innerHTML = '';
data.presets.forEach(p => {
const opt = document.createElement('option');
opt.value = p.id; opt.textContent = p.name;
qualitySelect.appendChild(opt);
});
if(selQ) qualitySelect.value = selQ;
const selP = patternSelect.getAttribute('data-selected');
patternSelect.innerHTML = '';
data.support_patterns.forEach(p => {
const opt = document.createElement('option');
opt.value = p.id; opt.textContent = p.name;
patternSelect.appendChild(opt);
});
if(selP) patternSelect.value = selP;
});
}
engineSelect.addEventListener('change', function() {
updateOptions(this.value);
});
// Initial load
updateOptions(engineSelect.value);
});
</script>
{% endblock %}

View File

@@ -95,18 +95,7 @@
</div>
<div class="mb-2">
<label for="support-pattern" class="form-label text-secondary small mb-1">{{ _('Support Type') }}</label>
<select class="form-select form-select-sm" id="support-pattern" {% if default_support == 'false' %}disabled{% endif %}>
<option value="tree" {% if default_support_pattern == 'tree' %}selected{% endif %}>{{ _('Tree') }}</option>
<option value="lines" {% if default_support_pattern == 'lines' %}selected{% endif %}>{{ _('Lines') }}</option>
<option value="grid" {% if default_support_pattern == 'grid' %}selected{% endif %}>{{ _('Grid') }}</option>
<option value="triangles" {% if default_support_pattern == 'triangles' %}selected{% endif %}>{{ _('Triangles') }}</option>
<option value="concentric" {% if default_support_pattern == 'concentric' %}selected{% endif %}>{{ _('Concentric') }}</option>
<option value="zigzag" {% if default_support_pattern == 'zigzag' %}selected{% endif %}>{{ _('Zig Zag') }}</option>
<option value="cross" {% if default_support_pattern == 'cross' %}selected{% endif %}>{{ _('Cross') }}</option>
<option value="gyroid" {% if default_support_pattern == 'gyroid' %}selected{% endif %}>{{ _('Gyroid') }}</option>
<option value="honeycomb" {% if default_support_pattern == 'honeycomb' %}selected{% endif %}>{{ _('Honeycomb') }}</option>
<option value="octagon" {% if default_support_pattern == 'octagon' %}selected{% endif %}>{{ _('Octagon') }}</option>
</select>
<select class="form-select form-select-sm" id="support-pattern" data-selected="{{ default_support_pattern }}" {% if default_support == 'false' %}disabled{% endif %}></select>
</div>
</div>
</div>
@@ -120,11 +109,7 @@
<div id="collapseQuality" class="collapse" data-bs-parent="#platerSidebarAccordion">
<div class="card-body">
<div class="mb-3">
<select class="form-select bg-light" id="quality">
{% for key, name in presets %}
<option value="{{ key }}" {% if key == last_quality %}selected{% endif %}>{{ _(name) }}</option>
{% endfor %}
</select>
<select class="form-select bg-light" id="quality" data-selected="{{ last_quality }}"></select>
</div>
</div>
</div>
@@ -226,6 +211,18 @@ function initPlater() {
axesHelper.position.set(-bedWidth / 2, -bedDepth / 2, 0.2);
scene.add(axesHelper);
{% if configs.get('build_plate_model_path') %}
const bpLoader = new THREE.STLLoader();
bpLoader.load("{{ url_for('main.build_plate_model') }}", function (geometry) {
const material = new THREE.MeshPhongMaterial({ color: 0x999999, specular: 0x111111, shininess: 200 });
const mesh = new THREE.Mesh(geometry, material);
<!-- mesh.rotation.set(-Math.PI / 2, 0, 0); -->
mesh.rotation.set(0, 0, 0);
mesh.position.set(0, 0, -0.1); // Slightly below the grid
scene.add(mesh);
});
{% endif %}
// Show Bed Box outline
const boxGeo = new THREE.BoxGeometry(bedWidth, bedDepth, bedHeight);
const edges = new THREE.EdgesGeometry(boxGeo);
@@ -671,8 +668,17 @@ function addModelToPlate(btnElement, fileId, url, name, status) {
supportSelect.value = data.settings.support;
supportSelect.dispatchEvent(new Event('change'));
}
if (data.settings.support_pattern) document.getElementById('support-pattern').value = data.settings.support_pattern;
if (data.settings.quality) document.getElementById('quality').value = data.settings.quality;
if (data.settings.support_pattern) {
const sSelect = document.getElementById('support-pattern');
sSelect.setAttribute('data-selected', data.settings.support_pattern);
sSelect.value = data.settings.support_pattern;
}
if (data.settings.quality) {
const qSelect = document.getElementById('quality');
qSelect.setAttribute('data-selected', data.settings.quality);
qSelect.value = data.settings.quality;
}
}
} catch (e) {}
}
@@ -948,4 +954,33 @@ document.addEventListener('DOMContentLoaded', () => {
}
});
</script>
<script>
document.addEventListener('DOMContentLoaded', function() {
const engine = "{{ configs.get('slicer_engine', 'cura') }}";
const qualitySelect = document.getElementById('quality');
const patternSelect = document.getElementById('support-pattern');
fetch(`/api/engine_options/${engine}`)
.then(res => res.json())
.then(data => {
const selQ = qualitySelect.getAttribute('data-selected');
qualitySelect.innerHTML = '';
data.presets.forEach(p => {
const opt = document.createElement('option');
opt.value = p.id; opt.textContent = p.name;
qualitySelect.appendChild(opt);
});
if(selQ) qualitySelect.value = selQ;
const selP = patternSelect.getAttribute('data-selected');
patternSelect.innerHTML = '';
data.support_patterns.forEach(p => {
const opt = document.createElement('option');
opt.value = p.id; opt.textContent = p.name;
patternSelect.appendChild(opt);
});
if(selP) patternSelect.value = selP;
});
});
</script>
{% endblock %}

View File

@@ -1,6 +1,13 @@
from .cura_engine import CuraEngine
from .prusa_slicer_engine import PrusaSlicerEngine
def get_all_engines():
"""Returns a list of instantiated engines."""
return [
CuraEngine(),
PrusaSlicerEngine()
]
def get_slicer_engine(engine_name="cura"):
"""
Factory function to retrieve the requested slicing engine instance.
@@ -14,4 +21,4 @@ def get_slicer_engine(engine_name="cura"):
return PrusaSlicerEngine()
else:
# Default fallback
return CuraEngine()
return CuraEngine()

View File

@@ -8,6 +8,26 @@ from app.utils.conf_parse import ConfParse
class CuraEngine:
def __init__(self):
self.name = "cura"
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
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):
"""
@@ -165,4 +185,31 @@ class CuraEngine:
try:
os.remove(tmp_def_path)
except Exception as e:
app.logger.error(f"Failed to delete temp JSON config {tmp_def_path}: {e}")
app.logger.error(f"Failed to delete temp JSON config {tmp_def_path}: {e}")
def get_quality_presets(self, app):
try:
path = os.path.join(app.root_path, '..', 'print_config', 'cura_engine', 'quality', 'creality', 'presets')
if not os.path.exists(path): return []
files = [f for f in os.listdir(path) if f.endswith('.inst.cfg')]
presets = []
for f in files:
presets.append({'id': f, 'name': f.replace('.inst.cfg', '')})
presets.sort(key=lambda x: x['name'])
return presets
except:
return []
def get_support_patterns(self):
return [
{'id': 'tree', 'name': 'Tree'},
{'id': 'lines', 'name': 'Lines'},
{'id': 'grid', 'name': 'Grid'},
{'id': 'triangles', 'name': 'Triangles'},
{'id': 'concentric', 'name': 'Concentric'},
{'id': 'zigzag', 'name': 'Zig Zag'},
{'id': 'cross', 'name': 'Cross'},
{'id': 'gyroid', 'name': 'Gyroid'},
{'id': 'honeycomb', 'name': 'Honeycomb'},
{'id': 'octagon', 'name': 'Octagon'}
]

View File

@@ -1,9 +1,19 @@
import os
import subprocess
import configparser
class PrusaSlicerEngine:
def __init__(self):
self.name = "prusa_slicer"
self.display_name = "PrusaSlicer"
self.is_available = self._check_available()
def _check_available(self):
try:
result = subprocess.run(["prusa-slicer", "--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):
return False
def slice(self, app, stl_filepath, gcode_filepath, **kwargs):
"""
@@ -55,3 +65,25 @@ class PrusaSlicerEngine:
except Exception as e:
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')]
quality_presets = []
for file in all_files:
with open(os.path.join(app.root_path, '..', 'print_config', 'prusa_slicer', "quality", file), 'r') as f:
config = configparser.ConfigParser()
config.read_file(f)
if 'metadata' in config:
quality_presets.append({
'id': file.replace('.ini', ''),
'name': config['metadata'].get('show_name', file.replace('.ini', '').replace('_', ' '))
})
return quality_presets
def get_support_patterns(self):
return [
{'id': 'rectilinear', 'name': 'Rectilinear'},
{'id': 'grid', 'name': 'Grid'},
{'id': 'organic', 'name': 'Organic (Tree)'},
{'id': 'snug', 'name': 'Snug'}
]

View File

@@ -1,62 +0,0 @@
with open('app/utils/tasks.py', 'r', encoding='utf-8') as f:
text = f.read()
import re
old_block = re.search(r'tmp_def_path = None.*?db\.session\.remove\(\)', text, re.DOTALL)
new_block = """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
conf_engine = SystemConfig.query.filter_by(key='slicer_engine').first()
engine_name = conf_engine.value if conf_engine and conf_engine.value else "cura"
db.session.remove()
slicer = get_slicer_engine(engine_name)
success, err_msg = slicer.slice(
app=app,
stl_filepath=stl_filepath,
gcode_filepath=gcode_filepath,
quality_preset=quality_preset,
infill_density=infill_density,
support_enable=support_enable,
support_pattern=support_pattern
)
# Re-fetch print_file and update status
print_file = PrintFile.query.get(file_id)
if not print_file:
return
if success:
print_file.status = 'sliced'
else:
print_file.status = 'failed'
app.logger.error(f"Slicing Task Failed: {err_msg}")
except Exception as e:
print_file = PrintFile.query.get(file_id)
if print_file:
print_file.status = 'failed'
app.logger.error(f"Subprocess Exception: {e}")
finally:
if delete_stl and os.path.exists(stl_filepath):
try:
os.remove(stl_filepath)
except Exception as e:
app.logger.error(f"Failed to delete temp STL {stl_filepath}: {e}")
db.session.commit()
db.session.remove()"""
if old_block:
res = text.replace(old_block.group(0), new_block)
with open('app/utils/tasks.py', 'w', encoding='utf-8') as f:
f.write(res)
print("Patched successfully")
else:
print("Pattern not found!")

View File

@@ -0,0 +1,94 @@
[metadata]
show_name = CR-PETG
material_type = petg
[settings]
filament_adhesiveness_category = 300
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
filament_cost = 14
filament_density = 1.23
filament_deretraction_speed = nil
filament_diameter = 1.75
filament_max_volumetric_speed = 9
filament_minimal_purge_on_wipe_tower = 15
filament_retraction_minimum_travel = nil
filament_retract_before_wipe = nil
filament_retract_when_changing_layer = nil
filament_retraction_length = nil
filament_z_hop = nil
filament_z_hop_types = nil
filament_retract_restart_extra = 0
filament_retraction_speed = nil
filament_settings_id =
filament_soluble = 0
filament_type = PETG
filament_vendor = Creality
filament_wipe = nil
filament_wipe_distance = nil
bed_type = Cool Plate
nozzle_temperature_initial_layer = 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
activate_air_filtration = 0
activate_chamber_temp_control = 0
additional_cooling_fan_speed = 0
chamber_temperature = 35
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
filament_cooling_final_speed = 3.4
filament_cooling_initial_speed = 2.2
filament_cooling_moves = 4
filament_is_support = 0
filament_load_time = 0
filament_loading_speed = 28
filament_loading_speed_start = 3
filament_multitool_ramming = 0
filament_multitool_ramming_flow = 10
filament_multitool_ramming_volume = 10
filament_notes = ""
filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
filament_retract_lift_above = 0
filament_retract_lift_below = 0
filament_retract_lift_enforce = All Surfaces
filament_shrink = 100%
filament_toolchange_delay = 0
filament_unload_time = 0
filament_unloading_speed = 90
filament_unloading_speed_start = 100
material_flow_dependent_temperature = 0
material_flow_temp_graph = [[3.0,210], [10.0,220], [12.0,230]]
nozzle_temperature_range_high = 270
nozzle_temperature_range_low = 220
pressure_advance = 0.08
required_nozzle_HRC = 0
support_material_interface_fan_speed = -1

View File

@@ -0,0 +1,94 @@
[metadata]
show_name = CR-PLA
material_type = pla
[settings]
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
filament_cost = 25
filament_density = 1.25
filament_deretraction_speed = nil
filament_diameter = 1.75
filament_max_volumetric_speed = 12
filament_minimal_purge_on_wipe_tower = 15
filament_retraction_minimum_travel = nil
filament_retract_before_wipe = nil
filament_retract_when_changing_layer = nil
filament_retraction_length = 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_soluble = 0
filament_type = PLA
filament_vendor = Creality
filament_wipe = nil
filament_wipe_distance = nil
bed_type = Cool Plate
nozzle_temperature_initial_layer = 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
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
chamber_temperature = 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
filament_cooling_final_speed = 3.4
filament_cooling_initial_speed = 2.2
filament_cooling_moves = 4
filament_is_support = 0
filament_load_time = 0
filament_loading_speed = 28
filament_loading_speed_start = 3
filament_multitool_ramming = 0
filament_multitool_ramming_flow = 10
filament_multitool_ramming_volume = 10
filament_notes = ""
filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
filament_retract_lift_above = 0
filament_retract_lift_below = 0
filament_retract_lift_enforce = All Surfaces
filament_shrink = 100%
filament_toolchange_delay = 0
filament_unload_time = 0
filament_unloading_speed = 90
filament_unloading_speed_start = 100
material_flow_dependent_temperature = 0
material_flow_temp_graph = [[2.0,185],[4.0,190],[7.0,200]]
pressure_advance = 0.02
required_nozzle_HRC = 0
support_material_interface_fan_speed = -1

View File

@@ -0,0 +1,94 @@
[metadata]
show_name = Generic PETG
material_type = petg
[settings]
filament_adhesiveness_category = 300
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
filament_cost = 30
filament_density = 1.27
filament_deretraction_speed = nil
filament_diameter = 1.75
filament_max_volumetric_speed = 10
filament_minimal_purge_on_wipe_tower = 15
filament_retraction_minimum_travel = nil
filament_retract_before_wipe = nil
filament_retract_when_changing_layer = nil
filament_retraction_length = 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_soluble = 0
filament_type = PETG
filament_vendor = Creality
filament_wipe = nil
filament_wipe_distance = nil
bed_type = Cool Plate
nozzle_temperature_initial_layer = 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
chamber_temperature = 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
filament_cooling_final_speed = 3.4
filament_cooling_initial_speed = 2.2
filament_cooling_moves = 4
filament_is_support = 0
filament_load_time = 0
filament_loading_speed = 28
filament_loading_speed_start = 3
filament_multitool_ramming = 0
filament_multitool_ramming_flow = 10
filament_multitool_ramming_volume = 10
filament_notes = ""
filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
filament_retract_lift_above = 0
filament_retract_lift_below = 0
filament_retract_lift_enforce = All Surfaces
filament_shrink = 100%
filament_toolchange_delay = 0
filament_unload_time = 0
filament_unloading_speed = 90
filament_unloading_speed_start = 100
material_flow_dependent_temperature = 0
material_flow_temp_graph = [[3.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

View File

@@ -0,0 +1,94 @@
[metadata]
show_name = Generic TPU
material_type = tpu
[settings]
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
filament_cost = 20
filament_density = 1.24
filament_deretraction_speed = nil
filament_diameter = 1.75
filament_max_volumetric_speed = 3
filament_minimal_purge_on_wipe_tower = 15
filament_retraction_minimum_travel = nil
filament_retract_before_wipe = nil
filament_retract_when_changing_layer = nil
filament_retraction_length = 2
filament_z_hop = 0.2
filament_z_hop_types = nil
filament_retract_restart_extra = 0
filament_retraction_speed = nil
filament_settings_id =
filament_soluble = 0
filament_type = TPU
filament_vendor = Generic
filament_wipe = nil
filament_wipe_distance = nil
bed_type = Cool Plate
nozzle_temperature_initial_layer = 200
full_fan_speed_layer = 0
fan_max_speed = 100
fan_min_speed = 100
slow_down_min_speed = 10
slow_down_layer_time = 12
filament_start_gcode = ;filament start gcode\n
nozzle_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
chamber_temperature = 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
filament_cooling_final_speed = 3.4
filament_cooling_initial_speed = 2.2
filament_cooling_moves = 4
filament_is_support = 0
filament_load_time = 0
filament_loading_speed = 28
filament_loading_speed_start = 3
filament_multitool_ramming = 0
filament_multitool_ramming_flow = 10
filament_multitool_ramming_volume = 10
filament_notes = ""
filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
filament_retract_lift_above = 0
filament_retract_lift_below = 0
filament_retract_lift_enforce = All Surfaces
filament_shrink = 100%
filament_toolchange_delay = 0
filament_unload_time = 0
filament_unloading_speed = 90
filament_unloading_speed_start = 100
material_flow_dependent_temperature = 0
material_flow_temp_graph = [[3.5,200],[7.0,240]]
pressure_advance = 0.02
required_nozzle_HRC = 0
support_material_interface_fan_speed = -1

View File

@@ -0,0 +1,96 @@
[metadata]
show_name = Hyper L-W PLA
material_type = pla
[settings]
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
filament_cost = 48.9
filament_density = 1.21
filament_deretraction_speed = 15
filament_diameter = 1.75
filament_max_volumetric_speed = 4
filament_minimal_purge_on_wipe_tower = 15
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_restart_extra = nil
filament_retraction_speed = 15
filament_settings_id =
filament_soluble = 0
filament_type = PLA
filament_vendor = Creality
filament_wipe = nil
filament_wipe_distance = nil
bed_type = Cool Plate
nozzle_temperature_initial_layer = 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
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
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
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
filament_cooling_final_speed = 3.4
filament_cooling_initial_speed = 2.2
filament_cooling_moves = 4
filament_is_support = 0
filament_load_time = 0
filament_loading_speed = 28
filament_loading_speed_start = 3
filament_multitool_ramming = 0
filament_multitool_ramming_flow = 10
filament_multitool_ramming_volume = 10
filament_notes = ""
filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
filament_retract_lift_above = nil
filament_retract_lift_below = nil
filament_retract_lift_enforce = nil
filament_shrink = 100%
filament_shrinkage_compensation_z = 100%
filament_toolchange_delay = 0
filament_unload_time = 0
filament_unloading_speed = 90
filament_unloading_speed_start = 100
material_flow_dependent_temperature = 0
pressure_advance = 0.1
required_nozzle_HRC = 0
support_material_interface_fan_speed = -1

View File

@@ -0,0 +1,97 @@
[metadata]
show_name = Hyper Marble PLA
material_type = pla
[settings]
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
filament_cost = 23.9
filament_density = 1.25
filament_deretraction_speed = 15
filament_diameter = 1.75
filament_max_volumetric_speed = 18
filament_minimal_purge_on_wipe_tower = 15
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_restart_extra = nil
filament_retraction_speed = 15
filament_settings_id =
filament_soluble = 0
filament_type = PLA
filament_vendor = Creality
filament_wipe = nil
filament_wipe_distance = 3
bed_type = Cool Plate
nozzle_temperature_initial_layer = 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
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
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
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
filament_cooling_final_speed = 3.4
filament_cooling_initial_speed = 2.2
filament_cooling_moves = 4
filament_is_support = 0
filament_load_time = 0
filament_loading_speed = 28
filament_loading_speed_start = 3
filament_multitool_ramming = 0
filament_multitool_ramming_flow = 10
filament_multitool_ramming_volume = 10
filament_notes = ""
filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
filament_retract_lift_above = nil
filament_retract_lift_below = nil
filament_retract_lift_enforce = nil
filament_shrink = 100%
filament_shrinkage_compensation_z = 100%
filament_toolchange_delay = 0
filament_unload_time = 0
filament_unloading_speed = 90
filament_unloading_speed_start = 100
material_flow_dependent_temperature = 0
material_flow_temp_graph = [[0.8,200],[1.0,200],[1.2,220]]
pressure_advance = 0.04
required_nozzle_HRC = 0
support_material_interface_fan_speed = -1

View File

@@ -0,0 +1,94 @@
[metadata]
show_name = Hyper PETG
material_type = petg
[settings]
filament_adhesiveness_category = 300
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
filament_cost = 69
filament_density = 1.27
filament_deretraction_speed = nil
filament_diameter = 1.75
filament_max_volumetric_speed = 10
filament_minimal_purge_on_wipe_tower = 15
filament_retraction_minimum_travel = nil
filament_retract_before_wipe = nil
filament_retract_when_changing_layer = nil
filament_retraction_length = 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_soluble = 0
filament_type = PETG
filament_vendor = Creality
filament_wipe = nil
filament_wipe_distance = 2
bed_type = Cool Plate
nozzle_temperature_initial_layer = 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
chamber_temperature = 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
filament_cooling_final_speed = 3.4
filament_cooling_initial_speed = 2.2
filament_cooling_moves = 4
filament_is_support = 0
filament_load_time = 0
filament_loading_speed = 28
filament_loading_speed_start = 3
filament_multitool_ramming = 0
filament_multitool_ramming_flow = 10
filament_multitool_ramming_volume = 10
filament_notes = ""
filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
filament_retract_lift_above = 0
filament_retract_lift_below = 0
filament_retract_lift_enforce = All Surfaces
filament_shrink = 100%
filament_toolchange_delay = 0
filament_unload_time = 0
filament_unloading_speed = 90
filament_unloading_speed_start = 100
material_flow_dependent_temperature = 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

View File

@@ -0,0 +1,94 @@
[metadata]
show_name = Hyper PLA
material_type = pla
[settings]
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
filament_cost = 30
filament_density = 1.24
filament_deretraction_speed = nil
filament_diameter = 1.75
filament_max_volumetric_speed = 23
filament_minimal_purge_on_wipe_tower = 15
filament_retraction_minimum_travel = nil
filament_retract_before_wipe = nil
filament_retract_when_changing_layer = nil
filament_retraction_length = 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_soluble = 0
filament_type = PLA
filament_vendor = Creality
filament_wipe = nil
filament_wipe_distance = nil
bed_type = Cool Plate
nozzle_temperature_initial_layer = 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
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
chamber_temperature = 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
filament_cooling_final_speed = 3.4
filament_cooling_initial_speed = 2.2
filament_cooling_moves = 4
filament_is_support = 0
filament_load_time = 0
filament_loading_speed = 28
filament_loading_speed_start = 3
filament_multitool_ramming = 0
filament_multitool_ramming_flow = 10
filament_multitool_ramming_volume = 10
filament_notes = ""
filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
filament_retract_lift_above = 0
filament_retract_lift_below = 0
filament_retract_lift_enforce = All Surfaces
filament_shrink = 100%
filament_toolchange_delay = 0
filament_unload_time = 0
filament_unloading_speed = 90
filament_unloading_speed_start = 100
material_flow_dependent_temperature = 0
material_flow_temp_graph = [[3.5,200],[7.0,240]]
pressure_advance = 0.02
required_nozzle_HRC = 0
support_material_interface_fan_speed = -1

View File

@@ -0,0 +1,97 @@
[metadata]
show_name = Hyper Stardust PLA
material_type = pla
[settings]
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
filament_cost = 26.9
filament_density = 1.24
filament_deretraction_speed = 15
filament_diameter = 1.75
filament_max_volumetric_speed = 18
filament_minimal_purge_on_wipe_tower = 15
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_restart_extra = nil
filament_retraction_speed = 15
filament_settings_id =
filament_soluble = 0
filament_type = PLA
filament_vendor = Creality
filament_wipe = nil
filament_wipe_distance = 3
bed_type = Cool Plate
nozzle_temperature_initial_layer = 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
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
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
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
filament_cooling_final_speed = 3.4
filament_cooling_initial_speed = 2.2
filament_cooling_moves = 4
filament_is_support = 0
filament_load_time = 0
filament_loading_speed = 28
filament_loading_speed_start = 3
filament_multitool_ramming = 0
filament_multitool_ramming_flow = 10
filament_multitool_ramming_volume = 10
filament_notes = ""
filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
filament_retract_lift_above = nil
filament_retract_lift_below = nil
filament_retract_lift_enforce = nil
filament_shrink = 100%
filament_shrinkage_compensation_z = 100%
filament_toolchange_delay = 0
filament_unload_time = 0
filament_unloading_speed = 90
filament_unloading_speed_start = 100
material_flow_dependent_temperature = 0
material_flow_temp_graph = [[0.8,200],[1.0,200],[1.2,220]]
pressure_advance = 0.04
required_nozzle_HRC = 0
support_material_interface_fan_speed = -1

View File

@@ -0,0 +1,97 @@
[metadata]
show_name = Soleyin Ultra PLA
material_type = pla
[settings]
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
filament_cost = 6
filament_density = 1.25
filament_deretraction_speed = 15
filament_diameter = 1.75
filament_max_volumetric_speed = 16
filament_minimal_purge_on_wipe_tower = 15
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_restart_extra = nil
filament_retraction_speed = 15
filament_settings_id =
filament_soluble = 0
filament_type = PLA
filament_vendor = Creality
filament_wipe = nil
filament_wipe_distance = nil
bed_type = Cool Plate
nozzle_temperature_initial_layer = 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
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
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
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
filament_cooling_final_speed = 3.4
filament_cooling_initial_speed = 2.2
filament_cooling_moves = 4
filament_is_support = 0
filament_load_time = 0
filament_loading_speed = 28
filament_loading_speed_start = 3
filament_multitool_ramming = 0
filament_multitool_ramming_flow = 10
filament_multitool_ramming_volume = 10
filament_notes = ""
filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
filament_retract_lift_above = nil
filament_retract_lift_below = nil
filament_retract_lift_enforce = nil
filament_shrink = 100%
filament_shrinkage_compensation_z = 100%
filament_toolchange_delay = 0
filament_unload_time = 0
filament_unloading_speed = 90
filament_unloading_speed_start = 100
material_flow_dependent_temperature = 0
material_flow_temp_graph = [[1.0,200],[1.1,200],[1.2,220]]
pressure_advance = 0.05
required_nozzle_HRC = 0
support_material_interface_fan_speed = -1

View File

@@ -0,0 +1,104 @@
[metadata]
show_name = Ender3 V3 SE Model
[settings]
family = Creality
printer_technology = FFF
deretraction_speed = 30
extruder_colour = #FCE94F
extruder_offset = 0x0
gcode_flavor = marlin2
silent_mode = 0
support_chamber_temp_control = 0
support_air_filtration = 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_z = 500,500
machine_max_speed_e = 100,100
machine_max_speed_x = 500,500
machine_max_speed_y = 500,500
machine_max_speed_z = 30,30
machine_max_jerk_e = 5,5
machine_max_jerk_x = 10,10
machine_max_jerk_y = 10,10
machine_max_jerk_z = 0.4,0.4
machine_min_extruding_rate = 0,0
machine_min_travel_rate = 0,0
max_layer_height = 0.36
min_layer_height = 0.08
printable_height = 250
extruder_clearance_radius = 90
extruder_clearance_height_to_rod = 47
extruder_clearance_height_to_lid = 34
nozzle_diameter = 0.4
printer_settings_id =
printer_variant = 0.4
retraction_minimum_travel = 1
retract_before_wipe = 100
retract_when_changing_layer = 1
retraction_length = 0.8
retract_length_toolchange = 1
z_hop = 0.4
retract_restart_extra = 0
retract_restart_extra_toolchange = 0
retraction_speed = 30
single_extruder_multi_material = 1
change_filament_gcode =
wipe = 1
z_hop_types = Slope Lift
before_layer_change_gcode = ;BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n
default_print_profile = 0.20mm Standard @Creality Ender-3 V3 SE 0.4 nozzle
machine_start_gcode = M220 S100 ;Reset Feedrate \nM221 S100 ;Reset Flowrate \n \nM140 S[bed_temperature_initial_layer_single] ;Set final bed temp \nG28 ;Home \n \nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nM104 S[nozzle_temperature_initial_layer] ;Set final nozzle temp \nG1 X-2.1 Y20 Z0.28 F5000.0 ;Move to start position \nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize \nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize \nG1 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
machine_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_pause_gcode = M25
bed_exclude_area = 0x0
layer_change_gcode =
scan_first_layer = 0
nozzle_type = brass
auxiliary_fan = 0
printer_model = Creality Ender-3 V3 SE
printer_structure = i3
bbl_use_printhost = 0
bed_mesh_max = 99999,99999
bed_mesh_min = -99999,-99999
bed_mesh_probe_distance = 50,50
best_object_pos = 0.5,0.5
cooling_tube_length = 5
cooling_tube_retraction = 91.5
creality_flush_time = 86.0
disable_m73 = 0
emit_machine_limits_to_gcode = 1
enable_filament_ramming = 1
extra_loading_move = -2
fan_kickstart = 0
fan_speedup_overhangs = 1
fan_speedup_time = 0
high_current_on_filament_swap = 0
machine_LED_light_exist = 0
machine_load_filament_time = 11
machine_platform_motion_enable = 0
machine_unload_filament_time = 0
manual_filament_change = 1
nozzle_hrc = 0
nozzle_volume = 0
parking_pos_retraction = 92
preferred_orientation = 0
printable_area = 0x0,220x0,220x220,0x220
purge_in_prime_tower = 1
support_multi_bed_types = 1
time_cost = 0
use_firmware_retraction = 0
use_relative_e_distances = 1
z_offset = 0
retract_lift_above = 0
retract_lift_below = 0
retract_lift_enforce = All Surfaces
wipe_distance = 2

View File

@@ -0,0 +1,216 @@
[metadata]
show_name = 0.08mm Extra Fine Quality
[settings]
adaptive_layer_height = 0
reduce_crossing_wall = 0
bridge_flow = 0.8
bridge_speed = 25
brim_width = 5
print_sequence = by layer
default_acceleration = 2500
bridge_no_support = 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
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 =
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
standby_temperature_delta = -5
detect_thin_wall = 1
top_surface_line_width = 0.42
top_surface_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
draft_shield = disabled
enable_arc_fitting = 0
wall_infill_order = inner wall/outer wall/infill
initial_layer_acceleration = 500
travel_acceleration = 2500
inner_wall_acceleration = 2000
ironing_flow = 15%
ironing_spacing = 0.1
ironing_speed = 20
ironing_type = no ironing
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
resolution = 0.012
top_surface_pattern = monotonicline
top_shell_layers = 9
top_shell_thickness = 0.8
initial_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
bridge_acceleration = 50%
bridge_angle = 0
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
ensure_vertical_shell_thickness = ensure_all
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
fuzzy_skin = none
fuzzy_skin_first_layer = 0
fuzzy_skin_point_distance = 0.8
fuzzy_skin_thickness = 0.3
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
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
min_bead_width = 85%
min_feature_size = 25%
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
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
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
single_extruder_multi_material_priming = 0
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
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
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
travel_speed_z = 0
wall_direction = auto
wall_distribution_count = 1
wall_filament = 1
wall_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_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

View File

@@ -0,0 +1,200 @@
[metadata]
show_name = 0.12mm Fine Quality
[settings]
adaptive_layer_height = 0
reduce_crossing_wall = 0
bridge_flow = 0.95
bridge_speed = 100
brim_width = 5
print_sequence = by layer
default_acceleration = 2500
bridge_no_support = 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
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 =
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
standby_temperature_delta = -5
detect_thin_wall = 1
top_surface_line_width = 0.42
top_surface_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
draft_shield = disabled
enable_arc_fitting = 0
wall_infill_order = inner wall/outer wall/infill
initial_layer_acceleration = 500
travel_acceleration = 2500
inner_wall_acceleration = 2000
ironing_flow = 15%
ironing_spacing = 0.1
ironing_speed = 20
ironing_type = no ironing
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
resolution = 0.012
top_surface_pattern = monotonic
top_shell_layers = 5
top_shell_thickness = 0.8
initial_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
bridge_acceleration = 50%
bridge_angle = 0
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
ensure_vertical_shell_thickness = ensure_all
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
fuzzy_skin = none
fuzzy_skin_first_layer = 0
fuzzy_skin_point_distance = 0.8
fuzzy_skin_thickness = 0.3
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
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
min_bead_width = 85%
min_feature_size = 25%
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
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
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%
single_extruder_multi_material_priming = 0
skirt_speed = 50
slice_closing_radius = 0.049
slicing_mode = regular
slow_down_layers = 0
slowdown_for_curled_perimeters = 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
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
travel_speed_z = 0
wall_distribution_count = 1
wall_filament = 1
wall_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_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

View File

@@ -0,0 +1,200 @@
[metadata]
show_name = 0.16mm Optimal Quality
[settings]
adaptive_layer_height = 0
reduce_crossing_wall = 0
bridge_flow = 0.95
bridge_speed = 100
brim_width = 5
print_sequence = by layer
default_acceleration = 2500
bridge_no_support = 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
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 =
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
standby_temperature_delta = -5
detect_thin_wall = 1
top_surface_line_width = 0.42
top_surface_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
draft_shield = disabled
enable_arc_fitting = 0
wall_infill_order = inner wall/outer wall/infill
initial_layer_acceleration = 500
travel_acceleration = 2500
inner_wall_acceleration = 2000
ironing_flow = 15%
ironing_spacing = 0.1
ironing_speed = 20
ironing_type = no ironing
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
resolution = 0.012
top_surface_pattern = monotonic
top_shell_layers = 6
top_shell_thickness = 0.8
initial_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
bridge_acceleration = 50%
bridge_angle = 0
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
ensure_vertical_shell_thickness = ensure_all
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
fuzzy_skin = none
fuzzy_skin_first_layer = 0
fuzzy_skin_point_distance = 0.8
fuzzy_skin_thickness = 0.3
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
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
min_bead_width = 85%
min_feature_size = 25%
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
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
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%
single_extruder_multi_material_priming = 0
skirt_speed = 50
slice_closing_radius = 0.049
slicing_mode = regular
slow_down_layers = 0
slowdown_for_curled_perimeters = 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
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
travel_speed_z = 0
wall_distribution_count = 1
wall_filament = 1
wall_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_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

View File

@@ -0,0 +1,226 @@
[metadata]
show_name = 0.20mm Standard Quality
[settings]
adaptive_layer_height = 0
reduce_crossing_wall = 0
bridge_flow = 0.95
bridge_speed = 50
brim_width = 5
print_sequence = by layer
default_acceleration = 2500
bridge_no_support = 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
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 =
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
standby_temperature_delta = -5
detect_thin_wall = 0
top_surface_line_width = 0.42
top_surface_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
draft_shield = disabled
enable_arc_fitting = 1
wall_infill_order = inner wall/outer wall/infill
initial_layer_acceleration = 500
travel_acceleration = 2500
inner_wall_acceleration = 2000
ironing_flow = 15%
ironing_spacing = 0.1
ironing_speed = 20
ironing_type = no ironing
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
resolution = 0.012
top_surface_pattern = monotonic
top_shell_layers = 4
top_shell_thickness = 0.8
initial_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
bridge_acceleration = 50%
bridge_angle = 0
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
ensure_vertical_shell_thickness = ensure_all
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
fuzzy_skin = none
fuzzy_skin_first_layer = 0
fuzzy_skin_point_distance = 0.8
fuzzy_skin_thickness = 0.3
gap_fill_target = 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
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
min_bead_width = 85%
min_feature_size = 25%
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
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
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
single_extruder_multi_material_priming = 0
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"
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
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
travel_speed_z = 0
wall_direction = auto
wall_distribution_count = 1
wall_filament = 1
wall_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_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

View File

@@ -0,0 +1,50 @@
[metadata]
show_name = No Support
[settings]
enable_support = 0
support_filament = 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_type = normal(auto)
support_style = default
support_interface_bottom_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
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%

View File

@@ -1,36 +1,60 @@
import re
with open('app/routes.py', 'r', encoding='utf-8') as f:
text = f.read()
def update_main_routes():
with open('app/routes/main_routes.py', 'r', encoding='utf-8') as f:
text = f.read()
old_str = """ print_file = PrintFile(
filename=unique_filename,
original_filename=f"{combined_name}.stl",
file_type='stl',
user_id=current_user.id,
status='waiting'
)
db.session.add(print_file)
db.session.commit()
# Create the API endpoint
api_endpoint = """
@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()
return jsonify({'presets': presets, 'support_patterns': patterns})
"""
if "def engine_options(engine_name):" not in text:
text += api_endpoint
# Overwrite the old get_quality_presets
old_func = re.search(r'def get_quality_presets\(\):.*?(?=@main_bp\.route|\Z)', text, re.DOTALL)
if old_func:
text = text.replace(old_func.group(0), "")
# Replace in plater()
if 'presets = get_quality_presets()' in text:
text = text.replace("presets = get_quality_presets()", "")
slice_stl_task(print_file.id, merged_filepath, quality)"""
with open('app/routes/main_routes.py', 'w', encoding='utf-8') as f:
f.write(text)
new_str = """ print_file = PrintFile(
filename=unique_filename,
original_filename=f"{combined_name}.stl",
file_type='stl',
user_id=current_user.id,
status='merging'
)
db.session.add(print_file)
db.session.commit()
def update_admin_routes():
with open('app/routes/admin_routes.py', 'r', encoding='utf-8') as f:
text = f.read()
text = re.sub(r'from app\.utils\.print_config import get_quality_presets\n', '', text)
from .tasks import merge_and_slice_task
merge_and_slice_task(print_file.id, inputs, merged_filepath, quality)"""
old_ret = """ configs = {c.key: c.value for c in SystemConfig.query.all()}
presets = get_quality_presets()
engines = get_all_engines()
return render_template('admin/settings.html', configs=configs, presets=presets, engines=engines)"""
new_ret = """ configs = {c.key: c.value for c in SystemConfig.query.all()}
engines = get_all_engines()
return render_template('admin/settings.html', configs=configs, engines=engines)"""
if old_ret in text:
text = text.replace(old_ret, new_ret)
old_func = re.search(r'def get_quality_presets\(\):.*?(?=@admin_bp\.route|\Z)', text, re.DOTALL)
if old_func:
text = text.replace(old_func.group(0), "")
with open('app/routes/admin_routes.py', 'w', encoding='utf-8') as f:
f.write(text)
if old_str in text:
with open('app/routes.py', 'w', encoding='utf-8') as f:
f.write(text.replace(old_str, new_str))
print("Patched successfully")
else:
print("Old string not found")
update_main_routes()
update_admin_routes()
print("Routes patched")

21
tmp_get_ini_from_json.py Normal file
View File

@@ -0,0 +1,21 @@
import json
import os
if __name__ == "__main__":
all_files = os.sys.argv[1:]
print(all_files)
keys = {}
for file in all_files:
js = json.load(open(file))
for k, v in js.items():
if k in ['filament_id','setting_id',"type","name","from","instantiation","inherits","compatible_printers","filename_format"]:
continue
if type(v) == list:
v = v[0]
keys[k] = v
print(json.dumps(keys))
with open("0.08mm_Extra_Fine.ini", "w") as f:
for k, v in keys.items():
v_str = v.replace('\n', '\\n')
f.write(f"{k} = {v_str}\n")