| .. | ||
| __init__.py | ||
| cache.py | ||
| fields.py | ||
| models.py | ||
| parser.py | ||
| prusaslicer_fields.json | ||
| prusaslicer_modifier_fields.csv | ||
| README.md | ||
| utils.py | ||
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.
Project Structure
__init__.py: Exports the primary API (LocalCache,Profile,ConfigWriter).cache.py: Contains theLocalCacheclass for managing profile loading and metadata.models.py: Defines core data models likeProfile(as a dataclass) andConfigWriter.parser.py: Implements a recursive descent parser for PrusaSlicer's expression language.fields.py: Robustly loads and searches PrusaSlicer setting metadata (JSON/CSV).utils.py: Contains canonical implementations of INI parsing and configuration merging (generate_conf).
Core Components
1. LocalCache (cache.py)
- Manages a collection of profiles loaded from disk.
- Scans directories for
.inifiles and tracks changes using file metadata. - Categorizes profiles into
printer,print, andfilament. evaluate_compatibility: Checks which filament and print profiles are compatible with specific printer profiles.generate_conf_writer: Creates aConfigWriterby merging a printer, print, and one or more filament profiles.
2. Profile (models.py)
- 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.
3. ConfigWriter (models.py)
- Helper to write merged configurations to a file (e.g., for passing to a slicer or embedding in a 3MF).
- Includes checksum generation for configuration integrity.
4. Parser (parser.py)
- Tokenizes and parses expression strings into an AST that can be evaluated against a configuration dictionary.
- Supports variables, indexing, logical operators, and regex matching.
5. fields.py
- Loads metadata about PrusaSlicer configuration fields from
prusaslicer_fields.jsonandprusaslicer_modifier_fields.csv. - Uses robust path resolution relative to the module's directory.
Typical Workflow
- Initialize
LocalCache. - Call
cache.load([paths_to_profiles]). - Select a printer, print, and filament profile(s).
- (Optional) Evaluate compatibility using
cache.evaluate_compatibility. - Generate a merged config using
cache.generate_conf_writer. - Use
ConfigWriterto output the final configuration for slicing.