nodeslicer/infra/prusaslicer_profiles
2026-05-15 14:37:54 +03:00
..
expression_parser.py adding prusaslicer base code 2026-05-15 14:37:54 +03:00
profile_cache.py adding prusaslicer base code 2026-05-15 14:37:54 +03:00
profiles.py adding prusaslicer base code 2026-05-15 14:37:54 +03:00
prusaslicer_fields.json adding prusaslicer base code 2026-05-15 14:37:54 +03:00
prusaslicer_fields.py adding prusaslicer base code 2026-05-15 14:37:54 +03:00
prusaslicer_modifier_fields.csv adding prusaslicer base code 2026-05-15 14:37:54 +03:00
README.md adding prusaslicer base code 2026-05-15 14:37:54 +03:00

PrusaSlicer Profiles Module

This module handles the parsing, management, and evaluation of PrusaSlicer configuration profiles (.ini files). It supports profile inheritance, compatibility evaluation using PrusaSlicer's expression language, and generating merged configurations for slicing.

Core Components

1. profiles.py

  • Profile Class: Represents a single PrusaSlicer profile (Printer, Filament, or Print).
    • Stores configuration as a dictionary (conf_dict).
    • Handles inheritance logic via generate_inherited_confs.
    • Supports compatibility checks via evaluate_compatibility.
  • generate_conf Function: Recursively merges inherited profiles into a single configuration dictionary.

2. profile_cache.py

  • LocalCache Class: Manages a collection of profiles loaded from disk.
    • Scans directories for .ini files and tracks changes using file metadata.
    • Categorizes profiles into printers, print, and filament.
    • evaluate_compatibility: Checks which filament and print profiles are compatible with specific printer profiles.
    • generate_conf_writer: Creates a ConfigWriter by merging a printer, print, and one or more filament profiles (multi-extruder support).
  • ConfigWriter Class: Helper to write the merged configuration to a file (e.g., for passing to a slicer or embedding in a 3MF).
  • Utility Functions: ini_to_dict and ini_content_to_dict use ConfigParser to parse PrusaSlicer's INI format.

3. expression_parser.py

  • Implements a recursive descent parser for PrusaSlicer's expression language (used in compatible_printers_condition and similar fields).
  • AST Nodes: ExprNode, LiteralNode, VarNode, IndexNode, UnaryOpNode, BinaryOpNode.
  • Parser Class: Tokenizes and parses expression strings into an AST that can be evaluated against a configuration dictionary.

4. prusaslicer_fields.py

  • Loads metadata about PrusaSlicer configuration fields from prusaslicer_fields.json and prusaslicer_modifier_fields.csv.
  • Provides search_in_db and search_in_mod_db for looking up field definitions, types, and labels.

Data Files

  • prusaslicer_fields.json: Exhaustive database of PrusaSlicer settings, including types, default values, and labels.
  • prusaslicer_modifier_fields.csv: List of fields that are valid as modifiers.

Typical Workflow

  1. Initialize LocalCache.
  2. Call cache.load([paths_to_profiles]).
  3. Select a printer, print, and filament profile(s).
  4. (Optional) Evaluate compatibility using cache.evaluate_compatibility.
  5. Generate a merged config using cache.generate_conf_writer.
  6. Use ConfigWriter to output the final configuration for slicing.