6 Commits

Author SHA1 Message Date
465678f3e4 Merge pull request 'feat/parameters' (#1) from feat/parameters into main
Some checks failed
Build, Test and Deploy / test-backend (push) Failing after 4s
Build, Test and Deploy / build-and-push (push) Has been skipped
Build, Test and Deploy / deploy (push) Has been skipped
Reviewed-on: #1
2026-01-29 17:23:37 +01:00
967c68fa52 chore: remove all .DS_Store files and ignore them in .gitignore 2026-01-29 16:51:43 +01:00
6715d1f75e feat: setup CI/CD with Gitea Actions for dev, int, and prod environments 2026-01-29 16:47:18 +01:00
c365b4fa6b feat(): new feature 2026-01-29 15:59:08 +01:00
e9cca3daeb feat(orca): added orcaslicer preset 2026-01-28 14:30:04 +01:00
443ff04430 feat(web + backend): advanced and simple quote. 2026-01-27 23:38:47 +01:00
8596 changed files with 461775 additions and 237 deletions

137
.gitea/workflows/cicd.yaml Normal file
View File

@@ -0,0 +1,137 @@
name: Build, Test and Deploy
on:
push:
branches:
- main
- int
- dev
jobs:
test-backend:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Install dependencies
run: |
pip install -r backend/requirements.txt
pip install pytest httpx
- name: Run Backend Tests
run: |
export PYTHONPATH=$PYTHONPATH:$(pwd)/backend
pytest backend/tests
build-and-push:
needs: test-backend
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set Environment Variables
run: |
if [[ "${{ gitea.ref }}" == "refs/heads/main" ]]; then
echo "TAG=prod" >> $GITHUB_ENV
elif [[ "${{ gitea.ref }}" == "refs/heads/int" ]]; then
echo "TAG=int" >> $GITHUB_ENV
else
echo "TAG=dev" >> $GITHUB_ENV
fi
- name: Login to Gitea Registry
uses: docker/login-action@v2
with:
registry: ${{ secrets.REGISTRY_URL }}
username: ${{ secrets.GITEA_USER }}
password: ${{ secrets.GITEA_TOKEN }}
- name: Build and Push Backend
uses: docker/build-push-action@v4
with:
context: ./backend
push: true
tags: ${{ secrets.REGISTRY_URL }}/${{ gitea.repository_owner }}/print-calculator-backend:${{ env.TAG }}
- name: Build and Push Frontend
uses: docker/build-push-action@v4
with:
context: ./frontend
push: true
tags: ${{ secrets.REGISTRY_URL }}/${{ gitea.repository_owner }}/print-calculator-frontend:${{ env.TAG }}
deploy:
needs: build-and-push
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set Deployment Vars
run: |
if [[ "${{ gitea.ref }}" == "refs/heads/main" ]]; then
echo "ENV=prod" >> $GITHUB_ENV
echo "TAG=prod" >> $GITHUB_ENV
elif [[ "${{ gitea.ref }}" == "refs/heads/int" ]]; then
echo "ENV=int" >> $GITHUB_ENV
echo "TAG=int" >> $GITHUB_ENV
else
echo "ENV=dev" >> $GITHUB_ENV
echo "TAG=dev" >> $GITHUB_ENV
fi
- name: Create Remote Directory
uses: appleboy/ssh-action@v0.1.10
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: mkdir -p /mnt/user/appdata/print-calculator/${{ env.ENV }}/
- name: Copy Compose File to Server
uses: appleboy/scp-action@v0.1.4
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
source: "docker-compose.deploy.yml"
target: "/mnt/user/appdata/print-calculator/${{ env.ENV }}/"
- name: Copy Env File to Server
uses: appleboy/scp-action@v0.1.4
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
source: "deploy/envs/${{ env.ENV }}.env"
target: "/mnt/user/appdata/print-calculator/${{ env.ENV }}/.env"
- name: Execute Remote Deployment
uses: appleboy/ssh-action@v0.1.10
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd /mnt/user/appdata/print-calculator/${{ env.ENV }}/
# Rename the copied env file to strictly '.env' so docker compose picks it up automatically
mv ${{ env.ENV }}.env .env
# Login to registry
echo ${{ secrets.GITEA_TOKEN }} | docker login ${{ secrets.REGISTRY_URL }} -u ${{ secrets.GITEA_USER }} --password-stdin
# Pull new images
# We force reading from .env just to be safe, though default behavior does it too.
docker compose --env-file .env -f docker-compose.deploy.yml pull
# Start/Update services
# TAG is inside .env now, so we don't even need to pass it explicitly!
docker compose --env-file .env -f docker-compose.deploy.yml up -d --remove-orphans

11
.gitignore vendored
View File

@@ -24,3 +24,14 @@ hs_err_pid*
replay_pid*
/frontend/.vscode/
/backend/venv/
# IDEs and editors
.idea/
*.iml
.vscode/
.vs/
.fleet/
.project
.classpath
.settings/
.DS_Store

38
GEMINI.md Normal file
View File

@@ -0,0 +1,38 @@
# GEMINI Project Context
Questo file serve a dare contesto all'AI (Antigravity/Gemini) sulla struttura e logica del progetto.
## Project Overview
**Nome**: Print Calculator
**Scopo**: Calcolare costi e tempi di stampa 3D da file STL.
**Stack**:
- **Backend**: Python (FastAPI), libreria `trimesh` per analisi geometrica.
- **Frontend**: Angular 19 (TypeScript).
## Architecture
### Backend (`/backend`)
- **`main.py`**: Entrypoint dell'applicazione FastAPI.
- Definisce l'API `POST /calculate/stl`.
- Gestisce l'upload del file, invoca lo slicer e restituisce il preventivo.
- Configura CORS per permettere chiamate dal frontend.
- **`slicer.py`**: Wrappa l'eseguibile di **OrcaSlicer** per effettuare lo slicing reale del modello.
- Gestisce i profili di stampa (Macchina, Processo, Filamento).
- Crea configurazioni on-the-fly per supportare mesh di grandi dimensioni.
- **`calculator.py`**: Analizza il G-Code generato.
- `GCodeParser`: Estrae tempo di stampa e materiale usato dai metadati del G-Code.
- `QuoteCalculator`: Applica i costi (orari, energia, materiale) per generare il prezzo finale.
### Frontend (`/frontend`)
- Applicazione Angular standard.
- Usa Angular Material.
- Service per upload STL e visualizzazione preventivo.
## Key Concepts
- **Real Slicing**: Il backend esegue un vero slicing usando OrcaSlicer in modalità headless. Questo garantisce stime di tempo e materiale estremamente precise, identiche a quelle che si otterrebbero preparando il file per la stampa.
- **G-Code Parsing**: Invece di stimare geometricamente, l'applicazione legge direttamene i commenti generati dallo slicer nel G-Code (es. `estimated printing time`, `filament used`).
## Development Notes
- Per eseguire il backend serve `uvicorn`.
- Il frontend richiede `npm install` al primo avvio.
- Le configurazioni di stampa (layer height, wall thickness, infill) sono attualmente hardcoded o con valori di default nel backend, ma potrebbero essere esposte come parametri API in futuro.

137
backend/api/routes.py Normal file
View File

@@ -0,0 +1,137 @@
from fastapi import APIRouter, UploadFile, File, HTTPException, Form
from models.quote_request import QuoteRequest, QuoteResponse
from slicer import slicer_service
from calculator import GCodeParser, QuoteCalculator
from config import settings
from profile_manager import ProfileManager
import os
import shutil
import uuid
import logging
import json
router = APIRouter()
logger = logging.getLogger("api")
profile_manager = ProfileManager()
def cleanup_files(files: list):
for f in files:
try:
if os.path.exists(f):
os.remove(f)
except Exception as e:
logger.warning(f"Failed to delete temp file {f}: {e}")
def format_time(seconds: int) -> str:
m, s = divmod(seconds, 60)
h, m = divmod(m, 60)
if h > 0:
return f"{int(h)}h {int(m)}m"
return f"{int(m)}m {int(s)}s"
@router.post("/quote", response_model=QuoteResponse)
async def calculate_quote(
file: UploadFile = File(...),
# Compatible with form data if we parse manually or use specific dependencies.
# FastAPI handling of mixed File + JSON/Form is tricky.
# Easiest is to use Form(...) for fields.
machine: str = Form("bambu_a1"),
filament: str = Form("pla_basic"),
quality: str = Form("standard"),
layer_height: str = Form(None), # Form data comes as strings usually
infill_density: int = Form(None),
infill_pattern: str = Form(None),
support_enabled: bool = Form(False),
print_speed: int = Form(None)
):
"""
Endpoint for calculating print quote.
Accepts Multipart Form Data:
- file: The STL file
- machine, filament, quality: strings
- other overrides
"""
if not file.filename.lower().endswith(".stl"):
raise HTTPException(status_code=400, detail="Only .stl files are supported.")
if machine != "bambu_a1":
raise HTTPException(status_code=400, detail="Unsupported machine.")
req_id = str(uuid.uuid4())
input_filename = f"{req_id}.stl"
output_filename = f"{req_id}.gcode"
input_path = os.path.join(settings.TEMP_DIR, input_filename)
output_path = os.path.join(settings.TEMP_DIR, output_filename)
try:
# 1. Save File
with open(input_path, "wb") as buffer:
shutil.copyfileobj(file.file, buffer)
# 2. Build Overrides
overrides = {}
if layer_height is not None and layer_height != "":
overrides["layer_height"] = layer_height
if infill_density is not None:
overrides["sparse_infill_density"] = f"{infill_density}%"
if infill_pattern:
overrides["sparse_infill_pattern"] = infill_pattern
if support_enabled: overrides["enable_support"] = "1"
if print_speed is not None:
overrides["default_print_speed"] = str(print_speed)
# 3. Slice
# Pass parameters to slicer service
slicer_service.slice_stl(
input_stl_path=input_path,
output_gcode_path=output_path,
machine=machine,
filament=filament,
quality=quality,
overrides=overrides
)
# 4. Parse
stats = GCodeParser.parse_metadata(output_path)
if stats["print_time_seconds"] == 0 and stats["filament_weight_g"] == 0:
raise HTTPException(status_code=500, detail="Slicing returned empty stats.")
# 5. Calculate
# We could allow filament cost override here too if passed in params
quote = QuoteCalculator.calculate(stats)
return QuoteResponse(
success=True,
data={
"print_time_seconds": stats["print_time_seconds"],
"print_time_formatted": format_time(stats["print_time_seconds"]),
"material_grams": stats["filament_weight_g"],
"cost": {
"material": quote["breakdown"]["material_cost"],
"machine": quote["breakdown"]["machine_cost"],
"energy": quote["breakdown"]["energy_cost"],
"markup": quote["breakdown"]["markup_amount"],
"total": quote["total_price"]
},
"parameters": {
"machine": machine,
"filament": filament,
"quality": quality
}
}
)
except Exception as e:
logger.error(f"Quote error: {e}", exc_info=True)
return QuoteResponse(success=False, error=str(e))
finally:
cleanup_files([input_path, output_path])
@router.get("/profiles/available")
def get_profiles():
return {
"machines": profile_manager.list_machines(),
"filaments": profile_manager.list_filaments(),
"processes": profile_manager.list_processes()
}

View File

@@ -60,11 +60,14 @@ class GCodeParser:
# Parse Time
if "estimated printing time =" in line: # Header
time_str = line.split("=")[1].strip()
logger.info(f"Parsing time string (Header): '{time_str}'")
stats["print_time_seconds"] = GCodeParser._parse_time_string(time_str)
elif "total estimated time:" in line: # Footer
parts = line.split("total estimated time:")
if len(parts) > 1:
stats["print_time_seconds"] = GCodeParser._parse_time_string(parts[1].strip())
time_str = parts[1].strip()
logger.info(f"Parsing time string (Footer): '{time_str}'")
stats["print_time_seconds"] = GCodeParser._parse_time_string(time_str)
# Parse Filament info
if "filament used [g] =" in line:
@@ -94,9 +97,21 @@ class GCodeParser:
@staticmethod
def _parse_time_string(time_str: str) -> int:
"""
Converts '1d 2h 3m 4s' to seconds.
Converts '1d 2h 3m 4s' or 'HH:MM:SS' to seconds.
"""
total_seconds = 0
# Try HH:MM:SS or MM:SS format
if ':' in time_str:
parts = time_str.split(':')
parts = [int(p) for p in parts]
if len(parts) == 3: # HH:MM:SS
total_seconds = parts[0] * 3600 + parts[1] * 60 + parts[2]
elif len(parts) == 2: # MM:SS
total_seconds = parts[0] * 60 + parts[1]
return total_seconds
# Original regex parsing for "1h 2m 3s"
days = re.search(r'(\d+)d', time_str)
hours = re.search(r'(\d+)h', time_str)
mins = re.search(r'(\d+)m', time_str)
@@ -122,6 +137,8 @@ class QuoteCalculator:
# 2. Machine Time Cost
# Cost per second = (Cost per hour / 3600)
print("ciaooo")
print(stats["print_time_seconds"])
print_time_hours = stats["print_time_seconds"] / 3600.0
machine_cost = print_time_hours * settings.MACHINE_COST_PER_HOUR
@@ -137,6 +154,13 @@ class QuoteCalculator:
markup_factor = 1.0 + (settings.MARKUP_PERCENT / 100.0)
total_price = subtotal * markup_factor
logger.info("Cost Calculation:")
logger.info(f" - Use: {stats['filament_weight_g']:.2f}g @ {settings.FILAMENT_COST_PER_KG}€/kg = {material_cost:.2f}")
logger.info(f" - Time: {print_time_hours:.4f}h @ {settings.MACHINE_COST_PER_HOUR}€/h = {machine_cost:.2f}")
logger.info(f" - Power: {kwh_used:.4f}kWh @ {settings.ENERGY_COST_PER_KWH}€/kWh = {energy_cost:.2f}")
logger.info(f" - Subtotal: {subtotal:.2f}")
logger.info(f" - Total (Markup {settings.MARKUP_PERCENT}%): {total_price:.2f}")
return {
"breakdown": {
"material_cost": round(material_cost, 2),

View File

@@ -1,4 +1,5 @@
import os
import sys
class Settings:
# Directories
@@ -7,13 +8,18 @@ class Settings:
PROFILES_DIR = os.environ.get("PROFILES_DIR", os.path.join(BASE_DIR, "profiles"))
# Slicer Paths
SLICER_PATH = os.environ.get("SLICER_PATH", "/opt/orcaslicer/AppRun")
if sys.platform == "darwin":
_DEFAULT_SLICER_PATH = "/Applications/OrcaSlicer.app/Contents/MacOS/OrcaSlicer"
else:
_DEFAULT_SLICER_PATH = "/opt/orcaslicer/AppRun"
SLICER_PATH = os.environ.get("SLICER_PATH", _DEFAULT_SLICER_PATH)
ORCA_HOME = os.environ.get("ORCA_HOME", "/opt/orcaslicer")
# Defaults Profiles (Bambu A1)
MACHINE_PROFILE = os.path.join(ORCA_HOME, "resources/profiles/BBL/machine/Bambu Lab A1 0.4 nozzle.json")
PROCESS_PROFILE = os.path.join(ORCA_HOME, "resources/profiles/BBL/process/0.20mm Standard @BBL A1.json")
FILAMENT_PROFILE = os.path.join(ORCA_HOME, "resources/profiles/BBL/filament/Generic PLA @BBL A1.json")
MACHINE_PROFILE = os.path.join(PROFILES_DIR, "Bambu_Lab_A1_machine.json")
PROCESS_PROFILE = os.path.join(PROFILES_DIR, "Bambu_Process_0.20_Standard.json")
FILAMENT_PROFILE = os.path.join(PROFILES_DIR, "Bambu_PLA_Basic.json")
# Pricing
FILAMENT_COST_PER_KG = float(os.environ.get("FILAMENT_COST_PER_KG", 25.0))

View File

@@ -1,19 +1,13 @@
import os
import shutil
import uuid
import logging
from fastapi import FastAPI, UploadFile, File, HTTPException
import os
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
# Import custom modules
from config import settings
from slicer import slicer_service
from calculator import GCodeParser, QuoteCalculator
from api.routes import router as api_router
# Configure logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger("api")
logger = logging.getLogger("main")
app = FastAPI(title="Print Calculator API")
@@ -29,84 +23,52 @@ app.add_middleware(
# Ensure directories exist
os.makedirs(settings.TEMP_DIR, exist_ok=True)
class QuoteResponse(BaseModel):
printer: str
print_time_seconds: int
print_time_formatted: str
material_grams: float
cost: dict
notes: list[str] = []
# Include Router
app.include_router(api_router, prefix="/api")
def cleanup_files(files: list):
for f in files:
try:
if os.path.exists(f):
os.remove(f)
except Exception as e:
logger.warning(f"Failed to delete temp file {f}: {e}")
# Legacy endpoint redirect or basic handler if needed for backward compatibility
# The frontend likely calls /calculate/stl.
# We should probably keep the old route or instruct user to update frontend.
# But for this task, let's remap the old route to the new logic if possible,
# or just expose the new route.
# The user request said: "Creare api/routes.py ... @app.post('/api/quote')"
# So we are creating a new endpoint.
# Existing frontend might break?
# The context says: "Currently uses hardcoded... Objective is to render system flexible... Frontend: Angular 19"
# The user didn't explicitly ask to update the frontend, but the new API is at /api/quote.
# I will keep the old "/calculate/stl" endpoint support by forwarding it or duplicating logic if critical,
# OR I'll assume the user will handle frontend updates.
# Better: I will alias the old route to the new one if parameters allow,
# but the new one expects Form data with different names maybe?
# Old: `/calculate/stl` just expected a file.
# I'll enable a simplified version on the old route for backward compat using defaults.
def format_time(seconds: int) -> str:
m, s = divmod(seconds, 60)
h, m = divmod(m, 60)
if h > 0:
return f"{int(h)}h {int(m)}m"
return f"{int(m)}m {int(s)}s"
from fastapi import UploadFile, File
from api.routes import calculate_quote
@app.post("/calculate/stl", response_model=QuoteResponse)
async def calculate_from_stl(file: UploadFile = File(...)):
if not file.filename.lower().endswith(".stl"):
raise HTTPException(status_code=400, detail="Only .stl files are supported.")
# Unique ID for this request
req_id = str(uuid.uuid4())
input_filename = f"{req_id}.stl"
output_filename = f"{req_id}.gcode"
@app.post("/calculate/stl")
async def legacy_calculate(file: UploadFile = File(...)):
"""Legacy endpoint compatibility"""
# Call the new logic with defaults
resp = await calculate_quote(file=file)
if not resp.success:
from fastapi import HTTPException
raise HTTPException(status_code=500, detail=resp.error)
input_path = os.path.join(settings.TEMP_DIR, input_filename)
output_path = os.path.join(settings.TEMP_DIR, output_filename)
try:
# 1. Save Uploaded File
with open(input_path, "wb") as buffer:
shutil.copyfileobj(file.file, buffer)
# 2. Slice
# slicer_service methods raise exceptions on failure
slicer_service.slice_stl(input_path, output_path)
# 3. Parse Results
stats = GCodeParser.parse_metadata(output_path)
if stats["print_time_seconds"] == 0 and stats["filament_weight_g"] == 0:
# Slicing likely failed or produced empty output without throwing error
raise HTTPException(status_code=500, detail="Slicing completed but no stats found. Check mesh validity.")
# 4. Calculate Costs
quote = QuoteCalculator.calculate(stats)
return {
"printer": "BambuLab A1 (Estimated)",
"print_time_seconds": stats["print_time_seconds"],
"print_time_formatted": format_time(stats["print_time_seconds"]),
"material_grams": stats["filament_weight_g"],
"cost": {
"material": quote["breakdown"]["material_cost"],
"machine": quote["breakdown"]["machine_cost"],
"energy": quote["breakdown"]["energy_cost"],
"markup": quote["breakdown"]["markup_amount"],
"total": quote["total_price"]
},
"notes": ["Estimation generated using OrcaSlicer headless."]
}
except Exception as e:
logger.error(f"Error processing request: {e}")
raise HTTPException(status_code=500, detail=str(e))
finally:
# Cleanup
cleanup_files([input_path, output_path])
# Map Check response to old format
data = resp.data
return {
"print_time_seconds": data.get("print_time_seconds", 0),
"print_time_formatted": data.get("print_time_formatted", ""),
"material_grams": data.get("material_grams", 0.0),
"cost": data.get("cost", {}),
"notes": ["Generated via Dynamic Slicer (Legacy Endpoint)"]
}
@app.get("/health")
def health_check():
return {"status": "ok", "slicer": settings.SLICER_PATH}
return {"status": "ok", "slicer": settings.SLICER_PATH}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)

View File

@@ -0,0 +1,37 @@
from pydantic import BaseModel, Field, validator
from typing import Optional, Literal, Dict, Any
class QuoteRequest(BaseModel):
# File STL (base64 or path)
file_path: Optional[str] = None
file_base64: Optional[str] = None
# Parametri slicing
machine: str = Field(default="bambu_a1", description="Machine type")
filament: str = Field(default="pla_basic", description="Filament type")
quality: Literal["draft", "standard", "fine"] = Field(default="standard")
# Parametri opzionali
layer_height: Optional[float] = Field(None, ge=0.08, le=0.32)
infill_density: Optional[int] = Field(None, ge=0, le=100)
support_enabled: Optional[bool] = None
print_speed: Optional[int] = Field(None, ge=20, le=300)
# Pricing overrides
filament_cost_override: Optional[float] = None
@validator('machine')
def validate_machine(cls, v):
# This list should ideally be dynamic, but for validation purposes we start with known ones.
# Logic in ProfileManager can be looser or strict.
# For now, we allow the string through and let ProfileManager validate availability.
return v
@validator('filament')
def validate_filament(cls, v):
return v
class QuoteResponse(BaseModel):
success: bool
data: Optional[Dict[str, Any]] = None
error: Optional[str] = None

BIN
backend/obj_1_Base.stl Normal file

Binary file not shown.

BIN
backend/obj_3_Hinge.stl Normal file

Binary file not shown.

3986
backend/output/plate_1.gcode Normal file

File diff suppressed because it is too large Load Diff

15
backend/profile_cache.py Normal file
View File

@@ -0,0 +1,15 @@
from functools import lru_cache
import hashlib
from typing import Dict, Tuple
# We can't cache the profile manager instance itself easily if it's not a singleton,
# but we can cache the result of a merge function if we pass simple types.
# However, to avoid circular imports or complex dependency injection,
# we will just provide a helper to generate cache keys and a holder for logic if needed.
# For now, the ProfileManager will strictly determine *what* to merge.
# Validating the cache strategy: since file I/O is the bottleneck, we want to cache the *content*.
def get_cache_key(machine: str, filament: str, process: str) -> str:
"""Helper to create a unique cache key"""
data = f"{machine}|{filament}|{process}"
return hashlib.md5(data.encode()).hexdigest()

193
backend/profile_manager.py Normal file
View File

@@ -0,0 +1,193 @@
import os
import json
import logging
from typing import Dict, List, Tuple, Optional
from profile_cache import get_cache_key
logger = logging.getLogger(__name__)
class ProfileManager:
def __init__(self, profiles_root: str = "profiles"):
# Assuming profiles_root is relative to backend or absolute
if not os.path.isabs(profiles_root):
base_dir = os.path.dirname(os.path.abspath(__file__))
self.profiles_root = os.path.join(base_dir, profiles_root)
else:
self.profiles_root = profiles_root
if not os.path.exists(self.profiles_root):
logger.warning(f"Profiles root not found: {self.profiles_root}")
def get_profiles(self, machine: str, filament: str, process: str) -> Tuple[Dict, Dict, Dict]:
"""
Main entry point to get merged profiles.
Args:
machine: e.g. "Bambu Lab A1 0.4 nozzle"
filament: e.g. "Bambu PLA Basic @BBL A1"
process: e.g. "0.20mm Standard @BBL A1"
"""
# Try cache first (although specific logic is needed if we cache the *result* or the *files*)
# Since we implemented a simple external cache helper, let's use it if we want,
# but for now we will rely on internal logic or the lru_cache decorator on a helper method.
# But wait, the `get_cached_profiles` in profile_cache.py calls `build_merged_profiles` which is logic WE need to implement.
# So we should probably move the implementation here and have the cache wrapper call it,
# OR just implement it here and wrap it.
return self._build_merged_profiles(machine, filament, process)
def _build_merged_profiles(self, machine_name: str, filament_name: str, process_name: str) -> Tuple[Dict, Dict, Dict]:
# We need to find the files.
# The naming convention in OrcaSlicer profiles usually involves the Vendor (e.g. BBL).
# We might need a mapping or search.
# For this implementation, we will assume we know the relative paths or search for them.
# Strategy: Search in all vendor subdirs for the specific JSON files.
# Because names are usually unique enough or we can specify the expected vendor.
# However, to be fast, we can map "machine_name" to a file path.
machine_file = self._find_profile_file(machine_name, "machine")
filament_file = self._find_profile_file(filament_name, "filament")
process_file = self._find_profile_file(process_name, "process")
if not machine_file:
raise FileNotFoundError(f"Machine profile not found: {machine_name}")
if not filament_file:
raise FileNotFoundError(f"Filament profile not found: {filament_name}")
if not process_file:
raise FileNotFoundError(f"Process profile not found: {process_name}")
machine_profile = self._merge_chain(machine_file)
filament_profile = self._merge_chain(filament_file)
process_profile = self._merge_chain(process_file)
# Apply patches
machine_profile = self._apply_patches(machine_profile, "machine")
process_profile = self._apply_patches(process_profile, "process")
return machine_profile, process_profile, filament_profile
def _find_profile_file(self, profile_name: str, profile_type: str) -> Optional[str]:
"""
Searches for a profile file by name in the profiles directory.
The name should match the filename (without .json possibly) or be a precise match.
"""
# Add .json if missing
filename = profile_name if profile_name.endswith(".json") else f"{profile_name}.json"
for root, dirs, files in os.walk(self.profiles_root):
if filename in files:
# Check if it is in the correct type folder (machine, filament, process)
# OrcaSlicer structure: Vendor/process/file.json
# We optionally verify parent dir
if os.path.basename(root) == profile_type or profile_type in root:
return os.path.join(root, filename)
# Fallback: if we simply found it, maybe just return it?
# Some common files might be in root or other places.
# Let's return it if we are fairly sure.
return os.path.join(root, filename)
return None
def _merge_chain(self, final_file_path: str) -> Dict:
"""
Resolves inheritance and merges.
"""
chain = []
current_path = final_file_path
# 1. Build chain
while current_path:
chain.insert(0, current_path) # Prepend
with open(current_path, 'r', encoding='utf-8') as f:
try:
data = json.load(f)
except json.JSONDecodeError as e:
logger.error(f"Failed to decode JSON: {current_path}")
raise e
inherits = data.get("inherits")
if inherits:
# Resolve inherited file
# It is usually in the same directory or relative.
# OrcaSlicer logic: checks same dir, then parent, etc.
# Usually it's in the same directory.
parent_dir = os.path.dirname(current_path)
inherited_path = os.path.join(parent_dir, inherits)
# Special case: if not found, it might be in a common folder?
# But OrcaSlicer usually keeps them local or in specific common dirs.
if not os.path.exists(inherited_path) and not inherits.endswith(".json"):
inherited_path += ".json"
if os.path.exists(inherited_path):
current_path = inherited_path
else:
# Could be a system common file not in the same dir?
# For simplicty, try to look up in the same generic type folder across the vendor?
# Or just fail for now.
# Often "fdm_machine_common.json" is at the Vendor root or similar?
# Let's try searching recursively if not found in place.
found = self._find_profile_file(inherits, "any") # "any" type
if found:
current_path = found
else:
logger.warning(f"Inherited profile '{inherits}' not found for '{current_path}' (Root: {self.profiles_root})")
current_path = None
else:
current_path = None
# 2. Merge
merged = {}
for path in chain:
with open(path, 'r', encoding='utf-8') as f:
data = json.load(f)
# Shallow update
merged.update(data)
# Remove metadata
merged.pop("inherits", None)
return merged
def _apply_patches(self, profile: Dict, profile_type: str) -> Dict:
if profile_type == "machine":
# Patch: G92 E0 to ensure extrusion reference text matches
lcg = profile.get("layer_change_gcode", "")
if "G92 E0" not in lcg:
# Append neatly
if lcg and not lcg.endswith("\n"):
lcg += "\n"
lcg += "G92 E0"
profile["layer_change_gcode"] = lcg
# Patch: ensure printable height is sufficient?
# Only if necessary. For now, trust the profile.
elif profile_type == "process":
# Optional: Disable skirt/brim if we want a "clean" print estimation?
# Actually, for accurate cost, we SHOULD include skirt/brim if the profile has it.
pass
return profile
def list_machines(self) -> List[str]:
# Simple helper to list available machine JSONs
return self._list_profiles_by_type("machine")
def list_filaments(self) -> List[str]:
return self._list_profiles_by_type("filament")
def list_processes(self) -> List[str]:
return self._list_profiles_by_type("process")
def _list_profiles_by_type(self, ptype: str) -> List[str]:
results = []
for root, dirs, files in os.walk(self.profiles_root):
if os.path.basename(root) == ptype:
for f in files:
if f.endswith(".json") and "common" not in f:
results.append(f.replace(".json", ""))
return sorted(results)

View File

@@ -0,0 +1,24 @@
{
"quality_to_process": {
"draft": "0.28mm Extra Draft @BBL A1",
"standard": "0.20mm Standard @BBL A1",
"fine": "0.12mm Fine @BBL A1"
},
"filament_costs": {
"pla_basic": 20.0,
"petg_basic": 25.0,
"abs_basic": 22.0,
"tpu_95a": 35.0
},
"filament_to_profile": {
"pla_basic": "Bambu PLA Basic @BBL A1",
"petg_basic": "Bambu PETG Basic @BBL A1",
"abs_basic": "Bambu ABS @BBL A1",
"tpu_95a": "Bambu TPU 95A @BBL A1"
},
"machine_to_profile": {
"bambu_a1": "Bambu Lab A1 0.4 nozzle",
"bambu_x1": "Bambu Lab X1 Carbon 0.4 nozzle",
"bambu_p1s": "Bambu Lab P1S 0.4 nozzle"
}
}

View File

@@ -6,13 +6,13 @@ bed_shape = 0x0,256x0,256x256,0x256
nozzle_diameter = 0.4
filament_diameter = 1.75
max_print_speed = 500
travel_speed = 500
travel_speed = 700
gcode_flavor = klipper
# Bambu uses specific gcode but klipper/marlin is close enough for time est if accel matches
machine_max_acceleration_x = 10000
machine_max_acceleration_y = 10000
machine_max_acceleration_e = 5000
machine_max_acceleration_extruding = 5000
machine_max_acceleration_e = 6000
machine_max_acceleration_extruding = 6000
# PRINT SETTINGS
layer_height = 0.2
@@ -26,17 +26,17 @@ bottom_solid_layers = 3
# SPEED SETTINGS (Conservative defaults for A1)
perimeter_speed = 200
external_perimeter_speed = 150
external_perimeter_speed = 200
infill_speed = 250
solid_infill_speed = 200
top_solid_infill_speed = 150
support_material_speed = 150
bridge_speed = 50
bridge_speed = 150
gap_fill_speed = 50
# FILAMENT SETTINGS
filament_density = 1.24
filament_cost = 25.0
filament_cost = 18.0
filament_max_volumetric_speed = 15
temperature = 220
bed_temperature = 60
bed_temperature = 65

View File

@@ -0,0 +1,88 @@
{
"00.00.00.00": {
"display_name": "Bambu Lab X1 Carbon",
"print": {
"ipcam": {
"resolution_supported": [ "720p", "1080p" ],
"virtual_camera": "enabled",
"liveview": {
"remote": "tutk"
},
"file": {
"remote": "tutk",
"model_download": "enabled"
}
},
"support_motor_noise_cali":false,
"support_tunnel_mqtt":false,
"support_mqtt_alive":false,
"support_command_ams_switch":false,
"support_cloud_print_only":false,
"support_1080dpi":false,
"support_prompt_sound":false,
"support_ams_humidity":false,
"support_auto_recovery_step_loss":false,
"support_auto_leveling":true,
"support_update_remain":false,
"support_timelapse":true,
"support_filament_backup":false,
"support_chamber_fan":true,
"support_aux_fan":true,
"support_send_to_sd":false,
"support_print_all":true,
"support_print_without_sd":true,
"support_flow_calibration":true,
"support_build_plate_marker_detect":false,
"support_lidar_calibration":true,
"support_ai_monitoring":false,
"support_first_layer_inspect":true,
"support_chamber_temp_edit":false,
"support_extrusion_cali":false,
"support_user_preset":false
},
"model_id":"BL-P001",
"compatible_machine":["BL-P002", "C11", "C12", "C13"],
"printer_type":"3DPrinter-X1-Carbon",
"printer_thumbnail_image":"printer_thumbnail",
"printer_connect_help_image":"input_access_code_x1",
"printer_use_ams_image":"ams_icon",
"use_ams_type":"generic",
"printer_arch":"core_xy",
"printer_series":"series_x1",
"has_cali_line":true,
"printer_is_enclosed":true
},
"01.01.01.00": {
"print": {
"support_1080dpi":true,
"support_ams_humidity":true,
"support_update_remain":true,
"support_auto_recovery_step_loss":true,
"support_filament_backup":true,
"support_send_to_sd":true,
"support_build_plate_marker_detect":true,
"support_ai_monitoring":true
}
},
"01.05.06.01" : {
"print": {
"support_command_ams_switch":true
}
},
"01.05.06.05" : {
"engineer":"00.03.10.05",
"print": {
"support_mqtt_alive":true
}
},
"01.05.06.06": {
"print": {
"support_tunnel_mqtt":true
}
},
"01.06.06.00": {
"print": {
"support_user_preset":true
}
}
}

View File

@@ -0,0 +1,88 @@
{
"00.00.00.00": {
"display_name": "Bambu Lab X1",
"print": {
"ipcam": {
"resolution_supported": [ "720p", "1080p" ],
"virtual_camera": "enabled",
"liveview": {
"remote": "tutk"
},
"file": {
"remote": "tutk",
"model_download": "enabled"
}
},
"support_motor_noise_cali":false,
"support_tunnel_mqtt":false,
"support_mqtt_alive":false,
"support_command_ams_switch":false,
"support_cloud_print_only":false,
"support_1080dpi":false,
"support_prompt_sound":false,
"support_ams_humidity":false,
"support_auto_recovery_step_loss":false,
"support_auto_leveling":true,
"support_update_remain":false,
"support_timelapse":true,
"support_filament_backup":false,
"support_chamber_fan":true,
"support_aux_fan":true,
"support_send_to_sd":false,
"support_print_all":true,
"support_print_without_sd":true,
"support_flow_calibration":true,
"support_build_plate_marker_detect":false,
"support_lidar_calibration":true,
"support_ai_monitoring":false,
"support_first_layer_inspect":true,
"support_chamber_temp_edit":false,
"support_extrusion_cali":false,
"support_user_preset":false
},
"model_id": "BL-P002",
"compatible_machine":["BL-P001", "C11", "C12", "C13"],
"printer_type": "3DPrinter-X1",
"printer_thumbnail_image": "printer_thumbnail",
"printer_connect_help_image": "input_access_code_x1",
"printer_use_ams_image":"ams_icon",
"use_ams_type":"generic",
"printer_arch" : "core_xy",
"printer_series":"series_x1",
"has_cali_line":true,
"printer_is_enclosed":true
},
"01.01.01.00": {
"print": {
"support_1080dpi":true,
"support_ams_humidity":true,
"support_update_remain":true,
"support_auto_recovery_step_loss":true,
"support_filament_backup":true,
"support_send_to_sd":true,
"support_build_plate_marker_detect":true,
"support_ai_monitoring":true
}
},
"01.05.06.01" : {
"print": {
"support_command_ams_switch":true
}
},
"01.05.06.05" : {
"engineer":"00.03.10.05",
"print": {
"support_mqtt_alive":true
}
},
"01.05.06.06": {
"print": {
"support_tunnel_mqtt":true
}
},
"01.06.06.00": {
"print": {
"support_user_preset":true
}
}
}

View File

@@ -0,0 +1,93 @@
{
"00.00.00.00": {
"display_name": "Bambu Lab P1P",
"print": {
"ipcam": {
"resolution_supported": [ "720p" ],
"liveview": {
"local": "local"
}
},
"support_motor_noise_cali":false,
"support_tunnel_mqtt":false,
"support_mqtt_alive":false,
"support_command_ams_switch":false,
"support_cloud_print_only":true,
"support_1080dpi":false,
"support_prompt_sound":false,
"support_ams_humidity":true,
"support_auto_recovery_step_loss":true,
"support_auto_leveling":true,
"support_update_remain":true,
"support_timelapse":true,
"support_filament_backup":true,
"support_chamber_fan":true,
"support_aux_fan":true,
"support_send_to_sd":false,
"support_print_all":false,
"support_print_without_sd":false,
"support_flow_calibration":false,
"support_build_plate_marker_detect":false,
"support_lidar_calibration":false,
"support_ai_monitoring":false,
"support_first_layer_inspect":false,
"support_chamber_temp_edit":false,
"support_extrusion_cali":true,
"support_user_preset":false,
"bed_temperature_limit": 100
},
"model_id": "C11",
"compatible_machine":["BL-P001", "BL-P002", "C12", "C13"],
"printer_type": "C11",
"ftp_folder" : "sdcard/",
"printer_thumbnail_image": "printer_thumbnail_p1p",
"printer_connect_help_image": "input_access_code_p1p",
"printer_use_ams_image":"ams_icon",
"use_ams_type":"generic",
"printer_arch" : "core_xy",
"printer_series":"series_p1p",
"has_cali_line":false,
"printer_is_enclosed":false
},
"01.02.00.00": {
"print": {
"support_send_to_sd":true
}
},
"01.02.99.00": {
"print": {
"ipcam": {
"liveview": {
"remote": "tutk"
}
}
}
},
"01.02.99.10" : {
"print": {
"support_command_ams_switch":true
}
},
"01.03.50.01" : {
"engineer":"00.06.03.51",
"print": {
"support_mqtt_alive":true,
"support_tunnel_mqtt":true
}
},
"01.04.50.01": {
"print": {
"ipcam": {
"file": {
"remote": "tutk"
}
},
"support_user_preset":true
}
},
"01.07.50.00": {
"print": {
"support_print_all": true
}
}
}

View File

@@ -0,0 +1,85 @@
{
"00.00.00.00": {
"display_name": "Bambu Lab P1S",
"print": {
"ipcam": {
"resolution_supported": [ "720p" ],
"liveview": {
"local": "local"
}
},
"support_motor_noise_cali":false,
"support_tunnel_mqtt":false,
"support_mqtt_alive":false,
"support_command_ams_switch":false,
"support_cloud_print_only":true,
"support_1080dpi":false,
"support_prompt_sound":false,
"support_ams_humidity":true,
"support_auto_recovery_step_loss":true,
"support_auto_leveling":true,
"support_update_remain":true,
"support_timelapse":true,
"support_filament_backup":true,
"support_chamber_fan":true,
"support_aux_fan":true,
"support_send_to_sd":true,
"support_print_all":false,
"support_print_without_sd":false,
"support_flow_calibration":false,
"support_build_plate_marker_detect":false,
"support_lidar_calibration":false,
"support_ai_monitoring":false,
"support_first_layer_inspect":false,
"support_chamber_temp_edit":false,
"support_extrusion_cali":true,
"support_user_preset":false,
"bed_temperature_limit": 100
},
"model_id": "C12",
"compatible_machine":["BL-P001", "BL-P002", "C11", "C13"],
"printer_type": "C12",
"ftp_folder" : "sdcard/",
"printer_thumbnail_image": "printer_thumbnail_p1s",
"printer_connect_help_image": "input_access_code_p1p",
"printer_use_ams_image":"ams_icon",
"use_ams_type":"generic",
"printer_arch" : "core_xy",
"printer_series":"series_p1p",
"has_cali_line":false,
"printer_is_enclosed":true
},
"01.02.99.10" : {
"print": {
"support_command_ams_switch":true
}
},
"01.03.50.01": {
"engineer":"00.06.03.51",
"resolution_supported": [ "720p" ],
"print": {
"ipcam": {
"liveview": {
"remote": "tutk"
}
},
"support_mqtt_alive":true,
"support_tunnel_mqtt":true
}
},
"01.04.50.01": {
"print": {
"ipcam": {
"file": {
"remote": "tutk"
}
},
"support_user_preset":true
}
},
"01.07.50.00": {
"print": {
"support_print_all": true
}
}
}

View File

@@ -0,0 +1,61 @@
{
"00.00.00.00": {
"display_name": "Bambu Lab X1E",
"print": {
"ipcam": {
"resolution_supported": [ "720p", "1080p" ],
"virtual_camera": "enabled",
"liveview": {
"remote": "tutk"
},
"file": {
"remote": "tutk",
"model_download": "enabled"
}
},
"support_motor_noise_cali":false,
"support_tunnel_mqtt":true,
"support_mqtt_alive":true,
"support_command_ams_switch":true,
"support_ssl_for_mqtt":true,
"support_cloud_print_only":false,
"support_1080dpi":true,
"support_prompt_sound":false,
"support_ams_humidity":true,
"support_auto_recovery_step_loss":true,
"support_auto_leveling":true,
"support_update_remain":true,
"support_timelapse":true,
"support_filament_backup":true,
"support_chamber_fan":true,
"support_aux_fan":true,
"support_send_to_sd":true,
"support_print_all":true,
"support_print_without_sd":true,
"support_flow_calibration":true,
"support_build_plate_marker_detect":true,
"support_lidar_calibration":true,
"support_ai_monitoring":true,
"support_first_layer_inspect":true,
"support_chamber_temp_edit":true,
"support_extrusion_cali":false,
"support_user_preset":false,
"bed_temperature_limit": 110,
"nozzle_max_temperature": 320
},
"model_id": "C13",
"compatible_machine":["BL-P001", "BL-P002", "C11", "C12"],
"printer_type": "C13",
"printer_thumbnail_image": "printer_thumbnail",
"printer_connect_help_image": "input_access_code_x1",
"printer_use_ams_image":"ams_icon",
"use_ams_type":"generic",
"printer_arch" : "core_xy",
"printer_series":"series_x1",
"has_cali_line":true,
"printer_is_enclosed":true
},
"01.05.06.06": {
"rv2166": "00.00.21.20"
}
}

View File

@@ -0,0 +1,62 @@
{
"00.00.00.00": {
"display_name": "Bambu Lab A1 mini",
"print": {
"ipcam": {
"resolution_supported": [ "720p" ],
"liveview": {
"local": "local",
"remote": "tutk"
}
},
"support_motor_noise_cali":true,
"support_tunnel_mqtt":true,
"support_mqtt_alive":true,
"support_command_ams_switch":true,
"support_cloud_print_only":true,
"support_1080dpi":true,
"support_prompt_sound":true,
"support_ams_humidity":false,
"support_auto_recovery_step_loss":true,
"support_auto_leveling":true,
"support_update_remain":false,
"support_timelapse":true,
"support_filament_backup":true,
"support_chamber_fan":false,
"support_aux_fan":false,
"support_send_to_sd":true,
"support_print_all":false,
"support_print_without_sd":false,
"support_flow_calibration":true,
"support_lidar_calibration":false,
"support_ai_monitoring":false,
"support_first_layer_inspect":false,
"support_chamber_temp_edit":false,
"support_extrusion_cali":true,
"support_user_preset":false,
"bed_temperature_limit": 100
},
"model_id": "N1",
"compatible_machine":[],
"printer_type": "N1",
"ftp_folder" : "sdcard/",
"printer_thumbnail_image": "printer_thumbnail_n1",
"printer_connect_help_image": "input_access_code_n1",
"printer_use_ams_image":"extra_icon",
"use_ams_type":"f1",
"printer_arch" : "i3",
"printer_series":"series_p1p",
"has_cali_line":false,
"printer_is_enclosed":false
},
"01.01.50.01": {
"print": {
"ipcam": {
"file": {
"remote": "tutk"
}
},
"support_user_preset":true
}
}
}

View File

@@ -0,0 +1,61 @@
{
"00.00.00.00": {
"display_name": "Bambu Lab A1",
"print": {
"ipcam": {
"resolution_supported": [ "720p" ],
"liveview": {
"local": "local",
"remote": "tutk"
}
},
"support_motor_noise_cali":true,
"support_tunnel_mqtt":true,
"support_mqtt_alive":true,
"support_command_ams_switch":true,
"support_cloud_print_only":true,
"support_1080dpi":true,
"support_prompt_sound":true,
"support_ams_humidity":false,
"support_auto_recovery_step_loss":true,
"support_auto_leveling":true,
"support_update_remain":false,
"support_timelapse":true,
"support_filament_backup":true,
"support_chamber_fan":false,
"support_aux_fan":false,
"support_send_to_sd":true,
"support_print_all":false,
"support_print_without_sd":false,
"support_flow_calibration":true,
"support_lidar_calibration":false,
"support_ai_monitoring":false,
"support_first_layer_inspect":false,
"support_chamber_temp_edit":false,
"support_extrusion_cali":true,
"support_user_preset":true,
"bed_temperature_limit": 100
},
"model_id": "N2S",
"compatible_machine":[],
"printer_type": "N2S",
"ftp_folder" : "sdcard/",
"printer_thumbnail_image": "printer_thumbnail_n2s",
"printer_connect_help_image": "input_access_code_n1",
"printer_use_ams_image":"extra_icon",
"use_ams_type":"f1",
"printer_arch" : "i3",
"printer_series":"series_p1p",
"has_cali_line":false,
"printer_is_enclosed":false
},
"01.01.50.01": {
"print": {
"ipcam": {
"file": {
"remote": "tutk"
}
}
}
}
}

View File

@@ -0,0 +1,74 @@
{
"00.00.00.00": {
"display_name": "Bambu Lab H2D",
"print": {
"2D": {
"laser": {
"power": [ 10, 40 ]
}
},
"ipcam": {
"resolution_supported": [ "1080p" ],
"virtual_camera": "enabled",
"liveview": {
"remote": "tutk"
},
"file": {
"local": "local",
"remote": "tutk",
"model_download": "enabled"
}
},
"nozzle_temp_range": [ 20, 350 ],
"bed_temp_range": [ 20, 120 ],
"support_motor_noise_cali": false,
"support_tunnel_mqtt": true,
"support_mqtt_alive": true,
"support_command_ams_switch": true,
"support_ssl_for_mqtt": true,
"support_cloud_print_only": false,
"support_1080dpi": true,
"support_prompt_sound": false,
"support_ams_humidity": true,
"support_auto_recovery_step_loss": true,
"support_bed_leveling": 2,
"support_update_remain": true,
"support_timelapse": true,
"support_filament_backup": true,
"support_chamber_fan": true,
"support_aux_fan": true,
"support_send_to_sd": true,
"support_print_all": true,
"support_print_without_sd": true,
"support_flow_calibration": true,
"support_auto_flow_calibration": true,
"support_build_plate_marker_detect": true,
"support_build_plate_marker_detect_type": 2,
"support_lidar_calibration": false,
"support_nozzle_offset_calibration": true,
"support_high_tempbed_calibration": true,
"support_ai_monitoring": true,
"support_first_layer_inspect": false,
"support_save_remote_print_file_to_storage": true,
"support_chamber_temp_edit": true,
"support_chamber_temp_edit_range": [ 20, 65 ],
"support_chamber_temp_switch_heating": 40,
"support_extrusion_cali": false,
"support_user_preset": false
},
"model_id": "O1D",
"printer_modes": [ "fdm", "laser", "cut" ],
"compatible_machine": [],
"printer_type": "O1D",
"printer_thumbnail_image": "printer_thumbnail_h2d",
"printer_connect_help_image": "input_access_code_h2d",
"printer_use_ams_image": "ams_icon",
"printer_ext_image": ["ext_image_o_right", "ext_image_o_left"],
"use_ams_type": "generic",
"printer_arch": "core_xy",
"printer_series": "series_o",
"has_cali_line": true,
"printer_is_enclosed": true,
"enable_set_nozzle_info": false
}
}

View File

@@ -0,0 +1,51 @@
M620 S[next_extruder]
M106 S255
M104 S250
M17 S
M17 X0.5 Y0.5
G91
G1 Y-5 F1200
G1 Z3
G90
G28 X
M17 R
G1 X70 F21000
G1 Y245
G1 Y265 F3000
G4
M106 S0
M109 S250
G1 X90
G1 Y255
G1 X120
G1 X20 Y50 F21000
G1 Y-3
T[next_extruder]
G1 X54
G1 Y265
G92 E0
G1 E40 F180
G4
M104 S[new_filament_temp]
G1 X70 F15000
G1 X76
G1 X65
G1 X76
G1 X65
G1 X90 F3000
G1 Y255
G1 X100
G1 Y265
G1 X70 F10000
G1 X100 F5000
G1 X70 F10000
G1 X100 F5000
G1 X165 F12000
G1 Y245
G1 X70
G1 Y265 F3000
G91
G1 Z-3 F1200
G90
M621 S[next_extruder]

View File

@@ -0,0 +1,33 @@
M620 S255
M106 P1 S255
M104 S250
M17 S
M17 X0.5 Y0.5
G91
G1 Y-5 F3000
G1 Z3 F1200
G90
G28 X
M17 R
G1 X70 F21000
G1 Y245
G1 Y265 F3000
G4
M106 P1 S0
M109 S250
G1 X90 F3000
G1 Y255 F4000
G1 X100 F5000
G1 X120 F21000
G1 X20 Y50
G1 Y-3
T255
G4
M104 S0
G1 X70 F3000
G91
G1 Z-3 F1200
G90
M621 S255

View File

@@ -0,0 +1,60 @@
{
"whitelist": [
],
"blacklist": [
{
"vendor": "Third Party",
"type": "TPU",
"action": "prohibition",
"description": "TPU: not supported"
},
{
"vendor": "Bambulab",
"type": "TPU",
"action": "prohibition",
"description": "TPU: not supported"
},
{
"vendor": "Third Party",
"type": "PVA",
"action": "warning",
"description": "PVA: flexible"
},
{
"vendor": "Third Party",
"type": "PLA-CF",
"action": "warning",
"description": "CF/GF: hard and brittle"
},
{
"vendor": "Third Party",
"type": "PETG-CF",
"action": "warning",
"description": "CF/GF: hard and brittle"
},
{
"vendor": "Third Party",
"type": "PA-CF",
"action": "warning",
"description": "CF/GF: hard and brittle"
},
{
"vendor": "Third Party",
"type": "PAHT-CF",
"action": "warning",
"description": "CF/GF: hard and brittle"
},
{
"vendor": "Bambulab",
"type": "PET-CF",
"action": "prohibition",
"description": "Bambu PET-CF/PA6-CF: not supported"
},
{
"vendor": "Bambulab",
"type": "PA6-CF",
"action": "prohibition",
"description": "Bambu PET-CF/PA6-CF: not supported"
}
]
}

View File

@@ -0,0 +1 @@
01.10.00.01

View File

@@ -0,0 +1,194 @@
{
"name": "Afinia",
"version": "02.03.01.10",
"force_update": "0",
"description": "Afinia configurations",
"machine_model_list": [
{
"name": "Afinia H+1(HS)",
"sub_path": "machine/Afinia H+1(HS).json"
}
],
"process_list": [
{
"name": "fdm_process_common",
"sub_path": "process/fdm_process_common.json"
},
{
"name": "fdm_process_afinia_common",
"sub_path": "process/fdm_process_afinia_common.json"
},
{
"name": "fdm_process_afinia_HS_common",
"sub_path": "process/fdm_process_afinia_HS_common.json"
},
{
"name": "0.12mm Fine @Afinia H+1(HS)",
"sub_path": "process/0.12mm Fine @Afinia H+1(HS).json"
},
{
"name": "0.16mm Optimal @Afinia H+1(HS)",
"sub_path": "process/0.16mm Optimal @Afinia H+1(HS).json"
},
{
"name": "0.20mm Standard @Afinia H+1(HS)",
"sub_path": "process/0.20mm Standard @Afinia H+1(HS).json"
},
{
"name": "0.24mm Draft @Afinia H+1(HS)",
"sub_path": "process/0.24mm Draft @Afinia H+1(HS).json"
},
{
"name": "0.28mm Extra Draft @Afinia H+1(HS)",
"sub_path": "process/0.28mm Extra Draft @Afinia H+1(HS).json"
},
{
"name": "fdm_process_afinia_0.18_nozzle_0.6",
"sub_path": "process/fdm_process_afinia_0.18_nozzle_0.6.json"
},
{
"name": "fdm_process_afinia_0.24_nozzle_0.6",
"sub_path": "process/fdm_process_afinia_0.24_nozzle_0.6.json"
},
{
"name": "fdm_process_afinia_0.30_nozzle_0.6",
"sub_path": "process/fdm_process_afinia_0.30_nozzle_0.6.json"
},
{
"name": "fdm_process_afinia_0.36_nozzle_0.6",
"sub_path": "process/fdm_process_afinia_0.36_nozzle_0.6.json"
},
{
"name": "fdm_process_afinia_0.42_nozzle_0.6",
"sub_path": "process/fdm_process_afinia_0.42_nozzle_0.6.json"
},
{
"name": "fdm_process_afinia_0.18_nozzle_0.6_HS",
"sub_path": "process/fdm_process_afinia_0.18_nozzle_0.6_HS.json"
},
{
"name": "fdm_process_afinia_0.24_nozzle_0.6_HS",
"sub_path": "process/fdm_process_afinia_0.24_nozzle_0.6_HS.json"
},
{
"name": "fdm_process_afinia_0.30_nozzle_0.6_HS",
"sub_path": "process/fdm_process_afinia_0.30_nozzle_0.6_HS.json"
},
{
"name": "fdm_process_afinia_0.36_nozzle_0.6_HS",
"sub_path": "process/fdm_process_afinia_0.36_nozzle_0.6_HS.json"
},
{
"name": "fdm_process_afinia_0.42_nozzle_0.6_HS",
"sub_path": "process/fdm_process_afinia_0.42_nozzle_0.6_HS.json"
},
{
"name": "0.18mm Fine @Afinia H+1(HS) 0.6 nozzle",
"sub_path": "process/0.18mm Fine @Afinia H+1(HS) 0.6 nozzle.json"
},
{
"name": "0.24mm Standard @Afinia H+1(HS) 0.6 nozzle",
"sub_path": "process/0.24mm Standard @Afinia H+1(HS) 0.6 nozzle.json"
},
{
"name": "0.30mm Standard @Afinia H+1(HS) 0.6 nozzle",
"sub_path": "process/0.30mm Standard @Afinia H+1(HS) 0.6 nozzle.json"
},
{
"name": "0.30mm Strength @Afinia H+1(HS) 0.6 nozzle",
"sub_path": "process/0.30mm Strength @Afinia H+1(HS) 0.6 nozzle.json"
},
{
"name": "0.36mm Draft @Afinia H+1(HS) 0.6 nozzle",
"sub_path": "process/0.36mm Draft @Afinia H+1(HS) 0.6 nozzle.json"
},
{
"name": "0.42mm Extra Draft @Afinia H+1(HS) 0.6 nozzle",
"sub_path": "process/0.42mm Extra Draft @Afinia H+1(HS) 0.6 nozzle.json"
}
],
"filament_list": [
{
"name": "fdm_filament_common",
"sub_path": "filament/fdm_filament_common.json"
},
{
"name": "fdm_filament_pla",
"sub_path": "filament/fdm_filament_pla.json"
},
{
"name": "fdm_filament_abs",
"sub_path": "filament/fdm_filament_abs.json"
},
{
"name": "fdm_filament_tpu",
"sub_path": "filament/fdm_filament_tpu.json"
},
{
"name": "Afinia PLA",
"sub_path": "filament/Afinia PLA.json"
},
{
"name": "Afinia Value PLA",
"sub_path": "filament/Afinia Value PLA.json"
},
{
"name": "Afinia ABS",
"sub_path": "filament/Afinia ABS.json"
},
{
"name": "Afinia ABS+",
"sub_path": "filament/Afinia ABS+.json"
},
{
"name": "Afinia Value ABS",
"sub_path": "filament/Afinia Value ABS.json"
},
{
"name": "Afinia TPU",
"sub_path": "filament/Afinia TPU.json"
},
{
"name": "Afinia PLA@HS",
"sub_path": "filament/Afinia PLA@HS.json"
},
{
"name": "Afinia Value PLA@HS",
"sub_path": "filament/Afinia Value PLA@HS.json"
},
{
"name": "Afinia ABS@HS",
"sub_path": "filament/Afinia ABS@HS.json"
},
{
"name": "Afinia Value ABS@HS",
"sub_path": "filament/Afinia Value ABS@HS.json"
},
{
"name": "Afinia ABS+@HS",
"sub_path": "filament/Afinia ABS+@HS.json"
},
{
"name": "Afinia TPU@HS",
"sub_path": "filament/Afinia TPU@HS.json"
}
],
"machine_list": [
{
"name": "fdm_machine_common",
"sub_path": "machine/fdm_machine_common.json"
},
{
"name": "fdm_afinia_common",
"sub_path": "machine/fdm_afinia_common.json"
},
{
"name": "Afinia H+1(HS) 0.4 nozzle",
"sub_path": "machine/Afinia H+1(HS) 0.4 nozzle.json"
},
{
"name": "Afinia H+1(HS) 0.6 nozzle",
"sub_path": "machine/Afinia H+1(HS) 0.6 nozzle.json"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

View File

@@ -0,0 +1,37 @@
{
"type": "filament",
"filament_id": "GFB00",
"setting_id": "GFSB00",
"name": "Afinia ABS+",
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_abs",
"filament_flow_ratio": [
"0.95"
],
"filament_cost": [
"24.99"
],
"filament_vendor": [
"Afinia"
],
"fan_max_speed": [
"60"
],
"filament_max_volumetric_speed": [
"16"
],
"nozzle_temperature": [
"275"
],
"nozzle_temperature_initial_layer": [
"275"
],
"slow_down_layer_time": [
"12"
],
"compatible_printers": [
"Afinia H400 Pro 0.4 nozzle",
"Afinia H400 Pro 0.6 nozzle"
]
}

View File

@@ -0,0 +1,37 @@
{
"type": "filament",
"filament_id": "GFB00_01",
"setting_id": "GFSB00",
"name": "Afinia ABS+@HS",
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_abs",
"filament_flow_ratio": [
"0.95"
],
"filament_cost": [
"24.99"
],
"filament_vendor": [
"Afinia"
],
"fan_max_speed": [
"60"
],
"filament_max_volumetric_speed": [
"16"
],
"nozzle_temperature": [
"275"
],
"nozzle_temperature_initial_layer": [
"275"
],
"slow_down_layer_time": [
"12"
],
"compatible_printers": [
"Afinia H+1(HS) 0.4 nozzle",
"Afinia H+1(HS) 0.6 nozzle"
]
}

View File

@@ -0,0 +1,31 @@
{
"type": "filament",
"filament_id": "GFB00",
"setting_id": "GFSB00",
"name": "Afinia ABS",
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_abs",
"filament_flow_ratio": [
"0.95"
],
"filament_cost": [
"24.99"
],
"filament_vendor": [
"Afinia"
],
"fan_max_speed": [
"60"
],
"filament_max_volumetric_speed": [
"16"
],
"slow_down_layer_time": [
"12"
],
"compatible_printers": [
"Afinia H400 Pro 0.4 nozzle",
"Afinia H400 Pro 0.6 nozzle"
]
}

View File

@@ -0,0 +1,31 @@
{
"type": "filament",
"filament_id": "GFB00_01",
"setting_id": "GFSB00",
"name": "Afinia ABS@HS",
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_abs",
"filament_flow_ratio": [
"0.95"
],
"filament_cost": [
"24.99"
],
"filament_vendor": [
"Afinia"
],
"fan_max_speed": [
"60"
],
"filament_max_volumetric_speed": [
"16"
],
"slow_down_layer_time": [
"12"
],
"compatible_printers": [
"Afinia H+1(HS) 0.4 nozzle",
"Afinia H+1(HS) 0.6 nozzle"
]
}

View File

@@ -0,0 +1,34 @@
{
"type": "filament",
"filament_id": "GFA00",
"setting_id": "GFSA00",
"name": "Afinia PLA",
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_pla",
"filament_cost": [
"24.99"
],
"filament_density": [
"1.26"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"21"
],
"filament_vendor": [
"Afinia"
],
"filament_long_retractions_when_cut": [
"1"
],
"filament_retraction_distances_when_cut": [
"18"
],
"compatible_printers": [
"Afinia H400 Pro 0.4 nozzle",
"Afinia H400 Pro 0.6 nozzle"
]
}

View File

@@ -0,0 +1,34 @@
{
"type": "filament",
"filament_id": "GFA00_01",
"setting_id": "GFSA00",
"name": "Afinia PLA@HS",
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_pla",
"filament_cost": [
"24.99"
],
"filament_density": [
"1.26"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"21"
],
"filament_vendor": [
"Afinia"
],
"filament_long_retractions_when_cut": [
"1"
],
"filament_retraction_distances_when_cut": [
"18"
],
"compatible_printers": [
"Afinia H+1(HS) 0.4 nozzle",
"Afinia H+1(HS) 0.6 nozzle"
]
}

View File

@@ -0,0 +1,27 @@
{
"type": "filament",
"name": "Afinia TPU",
"inherits": "fdm_filament_tpu",
"from": "system",
"filament_id": "GFU01",
"instantiation": "true",
"filament_vendor": [
"Afinia"
],
"filament_density": [
"1.22"
],
"nozzle_temperature_initial_layer": [
"230"
],
"filament_cost": [
"41.99"
],
"nozzle_temperature": [
"230"
],
"compatible_printers": [
"Afinia H400 Pro 0.4 nozzle",
"Afinia H400 Pro 0.6 nozzle"
]
}

View File

@@ -0,0 +1,27 @@
{
"type": "filament",
"name": "Afinia TPU@HS",
"inherits": "fdm_filament_tpu",
"from": "system",
"filament_id": "GFU01_01",
"instantiation": "true",
"filament_vendor": [
"Afinia"
],
"filament_density": [
"1.22"
],
"nozzle_temperature_initial_layer": [
"230"
],
"filament_cost": [
"41.99"
],
"nozzle_temperature": [
"230"
],
"compatible_printers": [
"Afinia H+1(HS) 0.4 nozzle",
"Afinia H+1(HS) 0.6 nozzle"
]
}

View File

@@ -0,0 +1,37 @@
{
"type": "filament",
"filament_id": "GFB00",
"setting_id": "GFSB00",
"name": "Afinia Value ABS",
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_abs",
"filament_flow_ratio": [
"0.95"
],
"filament_cost": [
"24.99"
],
"filament_vendor": [
"Afinia"
],
"fan_max_speed": [
"60"
],
"filament_max_volumetric_speed": [
"16"
],
"nozzle_temperature": [
"245"
],
"nozzle_temperature_initial_layer": [
"245"
],
"slow_down_layer_time": [
"12"
],
"compatible_printers": [
"Afinia H400 Pro 0.4 nozzle",
"Afinia H400 Pro 0.6 nozzle"
]
}

View File

@@ -0,0 +1,37 @@
{
"type": "filament",
"filament_id": "GFB00_01",
"setting_id": "GFSB00",
"name": "Afinia Value ABS@HS",
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_abs",
"filament_flow_ratio": [
"0.95"
],
"filament_cost": [
"24.99"
],
"filament_vendor": [
"Afinia"
],
"fan_max_speed": [
"60"
],
"filament_max_volumetric_speed": [
"16"
],
"nozzle_temperature": [
"245"
],
"nozzle_temperature_initial_layer": [
"245"
],
"slow_down_layer_time": [
"12"
],
"compatible_printers": [
"Afinia H+1(HS) 0.4 nozzle",
"Afinia H+1(HS) 0.6 nozzle"
]
}

View File

@@ -0,0 +1,40 @@
{
"type": "filament",
"filament_id": "GFA00",
"setting_id": "GFSA00",
"name": "Afinia Value PLA",
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_pla",
"filament_cost": [
"24.99"
],
"filament_density": [
"1.26"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"21"
],
"filament_vendor": [
"Afinia"
],
"filament_long_retractions_when_cut": [
"1"
],
"filament_retraction_distances_when_cut": [
"18"
],
"nozzle_temperature": [
"190"
],
"nozzle_temperature_initial_layer": [
"190"
],
"compatible_printers": [
"Afinia H400 Pro 0.4 nozzle",
"Afinia H400 Pro 0.6 nozzle"
]
}

View File

@@ -0,0 +1,40 @@
{
"type": "filament",
"filament_id": "GFA00_01",
"setting_id": "GFSA00",
"name": "Afinia Value PLA@HS",
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_pla",
"filament_cost": [
"24.99"
],
"filament_density": [
"1.26"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"21"
],
"filament_vendor": [
"Afinia"
],
"filament_long_retractions_when_cut": [
"1"
],
"filament_retraction_distances_when_cut": [
"18"
],
"nozzle_temperature": [
"190"
],
"nozzle_temperature_initial_layer": [
"190"
],
"compatible_printers": [
"Afinia H+1(HS) 0.4 nozzle",
"Afinia H+1(HS) 0.6 nozzle"
]
}

View File

@@ -0,0 +1,82 @@
{
"type": "filament",
"name": "fdm_filament_abs",
"inherits": "fdm_filament_common",
"from": "system",
"instantiation": "false",
"activate_air_filtration": [
"0"
],
"cool_plate_temp": [
"0"
],
"cool_plate_temp_initial_layer": [
"0"
],
"eng_plate_temp": [
"90"
],
"eng_plate_temp_initial_layer": [
"90"
],
"fan_cooling_layer_time": [
"30"
],
"fan_max_speed": [
"80"
],
"fan_min_speed": [
"10"
],
"filament_cost": [
"20"
],
"filament_density": [
"1.04"
],
"filament_max_volumetric_speed": [
"28.6"
],
"filament_type": [
"ABS"
],
"hot_plate_temp": [
"90"
],
"hot_plate_temp_initial_layer": [
"90"
],
"nozzle_temperature": [
"270"
],
"nozzle_temperature_initial_layer": [
"270"
],
"nozzle_temperature_range_high": [
"280"
],
"nozzle_temperature_range_low": [
"240"
],
"overhang_fan_speed": [
"80"
],
"overhang_fan_threshold": [
"25%"
],
"reduce_fan_stop_start_freq": [
"1"
],
"slow_down_layer_time": [
"3"
],
"slow_down_min_speed": [
"20"
],
"textured_plate_temp": [
"90"
],
"textured_plate_temp_initial_layer": [
"90"
]
}

View File

@@ -0,0 +1,166 @@
{
"type": "filament",
"name": "fdm_filament_common",
"from": "system",
"instantiation": "false",
"activate_air_filtration": [
"0"
],
"chamber_temperatures": [
"0"
],
"close_fan_the_first_x_layers": [
"3"
],
"complete_print_exhaust_fan_speed": [
"70"
],
"cool_plate_temp": [
"60"
],
"cool_plate_temp_initial_layer": [
"60"
],
"during_print_exhaust_fan_speed": [
"70"
],
"eng_plate_temp": [
"60"
],
"eng_plate_temp_initial_layer": [
"60"
],
"fan_cooling_layer_time": [
"60"
],
"fan_max_speed": [
"100"
],
"fan_min_speed": [
"35"
],
"filament_cost": [
"0"
],
"filament_density": [
"0"
],
"filament_deretraction_speed": [
"nil"
],
"filament_diameter": [
"1.75"
],
"filament_flow_ratio": [
"1"
],
"filament_is_support": [
"0"
],
"filament_long_retractions_when_cut": [
"nil"
],
"filament_max_volumetric_speed": [
"0"
],
"filament_minimal_purge_on_wipe_tower": [
"15"
],
"filament_retract_before_wipe": [
"nil"
],
"filament_retract_restart_extra": [
"nil"
],
"filament_retract_when_changing_layer": [
"nil"
],
"filament_retraction_distances_when_cut": [
"nil"
],
"filament_retraction_length": [
"nil"
],
"filament_retraction_minimum_travel": [
"nil"
],
"filament_retraction_speed": [
"nil"
],
"filament_settings_id": [
""
],
"filament_soluble": [
"0"
],
"filament_type": [
"PLA"
],
"filament_vendor": [
"Generic"
],
"filament_wipe": [
"nil"
],
"filament_wipe_distance": [
"nil"
],
"filament_z_hop": [
"nil"
],
"filament_z_hop_types": [
"nil"
],
"full_fan_speed_layer": [
"0"
],
"hot_plate_temp": [
"60"
],
"hot_plate_temp_initial_layer": [
"60"
],
"nozzle_temperature": [
"200"
],
"nozzle_temperature_initial_layer": [
"200"
],
"overhang_fan_speed": [
"100"
],
"overhang_fan_threshold": [
"95%"
],
"reduce_fan_stop_start_freq": [
"0"
],
"required_nozzle_HRC": [
"3"
],
"slow_down_for_layer_cooling": [
"1"
],
"slow_down_layer_time": [
"8"
],
"slow_down_min_speed": [
"10"
],
"temperature_vitrification": [
"100"
],
"textured_plate_temp": [
"60"
],
"textured_plate_temp_initial_layer": [
"60"
],
"compatible_printers": [],
"filament_start_gcode": [
"; Filament gcode\n;{if activate_air_filtration[current_extruder] && support_air_filtration}\n;M106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n;{endif}"
],
"filament_end_gcode": [
"; filament end gcode \n;M106 P3 S0\n"
]
}

View File

@@ -0,0 +1,82 @@
{
"type": "filament",
"name": "fdm_filament_pla",
"inherits": "fdm_filament_common",
"from": "system",
"instantiation": "false",
"fan_cooling_layer_time": [
"100"
],
"filament_max_volumetric_speed": [
"12"
],
"filament_density": [
"1.24"
],
"filament_cost": [
"20"
],
"cool_plate_temp": [
"35"
],
"eng_plate_temp": [
"0"
],
"hot_plate_temp": [
"60"
],
"textured_plate_temp": [
"60"
],
"cool_plate_temp_initial_layer": [
"35"
],
"eng_plate_temp_initial_layer": [
"0"
],
"hot_plate_temp_initial_layer": [
"60"
],
"textured_plate_temp_initial_layer": [
"60"
],
"nozzle_temperature_initial_layer": [
"220"
],
"reduce_fan_stop_start_freq": [
"1"
],
"fan_min_speed": [
"100"
],
"overhang_fan_threshold": [
"50%"
],
"close_fan_the_first_x_layers": [
"1"
],
"nozzle_temperature": [
"220"
],
"temperature_vitrification": [
"45"
],
"nozzle_temperature_range_low": [
"190"
],
"nozzle_temperature_range_high": [
"240"
],
"slow_down_min_speed": [
"20"
],
"slow_down_layer_time": [
"4"
],
"additional_cooling_fan_speed": [
"70"
],
"filament_start_gcode": [
"; filament start gcode\n;{if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S255\n;{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S180\n;{endif}\n\n;{if activate_air_filtration[current_extruder] && support_air_filtration}\n;M106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n;{endif}"
]
}

View File

@@ -0,0 +1,79 @@
{
"type": "filament",
"name": "fdm_filament_tpu",
"inherits": "fdm_filament_common",
"from": "system",
"instantiation": "false",
"additional_cooling_fan_speed": [
"70"
],
"close_fan_the_first_x_layers": [
"1"
],
"cool_plate_temp": [
"30"
],
"cool_plate_temp_initial_layer": [
"30"
],
"eng_plate_temp": [
"30"
],
"eng_plate_temp_initial_layer": [
"30"
],
"fan_cooling_layer_time": [
"100"
],
"fan_min_speed": [
"100"
],
"filament_cost": [
"20"
],
"filament_density": [
"1.24"
],
"filament_max_volumetric_speed": [
"8"
],
"filament_retraction_length": [
"2.0"
],
"filament_type": [
"TPU"
],
"hot_plate_temp": [
"35"
],
"hot_plate_temp_initial_layer": [
"35"
],
"nozzle_temperature": [
"240"
],
"nozzle_temperature_initial_layer": [
"240"
],
"nozzle_temperature_range_high": [
"250"
],
"nozzle_temperature_range_low": [
"200"
],
"reduce_fan_stop_start_freq": [
"1"
],
"temperature_vitrification": [
"30"
],
"textured_plate_temp": [
"35"
],
"textured_plate_temp_initial_layer": [
"35"
],
"filament_start_gcode": [
"; filament start gcode\n{if (bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{elsif(bed_temperature[current_extruder] >30)||(bed_temperature_initial_layer[current_extruder] >30)}M106 P3 S180\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}"
]
}

View File

@@ -0,0 +1,21 @@
{
"type": "machine",
"setting_id": "GM001",
"name": "Afinia H+1(HS) 0.4 nozzle",
"from": "system",
"instantiation": "true",
"inherits": "fdm_afinia_common",
"printer_model": "Afinia H+1(HS)",
"default_print_profile": "0.20mm Standard @Afinia H+1(HS)",
"nozzle_diameter": [
"0.4"
],
"printer_variant": "0.4",
"printable_area": [
"0x0",
"207x0",
"207x255",
"0x255"
],
"printable_height": "230"
}

View File

@@ -0,0 +1,26 @@
{
"type": "machine",
"setting_id": "GM001",
"name": "Afinia H+1(HS) 0.6 nozzle",
"from": "system",
"instantiation": "true",
"inherits": "Afinia H+1(HS) 0.4 nozzle",
"printer_model": "Afinia H+1(HS)",
"default_print_profile": "0.30mm Strength @Afinia H+1(HS) 0.6 nozzle",
"nozzle_diameter": [
"0.6"
],
"printer_variant": "0.6",
"max_layer_height": [
"0.42"
],
"min_layer_height": [
"0.18"
],
"retraction_length": [
"1.4"
],
"retraction_minimum_travel": [
"3"
]
}

View File

@@ -0,0 +1,12 @@
{
"type": "machine_model",
"name": "Afinia H+1(HS)",
"model_id": "my_afinia_h_1_hs_01",
"nozzle_diameter": "0.4;0.6",
"machine_tech": "FFF",
"family": "Afinia",
"bed_model": "",
"bed_texture": "",
"hotend_model": "",
"default_materials": "Afinia ABS;Afinia PLA"
}

View File

@@ -0,0 +1,60 @@
{
"type": "machine",
"name": "fdm_afinia_common",
"from": "system",
"instantiation": "false",
"inherits": "fdm_machine_common",
"gcode_flavor": "klipper",
"machine_max_acceleration_e": ["5000", "5000"],
"machine_max_acceleration_extruding": ["20000", "20000"],
"machine_max_acceleration_retracting": ["5000", "5000"],
"machine_max_acceleration_travel": ["20000", "20000"],
"machine_max_acceleration_x": ["20000", "20000"],
"machine_max_acceleration_y": ["20000", "20000"],
"machine_max_acceleration_z": ["500", "200"],
"machine_max_speed_e": ["25", "25"],
"machine_max_speed_x": ["500", "200"],
"machine_max_speed_y": ["500", "200"],
"machine_max_speed_z": ["12", "12"],
"machine_max_jerk_e": ["2.5", "2.5"],
"machine_max_jerk_x": ["9", "9"],
"machine_max_jerk_y": ["9", "9"],
"machine_max_jerk_z": ["0.2", "0.4"],
"machine_min_extruding_rate": ["0", "0"],
"machine_min_travel_rate": ["0", "0"],
"max_layer_height": ["0.32"],
"min_layer_height": ["0.08"],
"printable_height": "250",
"extruder_clearance_radius": "65",
"extruder_clearance_height_to_rod": "36",
"extruder_clearance_height_to_lid": "140",
"printer_settings_id": "",
"printer_technology": "FFF",
"printer_variant": "0.4",
"retraction_minimum_travel": ["1"],
"retract_before_wipe": ["70%"],
"retract_when_changing_layer": ["1"],
"retraction_length": ["0.8"],
"retract_length_toolchange": ["2"],
"z_hop": ["0.4"],
"retract_restart_extra": ["0"],
"retract_restart_extra_toolchange": ["0"],
"retraction_speed": ["30"],
"deretraction_speed": ["30"],
"z_hop_types": "Normal Lift",
"silent_mode": "0",
"single_extruder_multi_material": "1",
"change_filament_gcode": "",
"wipe": ["1"],
"default_filament_profile": [""],
"default_print_profile": "0.20mm Standard @Afinia H+1(HS)",
"bed_exclude_area": ["0x0"],
"machine_start_gcode": ";M190 S[bed_temperature_initial_layer_single]\n;M109 S[nozzle_temperature_initial_layer]\nPRINT_START EXTRUDER=[nozzle_temperature_initial_layer] BED=[bed_temperature_initial_layer_single]\n",
"machine_end_gcode": "PRINT_END",
"layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]",
"before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n",
"machine_pause_gcode": "PAUSE",
"scan_first_layer": "0",
"nozzle_type": "undefine",
"auxiliary_fan": "0"
}

View File

@@ -0,0 +1,119 @@
{
"type": "machine",
"name": "fdm_machine_common",
"from": "system",
"instantiation": "false",
"printer_technology": "FFF",
"deretraction_speed": [
"40"
],
"extruder_colour": [
"#FCE94F"
],
"extruder_offset": [
"0x0"
],
"gcode_flavor": "marlin",
"silent_mode": "0",
"machine_max_acceleration_e": [
"5000"
],
"machine_max_acceleration_extruding": [
"10000"
],
"machine_max_acceleration_retracting": [
"1000"
],
"machine_max_acceleration_x": [
"10000"
],
"machine_max_acceleration_y": [
"10000"
],
"machine_max_acceleration_z": [
"500"
],
"machine_max_speed_e": [
"60"
],
"machine_max_speed_x": [
"500"
],
"machine_max_speed_y": [
"500"
],
"machine_max_speed_z": [
"10"
],
"machine_max_jerk_e": [
"5"
],
"machine_max_jerk_x": [
"8"
],
"machine_max_jerk_y": [
"8"
],
"machine_max_jerk_z": [
"0.4"
],
"machine_min_extruding_rate": [
"0"
],
"machine_min_travel_rate": [
"0"
],
"max_layer_height": [
"0.32"
],
"min_layer_height": [
"0.08"
],
"printable_height": "250",
"extruder_clearance_radius": "65",
"extruder_clearance_height_to_rod": "36",
"extruder_clearance_height_to_lid": "140",
"nozzle_diameter": [
"0.4"
],
"printer_settings_id": "",
"printer_variant": "0.4",
"retraction_minimum_travel": [
"2"
],
"retract_before_wipe": [
"70%"
],
"retract_when_changing_layer": [
"1"
],
"retraction_length": [
"5"
],
"retract_length_toolchange": [
"1"
],
"z_hop": [
"0"
],
"retract_restart_extra": [
"0"
],
"retract_restart_extra_toolchange": [
"0"
],
"retraction_speed": [
"60"
],
"single_extruder_multi_material": "1",
"change_filament_gcode": "",
"wipe": [
"1"
],
"default_print_profile": "",
"machine_start_gcode": "G0 Z20 F9000\nG92 E0; G1 E-10 F1200\nG28\nM970 Q1 A10 B10 C130 K0\nM970 Q1 A10 B131 C250 K1\nM974 Q1 S1 P0\nM970 Q0 A10 B10 C130 H20 K0\nM970 Q0 A10 B131 C250 K1\nM974 Q0 S1 P0\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nG29 ;Home\nG90;\nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position\nM109 S205;\nG1 X10.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X10.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder \nG1 X110 Y110 Z2.0 F3000 ;Move Z Axis up",
"machine_end_gcode": "M400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-4.0 F3600; retract \nG91\nG1 Z3;\nM104 S0 ; turn off hotend\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nG90 \nG0 X110 Y200 F3600 \nprint_end",
"layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]",
"before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n",
"machine_pause_gcode": "M601"
}

View File

@@ -0,0 +1,30 @@
{
"type": "process",
"setting_id": "GP004",
"name": "0.12mm Fine @Afinia H+1(HS)",
"from": "system",
"instantiation": "true",
"inherits": "fdm_process_afinia_HS_common",
"layer_height": "0.12",
"bottom_shell_layers": "5",
"elefant_foot_compensation": "0.15",
"top_shell_layers": "5",
"top_shell_thickness": "0.6",
"bridge_flow": "1",
"initial_layer_speed": "50",
"initial_layer_infill_speed": "105",
"outer_wall_speed": "150",
"inner_wall_speed": "200",
"sparse_infill_speed": "200",
"internal_solid_infill_speed": "200",
"gap_infill_speed": "150",
"overhang_1_4_speed": "60",
"overhang_2_4_speed": "30",
"overhang_3_4_speed": "10",
"support_threshold_angle": "20",
"support_top_z_distance": "0.12",
"support_bottom_z_distance": "0.12",
"compatible_printers": [
"Afinia H+1(HS) 0.4 nozzle"
]
}

View File

@@ -0,0 +1,30 @@
{
"type": "process",
"setting_id": "GP004",
"name": "0.16mm Optimal @Afinia H+1(HS)",
"from": "system",
"instantiation": "true",
"inherits": "fdm_process_afinia_HS_common",
"layer_height": "0.16",
"elefant_foot_compensation": "0.15",
"bottom_shell_layers": "4",
"top_shell_layers": "6",
"top_shell_thickness": "1.0",
"bridge_flow": "1",
"initial_layer_speed": "50",
"initial_layer_infill_speed": "105",
"outer_wall_speed": "150",
"inner_wall_speed": "200",
"sparse_infill_speed": "200",
"internal_solid_infill_speed": "200",
"gap_infill_speed": "150",
"overhang_1_4_speed": "60",
"overhang_2_4_speed": "30",
"overhang_3_4_speed": "10",
"support_threshold_angle": "25",
"support_top_z_distance": "0.16",
"support_bottom_z_distance": "0.16",
"compatible_printers": [
"Afinia H+1(HS) 0.4 nozzle"
]
}

View File

@@ -0,0 +1,15 @@
{
"type": "process",
"name": "0.18mm Fine @Afinia H+1(HS) 0.6 nozzle",
"inherits": "fdm_process_afinia_0.18_nozzle_0.6_HS",
"from": "system",
"setting_id": "GP021",
"instantiation": "true",
"description": "It has a smaller layer height and results in smoother surface and higher printing quality.",
"elefant_foot_compensation": "0.15",
"smooth_coefficient": "150",
"overhang_totally_speed": "50",
"compatible_printers": [
"Afinia H+1(HS) 0.6 nozzle"
]
}

View File

@@ -0,0 +1,22 @@
{
"type": "process",
"setting_id": "GP004",
"name": "0.20mm Standard @Afinia H+1(HS)",
"from": "system",
"inherits": "fdm_process_afinia_HS_common",
"instantiation": "true",
"elefant_foot_compensation": "0.15",
"top_shell_thickness": "1.0",
"bridge_flow": "1",
"initial_layer_speed": "50",
"initial_layer_infill_speed": "105",
"outer_wall_speed": "150",
"inner_wall_speed": "200",
"sparse_infill_speed": "200",
"internal_solid_infill_speed": "200",
"gap_infill_speed": "150",
"top_shell_layers": "5",
"compatible_printers": [
"Afinia H+1(HS) 0.4 nozzle"
]
}

View File

@@ -0,0 +1,25 @@
{
"type": "process",
"setting_id": "GP004",
"name": "0.24mm Draft @Afinia H+1(HS)",
"from": "system",
"instantiation": "true",
"inherits": "fdm_process_afinia_HS_common",
"layer_height": "0.24",
"elefant_foot_compensation": "0.15",
"top_surface_line_width": "0.45",
"top_shell_thickness": "1.0",
"bridge_flow": "1",
"initial_layer_speed": "50",
"initial_layer_infill_speed": "105",
"outer_wall_speed": "150",
"inner_wall_speed": "200",
"sparse_infill_speed": "200",
"internal_solid_infill_speed": "200",
"gap_infill_speed": "150",
"support_threshold_angle": "35",
"top_shell_layers": "4",
"compatible_printers": [
"Afinia H+1(HS) 0.4 nozzle"
]
}

View File

@@ -0,0 +1,15 @@
{
"type": "process",
"name": "0.24mm Standard @Afinia H+1(HS) 0.6 nozzle",
"inherits": "fdm_process_afinia_0.24_nozzle_0.6_HS",
"from": "system",
"setting_id": "GP022",
"instantiation": "true",
"description": "It has a balanced layer height for good quality and reasonable printing time.",
"elefant_foot_compensation": "0.15",
"smooth_coefficient": "150",
"overhang_totally_speed": "50",
"compatible_printers": [
"Afinia H+1(HS) 0.6 nozzle"
]
}

View File

@@ -0,0 +1,25 @@
{
"type": "process",
"setting_id": "GP004",
"name": "0.28mm Extra Draft @Afinia H+1(HS)",
"from": "system",
"instantiation": "true",
"inherits": "fdm_process_afinia_HS_common",
"layer_height": "0.28",
"elefant_foot_compensation": "0.15",
"top_surface_line_width": "0.45",
"top_shell_thickness": "1.0",
"bridge_flow": "1",
"initial_layer_speed": "50",
"initial_layer_infill_speed": "105",
"outer_wall_speed": "200",
"inner_wall_speed": "200",
"sparse_infill_speed": "200",
"internal_solid_infill_speed": "200",
"gap_infill_speed": "200",
"support_threshold_angle": "40",
"top_shell_layers": "4",
"compatible_printers": [
"Afinia H+1(HS) 0.4 nozzle"
]
}

View File

@@ -0,0 +1,15 @@
{
"type": "process",
"name": "0.30mm Standard @Afinia H+1(HS) 0.6 nozzle",
"inherits": "fdm_process_afinia_0.30_nozzle_0.6_HS",
"from": "system",
"setting_id": "GP023",
"instantiation": "true",
"description": "It has a big layer height, and results in apparent layer lines and ordinary printing quality and printing time.",
"elefant_foot_compensation": "0.15",
"smooth_coefficient": "150",
"overhang_totally_speed": "50",
"compatible_printers": [
"Afinia H+1(HS) 0.6 nozzle"
]
}

View File

@@ -0,0 +1,17 @@
{
"type": "process",
"name": "0.30mm Strength @Afinia H+1(HS) 0.6 nozzle",
"inherits": "fdm_process_afinia_0.30_nozzle_0.6_HS",
"from": "system",
"setting_id": "GP024",
"instantiation": "true",
"description": "It has a big layer height with optimized settings for stronger parts.",
"elefant_foot_compensation": "0.15",
"smooth_coefficient": "150",
"overhang_totally_speed": "50",
"sparse_infill_density": "25%",
"wall_loops": "3",
"compatible_printers": [
"Afinia H+1(HS) 0.6 nozzle"
]
}

View File

@@ -0,0 +1,15 @@
{
"type": "process",
"name": "0.36mm Draft @Afinia H+1(HS) 0.6 nozzle",
"inherits": "fdm_process_afinia_0.36_nozzle_0.6_HS",
"from": "system",
"setting_id": "GP025",
"instantiation": "true",
"description": "It has a bigger layer height for faster printing but with more visible layer lines.",
"elefant_foot_compensation": "0.15",
"smooth_coefficient": "150",
"overhang_totally_speed": "50",
"compatible_printers": [
"Afinia H+1(HS) 0.6 nozzle"
]
}

View File

@@ -0,0 +1,15 @@
{
"type": "process",
"name": "0.42mm Extra Draft @Afinia H+1(HS) 0.6 nozzle",
"inherits": "fdm_process_afinia_0.42_nozzle_0.6_HS",
"from": "system",
"setting_id": "GP026",
"instantiation": "true",
"description": "It has the biggest layer height for fastest printing but with very visible layer lines.",
"elefant_foot_compensation": "0.15",
"smooth_coefficient": "150",
"overhang_totally_speed": "50",
"compatible_printers": [
"Afinia H+1(HS) 0.6 nozzle"
]
}

View File

@@ -0,0 +1,26 @@
{
"type": "process",
"name": "fdm_process_afinia_0.18_nozzle_0.6",
"inherits": "fdm_process_afinia_common",
"from": "system",
"instantiation": "false",
"layer_height": "0.18",
"initial_layer_print_height": "0.18",
"bridge_flow": "1",
"line_width": "0.62",
"outer_wall_line_width": "0.62",
"ironing_inset": "0.31",
"initial_layer_line_width": "0.62",
"sparse_infill_line_width": "0.62",
"inner_wall_line_width": "0.62",
"internal_solid_infill_line_width": "0.62",
"support_line_width": "0.62",
"top_surface_line_width": "0.62",
"initial_layer_speed": "35",
"initial_layer_infill_speed": "55",
"sparse_infill_speed": "100",
"top_surface_speed": "120",
"bridge_speed": "30",
"overhang_3_4_speed": "15",
"tree_support_tip_diameter": "1.2"
}

View File

@@ -0,0 +1,26 @@
{
"type": "process",
"name": "fdm_process_afinia_0.18_nozzle_0.6_HS",
"inherits": "fdm_process_afinia_HS_common",
"from": "system",
"instantiation": "false",
"layer_height": "0.18",
"initial_layer_print_height": "0.18",
"bridge_flow": "1",
"line_width": "0.62",
"outer_wall_line_width": "0.62",
"ironing_inset": "0.31",
"initial_layer_line_width": "0.62",
"sparse_infill_line_width": "0.62",
"inner_wall_line_width": "0.62",
"internal_solid_infill_line_width": "0.62",
"support_line_width": "0.62",
"top_surface_line_width": "0.62",
"initial_layer_speed": "35",
"initial_layer_infill_speed": "55",
"sparse_infill_speed": "100",
"top_surface_speed": "120",
"bridge_speed": "30",
"overhang_3_4_speed": "15",
"tree_support_tip_diameter": "1.2"
}

View File

@@ -0,0 +1,26 @@
{
"type": "process",
"name": "fdm_process_afinia_0.24_nozzle_0.6",
"inherits": "fdm_process_afinia_common",
"from": "system",
"instantiation": "false",
"layer_height": "0.24",
"initial_layer_print_height": "0.24",
"bridge_flow": "1",
"line_width": "0.62",
"outer_wall_line_width": "0.62",
"ironing_inset": "0.31",
"initial_layer_line_width": "0.62",
"sparse_infill_line_width": "0.62",
"inner_wall_line_width": "0.62",
"internal_solid_infill_line_width": "0.62",
"support_line_width": "0.62",
"top_surface_line_width": "0.62",
"initial_layer_speed": "35",
"initial_layer_infill_speed": "55",
"sparse_infill_speed": "100",
"top_surface_speed": "130",
"bridge_speed": "30",
"overhang_3_4_speed": "15",
"tree_support_tip_diameter": "1.2"
}

View File

@@ -0,0 +1,26 @@
{
"type": "process",
"name": "fdm_process_afinia_0.24_nozzle_0.6_HS",
"inherits": "fdm_process_afinia_HS_common",
"from": "system",
"instantiation": "false",
"layer_height": "0.24",
"initial_layer_print_height": "0.24",
"bridge_flow": "1",
"line_width": "0.62",
"outer_wall_line_width": "0.62",
"ironing_inset": "0.31",
"initial_layer_line_width": "0.62",
"sparse_infill_line_width": "0.62",
"inner_wall_line_width": "0.62",
"internal_solid_infill_line_width": "0.62",
"support_line_width": "0.62",
"top_surface_line_width": "0.62",
"initial_layer_speed": "35",
"initial_layer_infill_speed": "55",
"sparse_infill_speed": "100",
"top_surface_speed": "130",
"bridge_speed": "30",
"overhang_3_4_speed": "15",
"tree_support_tip_diameter": "1.2"
}

View File

@@ -0,0 +1,26 @@
{
"type": "process",
"name": "fdm_process_afinia_0.30_nozzle_0.6",
"inherits": "fdm_process_afinia_common",
"from": "system",
"instantiation": "false",
"layer_height": "0.3",
"initial_layer_print_height": "0.3",
"bridge_flow": "1",
"line_width": "0.62",
"outer_wall_line_width": "0.62",
"ironing_inset": "0.31",
"initial_layer_line_width": "0.62",
"sparse_infill_line_width": "0.62",
"inner_wall_line_width": "0.62",
"internal_solid_infill_line_width": "0.62",
"support_line_width": "0.62",
"top_surface_line_width": "0.62",
"initial_layer_speed": "35",
"initial_layer_infill_speed": "55",
"sparse_infill_speed": "100",
"top_surface_speed": "150",
"bridge_speed": "30",
"overhang_3_4_speed": "15",
"tree_support_tip_diameter": "1.2"
}

View File

@@ -0,0 +1,26 @@
{
"type": "process",
"name": "fdm_process_afinia_0.30_nozzle_0.6_HS",
"inherits": "fdm_process_afinia_HS_common",
"from": "system",
"instantiation": "false",
"layer_height": "0.3",
"initial_layer_print_height": "0.3",
"bridge_flow": "1",
"line_width": "0.62",
"outer_wall_line_width": "0.62",
"ironing_inset": "0.31",
"initial_layer_line_width": "0.62",
"sparse_infill_line_width": "0.62",
"inner_wall_line_width": "0.62",
"internal_solid_infill_line_width": "0.62",
"support_line_width": "0.62",
"top_surface_line_width": "0.62",
"initial_layer_speed": "35",
"initial_layer_infill_speed": "55",
"sparse_infill_speed": "100",
"top_surface_speed": "150",
"bridge_speed": "30",
"overhang_3_4_speed": "15",
"tree_support_tip_diameter": "1.2"
}

View File

@@ -0,0 +1,26 @@
{
"type": "process",
"name": "fdm_process_afinia_0.36_nozzle_0.6",
"inherits": "fdm_process_afinia_common",
"from": "system",
"instantiation": "false",
"layer_height": "0.36",
"initial_layer_print_height": "0.36",
"bridge_flow": "1",
"line_width": "0.62",
"outer_wall_line_width": "0.62",
"ironing_inset": "0.31",
"initial_layer_line_width": "0.62",
"sparse_infill_line_width": "0.62",
"inner_wall_line_width": "0.62",
"internal_solid_infill_line_width": "0.62",
"support_line_width": "0.62",
"top_surface_line_width": "0.62",
"initial_layer_speed": "35",
"initial_layer_infill_speed": "55",
"sparse_infill_speed": "100",
"top_surface_speed": "140",
"bridge_speed": "30",
"overhang_3_4_speed": "15",
"tree_support_tip_diameter": "1.2"
}

View File

@@ -0,0 +1,26 @@
{
"type": "process",
"name": "fdm_process_afinia_0.36_nozzle_0.6_HS",
"inherits": "fdm_process_afinia_HS_common",
"from": "system",
"instantiation": "false",
"layer_height": "0.36",
"initial_layer_print_height": "0.36",
"bridge_flow": "1",
"line_width": "0.62",
"outer_wall_line_width": "0.62",
"ironing_inset": "0.31",
"initial_layer_line_width": "0.62",
"sparse_infill_line_width": "0.62",
"inner_wall_line_width": "0.62",
"internal_solid_infill_line_width": "0.62",
"support_line_width": "0.62",
"top_surface_line_width": "0.62",
"initial_layer_speed": "35",
"initial_layer_infill_speed": "55",
"sparse_infill_speed": "100",
"top_surface_speed": "140",
"bridge_speed": "30",
"overhang_3_4_speed": "15",
"tree_support_tip_diameter": "1.2"
}

View File

@@ -0,0 +1,26 @@
{
"type": "process",
"name": "fdm_process_afinia_0.42_nozzle_0.6",
"inherits": "fdm_process_afinia_common",
"from": "system",
"instantiation": "false",
"layer_height": "0.42",
"initial_layer_print_height": "0.42",
"bridge_flow": "1",
"line_width": "0.62",
"outer_wall_line_width": "0.62",
"ironing_inset": "0.31",
"initial_layer_line_width": "0.62",
"sparse_infill_line_width": "0.62",
"inner_wall_line_width": "0.62",
"internal_solid_infill_line_width": "0.62",
"support_line_width": "0.62",
"top_surface_line_width": "0.62",
"initial_layer_speed": "35",
"initial_layer_infill_speed": "55",
"sparse_infill_speed": "100",
"top_surface_speed": "130",
"bridge_speed": "30",
"overhang_3_4_speed": "15",
"tree_support_tip_diameter": "1.2"
}

View File

@@ -0,0 +1,26 @@
{
"type": "process",
"name": "fdm_process_afinia_0.42_nozzle_0.6_HS",
"inherits": "fdm_process_afinia_HS_common",
"from": "system",
"instantiation": "false",
"layer_height": "0.42",
"initial_layer_print_height": "0.42",
"bridge_flow": "1",
"line_width": "0.62",
"outer_wall_line_width": "0.62",
"ironing_inset": "0.31",
"initial_layer_line_width": "0.62",
"sparse_infill_line_width": "0.62",
"inner_wall_line_width": "0.62",
"internal_solid_infill_line_width": "0.62",
"support_line_width": "0.62",
"top_surface_line_width": "0.62",
"initial_layer_speed": "35",
"initial_layer_infill_speed": "55",
"sparse_infill_speed": "100",
"top_surface_speed": "130",
"bridge_speed": "30",
"overhang_3_4_speed": "15",
"tree_support_tip_diameter": "1.2"
}

View File

@@ -0,0 +1,15 @@
{
"type": "process",
"name": "fdm_process_afinia_HS_common",
"inherits": "fdm_process_afinia_common",
"from": "system",
"instantiation": "false",
"default_acceleration": "4000",
"travel_acceleration": "4000",
"outer_wall_acceleration": "2500",
"inner_wall_acceleration": "3000",
"initial_layer_acceleration": "500",
"top_surface_acceleration": "2000",
"travel_speed": "200",
"compatible_printers": []
}

View File

@@ -0,0 +1,79 @@
{
"type": "process",
"name": "fdm_process_afinia_common",
"inherits": "fdm_process_common",
"from": "system",
"instantiation": "false",
"max_travel_detour_distance": "0",
"bottom_surface_pattern": "monotonic",
"bottom_shell_layers": "3",
"bottom_shell_thickness": "0",
"bridge_speed": "50",
"brim_object_gap": "0.1",
"compatible_printers_condition": "",
"draft_shield": "disabled",
"elefant_foot_compensation": "0",
"enable_arc_fitting": "1",
"default_acceleration": "6000",
"travel_acceleration": "6000",
"outer_wall_acceleration": "3000",
"inner_wall_acceleration": "5000",
"top_surface_acceleration": "2000",
"initial_layer_acceleration": "500",
"line_width": "0.42",
"internal_bridge_support_thickness": "0.8",
"initial_layer_line_width": "0.5",
"initial_layer_speed": "50",
"initial_layer_infill_speed": "90",
"outer_wall_speed": "120",
"inner_wall_speed": "160",
"gap_infill_speed": "50",
"sparse_infill_speed": "250",
"ironing_flow": "10%",
"ironing_spacing": "0.15",
"ironing_speed": "30",
"ironing_type": "no ironing",
"layer_height": "0.2",
"reduce_infill_retraction": "1",
"filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode",
"detect_overhang_wall": "1",
"overhang_1_4_speed": "0",
"overhang_2_4_speed": "50",
"overhang_3_4_speed": "30",
"overhang_4_4_speed": "10",
"only_one_wall_top": "1",
"seam_position": "aligned",
"skirt_height": "1",
"skirt_loops": "0",
"minimum_sparse_infill_area": "15",
"internal_solid_infill_line_width": "0.42",
"internal_solid_infill_speed": "180",
"resolution": "0.012",
"support_type": "normal(auto)",
"support_style": "default",
"support_top_z_distance": "0.2",
"support_bottom_z_distance": "0.2",
"support_interface_bottom_layers": "2",
"support_interface_spacing": "0.5",
"support_expansion": "0",
"support_base_pattern_spacing": "2.5",
"support_speed": "200",
"support_interface_speed": "80",
"support_threshold_angle": "30",
"support_object_xy_distance": "0.35",
"tree_support_branch_diameter": "2",
"tree_support_branch_angle": "45",
"tree_support_wall_count": "0",
"top_surface_pattern": "monotonicline",
"top_surface_speed": "200",
"top_shell_layers": "3",
"top_shell_thickness": "0.8",
"travel_speed": "500",
"enable_prime_tower": "1",
"wipe_tower_no_sparse_layers": "0",
"prime_tower_width": "35",
"wall_generator": "classic",
"exclude_object": "1",
"wall_infill_order": "outer wall/inner wall/infill",
"compatible_printers": []
}

View File

@@ -0,0 +1,72 @@
{
"type": "process",
"name": "fdm_process_common",
"from": "system",
"instantiation": "false",
"adaptive_layer_height": "0",
"reduce_crossing_wall": "0",
"bridge_flow": "0.95",
"bridge_speed": "50",
"brim_width": "5",
"print_sequence": "by layer",
"default_acceleration": "10000",
"bridge_no_support": "0",
"elefant_foot_compensation": "0.1",
"outer_wall_line_width": "0.42",
"outer_wall_speed": "120",
"inner_wall_speed": "160",
"line_width": "0.45",
"infill_direction": "45",
"sparse_infill_density": "15%",
"sparse_infill_pattern": "crosshatch",
"initial_layer_line_width": "0.42",
"initial_layer_print_height": "0.2",
"initial_layer_speed": "50",
"initial_layer_infill_speed": "90",
"gap_infill_speed": "50",
"infill_combination": "0",
"sparse_infill_line_width": "0.45",
"infill_wall_overlap": "15%",
"sparse_infill_speed": "200",
"interface_shells": "0",
"detect_overhang_wall": "0",
"reduce_infill_retraction": "0",
"filename_format": "{input_filename_base}.gcode",
"wall_loops": "2",
"inner_wall_line_width": "0.45",
"print_settings_id": "",
"raft_layers": "0",
"seam_position": "nearest",
"skirt_distance": "2",
"skirt_height": "2",
"minimum_sparse_infill_area": "0",
"internal_solid_infill_line_width": "0.45",
"internal_solid_infill_speed": "180",
"spiral_mode": "0",
"standby_temperature_delta": "-5",
"enable_support": "0",
"support_filament": "0",
"support_line_width": "0.42",
"support_interface_filament": "0",
"support_on_build_plate_only": "0",
"support_top_z_distance": "0.15",
"support_interface_loop_pattern": "0",
"support_interface_top_layers": "2",
"support_interface_spacing": "0",
"support_interface_speed": "80",
"support_interface_pattern": "auto",
"support_base_pattern": "default",
"support_base_pattern_spacing": "2",
"support_speed": "200",
"support_threshold_angle": "40",
"support_object_xy_distance": "0.5",
"detect_thin_wall": "0",
"top_surface_line_width": "0.42",
"top_surface_speed": "120",
"travel_speed": "400",
"enable_prime_tower": "0",
"prime_tower_width": "60",
"xy_hole_compensation": "0",
"xy_contour_compensation": "0",
"compatible_printers": []
}

View File

@@ -0,0 +1,390 @@
{
"name": "Anker",
"version": "02.03.01.10",
"force_update": "0",
"description": "Anker configurations",
"machine_model_list": [
{
"name": "Anker M5",
"sub_path": "machine/Anker M5.json"
},
{
"name": "Anker M5 All-Metal Hot End",
"sub_path": "machine/Anker M5 All-Metal Hot End.json"
},
{
"name": "Anker M5C",
"sub_path": "machine/Anker M5C.json"
}
],
"process_list": [
{
"name": "fdm_process_common",
"sub_path": "process/fdm_process_common.json"
},
{
"name": "fdm_process_anker_common",
"sub_path": "process/fdm_process_anker_common.json"
},
{
"name": "fdm_process_anker_common_0_2",
"sub_path": "process/fdm_process_anker_common_0_2.json"
},
{
"name": "fdm_process_anker_common_0_25",
"sub_path": "process/fdm_process_anker_common_0_25.json"
},
{
"name": "fdm_process_anker_common_0_6",
"sub_path": "process/fdm_process_anker_common_0_6.json"
},
{
"name": "0.05mm Ultradetail @Anker",
"sub_path": "process/0.05mm Ultradetail @Anker.json"
},
{
"name": "0.10mm Detail @Anker",
"sub_path": "process/0.10mm Detail @Anker.json"
},
{
"name": "0.15mm Optimal @Anker",
"sub_path": "process/0.15mm Optimal @Anker.json"
},
{
"name": "0.20mm Standard @Anker",
"sub_path": "process/0.20mm Standard @Anker.json"
},
{
"name": "0.25mm Draft @Anker",
"sub_path": "process/0.25mm Draft @Anker.json"
},
{
"name": "0.30mm Superdraft @Anker",
"sub_path": "process/0.30mm Superdraft @Anker.json"
},
{
"name": "fdm_process_anker_fast_common",
"sub_path": "process/fdm_process_anker_fast_common.json"
},
{
"name": "0.05mm Optimal 0.2 nozzle @Anker",
"sub_path": "process/0.05mm Optimal 0.2 nozzle @Anker.json"
},
{
"name": "0.10mm Standard 0.2 nozzle @Anker",
"sub_path": "process/0.10mm Standard 0.2 nozzle @Anker.json"
},
{
"name": "0.15mm Draft 0.2 nozzle @Anker",
"sub_path": "process/0.15mm Draft 0.2 nozzle @Anker.json"
},
{
"name": "0.05mm Optimal 0.25 nozzle @Anker",
"sub_path": "process/0.05mm Optimal 0.25 nozzle @Anker.json"
},
{
"name": "0.10mm Standard 0.25 nozzle @Anker",
"sub_path": "process/0.10mm Standard 0.25 nozzle @Anker.json"
},
{
"name": "0.15mm Draft 0.25 nozzle @Anker",
"sub_path": "process/0.15mm Draft 0.25 nozzle @Anker.json"
},
{
"name": "0.15mm Detail 0.6 nozzle @Anker",
"sub_path": "process/0.15mm Detail 0.6 nozzle @Anker.json"
},
{
"name": "0.20mm Optimal 0.6 nozzle @Anker",
"sub_path": "process/0.20mm Optimal 0.6 nozzle @Anker.json"
},
{
"name": "0.30mm Standard 0.6mm nozzle @Anker",
"sub_path": "process/0.30mm Standard 0.6mm nozzle @Anker.json"
},
{
"name": "0.35mm Draft 0.6mm nozzle @Anker",
"sub_path": "process/0.35mm Draft 0.6mm nozzle @Anker.json"
},
{
"name": "0.40mm Superdraft 0.6mm nozzle @Anker",
"sub_path": "process/0.40mm Superdraft 0.6mm nozzle @Anker.json"
},
{
"name": "0.15mm Fast @Anker",
"sub_path": "process/0.15mm Fast @Anker.json"
},
{
"name": "0.20mm Fast @Anker",
"sub_path": "process/0.20mm Fast @Anker.json"
},
{
"name": "0.25mm Fast @Anker",
"sub_path": "process/0.25mm Fast @Anker.json"
}
],
"filament_list": [
{
"name": "fdm_filament_common",
"sub_path": "filament/fdm_filament_common.json"
},
{
"name": "fdm_filament_abs",
"sub_path": "filament/fdm_filament_abs.json"
},
{
"name": "fdm_filament_asa",
"sub_path": "filament/fdm_filament_asa.json"
},
{
"name": "fdm_filament_pa",
"sub_path": "filament/fdm_filament_pa.json"
},
{
"name": "fdm_filament_pc",
"sub_path": "filament/fdm_filament_pc.json"
},
{
"name": "fdm_filament_pet",
"sub_path": "filament/fdm_filament_pet.json"
},
{
"name": "fdm_filament_pla",
"sub_path": "filament/fdm_filament_pla.json"
},
{
"name": "fdm_filament_pva",
"sub_path": "filament/fdm_filament_pva.json"
},
{
"name": "fdm_filament_tpu",
"sub_path": "filament/fdm_filament_tpu.json"
},
{
"name": "Anker Generic ABS @base",
"sub_path": "filament/Anker Generic ABS @base.json"
},
{
"name": "Anker Generic ASA @base",
"sub_path": "filament/Anker Generic ASA @base.json"
},
{
"name": "Anker Generic PA @base",
"sub_path": "filament/Anker Generic PA @base.json"
},
{
"name": "Anker Generic PA-CF @base",
"sub_path": "filament/Anker Generic PA-CF @base.json"
},
{
"name": "Anker Generic PC @base",
"sub_path": "filament/Anker Generic PC @base.json"
},
{
"name": "Anker Generic PETG @base",
"sub_path": "filament/Anker Generic PETG @base.json"
},
{
"name": "Anker Generic PETG-CF @base",
"sub_path": "filament/Anker Generic PETG-CF @base.json"
},
{
"name": "Anker Generic PLA @base",
"sub_path": "filament/Anker Generic PLA @base.json"
},
{
"name": "Anker Generic PLA Silk @base",
"sub_path": "filament/Anker Generic PLA Silk @base.json"
},
{
"name": "Anker Generic PLA+ @base",
"sub_path": "filament/Anker Generic PLA+ @base.json"
},
{
"name": "Anker Generic PLA-CF @base",
"sub_path": "filament/Anker Generic PLA-CF @base.json"
},
{
"name": "Anker Generic PVA @base",
"sub_path": "filament/Anker Generic PVA @base.json"
},
{
"name": "Anker Generic TPU @base",
"sub_path": "filament/Anker Generic TPU @base.json"
},
{
"name": "Anker Generic ABS",
"sub_path": "filament/Anker Generic ABS.json"
},
{
"name": "Anker Generic ABS 0.2 nozzle",
"sub_path": "filament/Anker Generic ABS 0.2 nozzle.json"
},
{
"name": "Anker Generic ABS 0.25 nozzle",
"sub_path": "filament/Anker Generic ABS 0.25 nozzle.json"
},
{
"name": "Anker Generic ASA",
"sub_path": "filament/Anker Generic ASA.json"
},
{
"name": "Anker Generic ASA 0.2 nozzle",
"sub_path": "filament/Anker Generic ASA 0.2 nozzle.json"
},
{
"name": "Anker Generic ASA 0.25 nozzle",
"sub_path": "filament/Anker Generic ASA 0.25 nozzle.json"
},
{
"name": "Anker Generic PA",
"sub_path": "filament/Anker Generic PA.json"
},
{
"name": "Anker Generic PA 0.2 nozzle",
"sub_path": "filament/Anker Generic PA 0.2 nozzle.json"
},
{
"name": "Anker Generic PA 0.25 nozzle",
"sub_path": "filament/Anker Generic PA 0.25 nozzle.json"
},
{
"name": "Anker Generic PA-CF",
"sub_path": "filament/Anker Generic PA-CF.json"
},
{
"name": "Anker Generic PC",
"sub_path": "filament/Anker Generic PC.json"
},
{
"name": "Anker Generic PC 0.2 nozzle",
"sub_path": "filament/Anker Generic PC 0.2 nozzle.json"
},
{
"name": "Anker Generic PC 0.25 nozzle",
"sub_path": "filament/Anker Generic PC 0.25 nozzle.json"
},
{
"name": "Anker Generic PETG",
"sub_path": "filament/Anker Generic PETG.json"
},
{
"name": "Anker Generic PETG 0.2 nozzle",
"sub_path": "filament/Anker Generic PETG 0.2 nozzle.json"
},
{
"name": "Anker Generic PETG 0.25 nozzle",
"sub_path": "filament/Anker Generic PETG 0.25 nozzle.json"
},
{
"name": "Anker Generic PETG-CF",
"sub_path": "filament/Anker Generic PETG-CF.json"
},
{
"name": "Anker Generic PLA",
"sub_path": "filament/Anker Generic PLA.json"
},
{
"name": "Anker Generic PLA 0.2 nozzle",
"sub_path": "filament/Anker Generic PLA 0.2 nozzle.json"
},
{
"name": "Anker Generic PLA 0.25 nozzle",
"sub_path": "filament/Anker Generic PLA 0.25 nozzle.json"
},
{
"name": "Anker Generic PLA Silk",
"sub_path": "filament/Anker Generic PLA Silk.json"
},
{
"name": "Anker Generic PLA Silk 0.2 nozzle",
"sub_path": "filament/Anker Generic PLA Silk 0.2 nozzle.json"
},
{
"name": "Anker Generic PLA Silk 0.25 nozzle",
"sub_path": "filament/Anker Generic PLA Silk 0.25 nozzle.json"
},
{
"name": "Anker Generic PLA+",
"sub_path": "filament/Anker Generic PLA+.json"
},
{
"name": "Anker Generic PLA+ 0.2 nozzle",
"sub_path": "filament/Anker Generic PLA+ 0.2 nozzle.json"
},
{
"name": "Anker Generic PLA+ 0.25 nozzle",
"sub_path": "filament/Anker Generic PLA+ 0.25 nozzle.json"
},
{
"name": "Anker Generic PLA-CF",
"sub_path": "filament/Anker Generic PLA-CF.json"
},
{
"name": "Anker Generic PVA",
"sub_path": "filament/Anker Generic PVA.json"
},
{
"name": "Anker Generic TPU",
"sub_path": "filament/Anker Generic TPU.json"
}
],
"machine_list": [
{
"name": "fdm_machine_common",
"sub_path": "machine/fdm_machine_common.json"
},
{
"name": "fdm_marlin_common",
"sub_path": "machine/fdm_marlin_common.json"
},
{
"name": "Anker M5 0.2 nozzle",
"sub_path": "machine/Anker M5 0.2 nozzle.json"
},
{
"name": "Anker M5 0.25 nozzle",
"sub_path": "machine/Anker M5 0.25 nozzle.json"
},
{
"name": "Anker M5 0.4 nozzle",
"sub_path": "machine/Anker M5 0.4 nozzle.json"
},
{
"name": "Anker M5 0.6 nozzle",
"sub_path": "machine/Anker M5 0.6 nozzle.json"
},
{
"name": "Anker M5 All-Metal 0.2 nozzle",
"sub_path": "machine/Anker M5 All-Metal 0.2 nozzle.json"
},
{
"name": "Anker M5 All-Metal 0.25 nozzle",
"sub_path": "machine/Anker M5 All-Metal 0.25 nozzle.json"
},
{
"name": "Anker M5 All-Metal 0.4 nozzle",
"sub_path": "machine/Anker M5 All-Metal 0.4 nozzle.json"
},
{
"name": "Anker M5 All-Metal 0.6 nozzle",
"sub_path": "machine/Anker M5 All-Metal 0.6 nozzle.json"
},
{
"name": "Anker M5C 0.2 nozzle",
"sub_path": "machine/Anker M5C 0.2 nozzle.json"
},
{
"name": "Anker M5C 0.25 nozzle",
"sub_path": "machine/Anker M5C 0.25 nozzle.json"
},
{
"name": "Anker M5C 0.4 nozzle",
"sub_path": "machine/Anker M5C 0.4 nozzle.json"
},
{
"name": "Anker M5C 0.6 nozzle",
"sub_path": "machine/Anker M5C 0.6 nozzle.json"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

View File

@@ -0,0 +1,16 @@
{
"type": "filament",
"name": "Anker Generic ABS 0.2 nozzle",
"inherits": "Anker Generic ABS @base",
"from": "system",
"setting_id": "GFSB99_20",
"instantiation": "true",
"filament_max_volumetric_speed": [
"2"
],
"compatible_printers": [
"Anker M5 0.2 nozzle",
"Anker M5 All-Metal 0.2 nozzle",
"Anker M5C 0.2 nozzle"
]
}

View File

@@ -0,0 +1,16 @@
{
"type": "filament",
"name": "Anker Generic ABS 0.25 nozzle",
"inherits": "Anker Generic ABS @base",
"from": "system",
"setting_id": "GFSB99_25",
"instantiation": "true",
"filament_max_volumetric_speed": [
"3"
],
"compatible_printers": [
"Anker M5 0.25 nozzle",
"Anker M5 All-Metal 0.25 nozzle",
"Anker M5C 0.25 nozzle"
]
}

View File

@@ -0,0 +1,8 @@
{
"type": "filament",
"name": "Anker Generic ABS @base",
"inherits": "fdm_filament_abs",
"from": "system",
"filament_id": "GFB99",
"instantiation": "false"
}

View File

@@ -0,0 +1,16 @@
{
"type": "filament",
"name": "Anker Generic ABS",
"inherits": "Anker Generic ABS @base",
"from": "system",
"setting_id": "GFSB99",
"instantiation": "true",
"compatible_printers": [
"Anker M5 0.4 nozzle",
"Anker M5 0.6 nozzle",
"Anker M5 All-Metal 0.4 nozzle",
"Anker M5 All-Metal 0.6 nozzle",
"Anker M5C 0.4 nozzle",
"Anker M5C 0.6 nozzle"
]
}

View File

@@ -0,0 +1,16 @@
{
"type": "filament",
"name": "Anker Generic ASA 0.2 nozzle",
"inherits": "Anker Generic ASA @base",
"from": "system",
"setting_id": "GFSB98_20",
"instantiation": "true",
"filament_max_volumetric_speed": [
"2"
],
"compatible_printers": [
"Anker M5 0.2 nozzle",
"Anker M5 All-Metal 0.2 nozzle",
"Anker M5C 0.2 nozzle"
]
}

View File

@@ -0,0 +1,16 @@
{
"type": "filament",
"name": "Anker Generic ASA 0.25 nozzle",
"inherits": "Anker Generic ASA @base",
"from": "system",
"setting_id": "GFSB98_25",
"instantiation": "true",
"filament_max_volumetric_speed": [
"3"
],
"compatible_printers": [
"Anker M5 0.25 nozzle",
"Anker M5 All-Metal 0.25 nozzle",
"Anker M5C 0.25 nozzle"
]
}

View File

@@ -0,0 +1,8 @@
{
"type": "filament",
"name": "Anker Generic ASA @base",
"inherits": "fdm_filament_asa",
"from": "system",
"filament_id": "GFB98",
"instantiation": "false"
}

View File

@@ -0,0 +1,16 @@
{
"type": "filament",
"name": "Anker Generic ASA",
"inherits": "Anker Generic ASA @base",
"from": "system",
"setting_id": "GFSB98",
"instantiation": "true",
"compatible_printers": [
"Anker M5 0.4 nozzle",
"Anker M5 0.6 nozzle",
"Anker M5 All-Metal 0.4 nozzle",
"Anker M5 All-Metal 0.6 nozzle",
"Anker M5C 0.4 nozzle",
"Anker M5C 0.6 nozzle"
]
}

View File

@@ -0,0 +1,15 @@
{
"type": "filament",
"name": "Anker Generic PA 0.2 nozzle",
"inherits": "Anker Generic PA @base",
"from": "system",
"setting_id": "GFSN99_20",
"instantiation": "true",
"filament_max_volumetric_speed": [
"2"
],
"compatible_printers": [
"Anker M5 All-Metal 0.2 nozzle",
"Anker M5C 0.2 nozzle"
]
}

View File

@@ -0,0 +1,15 @@
{
"type": "filament",
"name": "Anker Generic PA 0.25 nozzle",
"inherits": "Anker Generic PA @base",
"from": "system",
"setting_id": "GFSN99_25",
"instantiation": "true",
"filament_max_volumetric_speed": [
"3"
],
"compatible_printers": [
"Anker M5 All-Metal 0.25 nozzle",
"Anker M5C 0.25 nozzle"
]
}

View File

@@ -0,0 +1,8 @@
{
"type": "filament",
"name": "Anker Generic PA @base",
"inherits": "fdm_filament_pa",
"from": "system",
"filament_id": "GFN99",
"instantiation": "false"
}

View File

@@ -0,0 +1,20 @@
{
"type": "filament",
"name": "Anker Generic PA-CF @base",
"inherits": "fdm_filament_pa",
"from": "system",
"filament_id": "GFN98",
"instantiation": "false",
"filament_type": [
"PA-CF"
],
"required_nozzle_HRC": [
"40"
],
"filament_cost": [
"55"
],
"filament_max_volumetric_speed": [
"6"
]
}

View File

@@ -0,0 +1,14 @@
{
"type": "filament",
"name": "Anker Generic PA-CF",
"inherits": "Anker Generic PA-CF @base",
"from": "system",
"setting_id": "GFSN98",
"instantiation": "true",
"compatible_printers": [
"Anker M5 All-Metal 0.4 nozzle",
"Anker M5 All-Metal 0.6 nozzle",
"Anker M5C 0.4 nozzle",
"Anker M5C 0.6 nozzle"
]
}

View File

@@ -0,0 +1,14 @@
{
"type": "filament",
"name": "Anker Generic PA",
"inherits": "Anker Generic PA @base",
"from": "system",
"setting_id": "GFSN99",
"instantiation": "true",
"compatible_printers": [
"Anker M5 All-Metal 0.4 nozzle",
"Anker M5 All-Metal 0.6 nozzle",
"Anker M5C 0.4 nozzle",
"Anker M5C 0.6 nozzle"
]
}

View File

@@ -0,0 +1,15 @@
{
"type": "filament",
"name": "Anker Generic PC 0.2 nozzle",
"inherits": "Anker Generic PC @base",
"from": "system",
"setting_id": "GFSC99_20",
"instantiation": "true",
"filament_max_volumetric_speed": [
"2"
],
"compatible_printers": [
"Anker M5 All-Metal 0.2 nozzle",
"Anker M5C 0.2 nozzle"
]
}

View File

@@ -0,0 +1,15 @@
{
"type": "filament",
"name": "Anker Generic PC 0.25 nozzle",
"inherits": "Anker Generic PC @base",
"from": "system",
"setting_id": "GFSC99_25",
"instantiation": "true",
"filament_max_volumetric_speed": [
"3"
],
"compatible_printers": [
"Anker M5 All-Metal 0.25 nozzle",
"Anker M5C 0.25 nozzle"
]
}

View File

@@ -0,0 +1,8 @@
{
"type": "filament",
"name": "Anker Generic PC @base",
"inherits": "fdm_filament_pc",
"from": "system",
"filament_id": "GFC99",
"instantiation": "false"
}

View File

@@ -0,0 +1,14 @@
{
"type": "filament",
"name": "Anker Generic PC",
"inherits": "Anker Generic PC @base",
"from": "system",
"setting_id": "GFSC99",
"instantiation": "true",
"compatible_printers": [
"Anker M5 All-Metal 0.4 nozzle",
"Anker M5 All-Metal 0.6 nozzle",
"Anker M5C 0.4 nozzle",
"Anker M5C 0.6 nozzle"
]
}

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