Preset management with Studio is a bit unfortunate (and the whole topic really needs to be addressed separately). Meanwhile the actual underlying preset definition system is quite flexible. If one looks at the provided profiles, like for filaments, one can see that they actually, in most cases, inherit from one another and do not repeat every setting in every definition file. I’ll describe here “briefly” how us users can also utilize this feature. If people are interested in more details, please let me know.
For example there’s an fdm_filament_abs.json, then Bambu ABS @base.json inherits that definition, then the printer and nozzle-specific profiles like Bambu ABS @BBL A1.json, Bambu ABS @BBL A1 0.2 nozzle.json, etc, pull in the “@base” profile as a starting point. At each level of inheritance, only the differences are listed in the more specific files.
The key is the inherits field of each profile, where the name of a parent preset can be listed (has to exactly match the file name of the parent, w/out file extension). Using this in our own user presets requires manual editing and organizing.
Now for us users, in the user/..../filament folder there’s also a base folder (or there should be). (As you probably know the user presets are stored in either user/default or user/###### with your BL user number if you log in for your Studio sessions. And if you log out/log in, all your presets are gone. Personally I created a directory symlink (junction) that points my user # folder to the default folder, to stop that nonsense.)
This base folder is where Studio puts the “custom filaments” you can create starting at the available filament types selection dialog. The parent filament folder is where Studio stores filament presets you save “on the fly” when editing a filament with a project (from where you select the filament).
So if you start with a “core” filament profile which contains most of the settings you need and put that one in base subfolder, then in the parent filament folder your profiles can inherit from this “core.” Unfortunately this key feature isn’t exposed in any way in the Studio UI.
To stay editable in Studio as a filament “custom profile” (where you select available filaments and define new ones), this base should list at least one printer and nozzle type in compatible_printers. Also, this base profile cannot inherit from any other profile (unfortunately), or again it won’t be editable in Studio (though it will still work for using it and any sub-profiles of it). You don’t have to adhere to these limits (especially inheriting from one of the built-in profiles can be really handy), but then you can’t edit it in Studio (for whatever reason, haven’t debugged that yet)
Any custom profiles that inherit from the base can then list whichever printer(s) and nozzle(s) that particular “sub” profile is compatible with. And only the differences from base need to be included in the sub types.
And you might be thinking that it would be cool to use multiple levels of inheritance in our custom profiles. And that’s very true. But there’s a bug/limit in Studio that it cannot find parent profiles in the same folder as the child – the parent has to be in the inner base folder and be imported first. But there’s a workaround by simply creating another base folder inside the existing base folder, which could be done to however many levels you want (it will keep drilling down into base folders until it finds the innermost one and starts loading profiles from there).
Oh, and you can basically ignore the corresponding .info file when creating profiles manually. Leave them be if they’re there already, but they’re not required.
–
Here’s an example, more or less (this forum ridiculously doesn’t allow .json file type uploads). I’m playing with PEBA Air which acts differently at various print temperatures and flow rates. I wasn’t keen on creating full profiles for each and every variation, for hopefully obvious reasons.
I start with a core profile 2 “base” levels deep:
This is a full filament profile, basically saved from one of Siraya’s example projects they provide, there’s nothing special about it really. But it does list two printers & nozzles as compatible.
Siraya Tech PEBA Air @BBL H2C 0.4 nozzle.json
{
"activate_air_filtration": [
"0"
],
"additional_cooling_fan_speed": [
"0"
],
"chamber_temperatures": [
"0"
],
"circle_compensation_speed": [
"200"
],
"close_fan_the_first_x_layers": [
"1"
],
"compatible_printers": [
"Bambu Lab H2C 0.4 nozzle",
"Bambu Lab H2D 0.4 nozzle"
],
"compatible_printers_condition": "",
"compatible_prints": [],
"compatible_prints_condition": "",
"complete_print_exhaust_fan_speed": [
"70"
],
"cool_plate_temp": [
"100"
],
"cool_plate_temp_initial_layer": [
"100"
],
"counter_coef_1": [
"0"
],
"counter_coef_2": [
"0.025"
],
"counter_coef_3": [
"-0.11"
],
"counter_limit_max": [
"0.05"
],
"counter_limit_min": [
"-0.04"
],
"default_filament_colour": [
"#000000"
],
"diameter_limit": [
"50"
],
"during_print_exhaust_fan_speed": [
"70"
],
"enable_overhang_bridge_fan": [
"1"
],
"enable_pressure_advance": [
"0"
],
"eng_plate_temp": [
"100"
],
"eng_plate_temp_initial_layer": [
"100"
],
"fan_cooling_layer_time": [
"100"
],
"fan_max_speed": [
"50"
],
"fan_min_speed": [
"50"
],
"filament_adaptive_volumetric_speed": [
"0",
"0"
],
"filament_adhesiveness_category": [
"0"
],
"filament_change_length": [
"10"
],
"filament_change_length_nc": [
"10"
],
"filament_cooling_before_tower": [
"10",
"10"
],
"filament_cost": [
"39.99"
],
"filament_density": [
"1.22"
],
"filament_deretraction_speed": [
"nil",
"nil"
],
"filament_diameter": [
"1.75"
],
"filament_end_gcode": [
"; filament end gcode\n"
],
"filament_extruder_variant": [
"Direct Drive Standard",
"Direct Drive High Flow"
],
"filament_flow_ratio": [
"1",
"1"
],
"filament_flush_temp": [
"0",
"0"
],
"filament_flush_volumetric_speed": [
"0",
"0"
],
"filament_id": "P7c81eba",
"filament_is_support": [
"0"
],
"filament_long_retractions_when_cut": [
"nil",
"nil"
],
"filament_max_volumetric_speed": [
"6",
"6"
],
"filament_minimal_purge_on_wipe_tower": [
"15"
],
"filament_notes": "",
"filament_pre_cooling_temperature": [
"200",
"200"
],
"filament_pre_cooling_temperature_nc": [
"0",
"0"
],
"filament_prime_volume": [
"45"
],
"filament_prime_volume_nc": [
"60"
],
"filament_printable": [
"3"
],
"filament_ramming_travel_time": [
"20",
"20"
],
"filament_ramming_travel_time_nc": [
"0",
"0"
],
"filament_ramming_volumetric_speed": [
"3",
"3"
],
"filament_ramming_volumetric_speed_nc": [
"-1",
"-1"
],
"filament_retract_before_wipe": [
"nil",
"nil"
],
"filament_retract_length_nc": [
"10",
"10"
],
"filament_retract_restart_extra": [
"nil",
"nil"
],
"filament_retract_when_changing_layer": [
"nil",
"nil"
],
"filament_retraction_distances_when_cut": [
"nil",
"nil"
],
"filament_retraction_length": [
"0",
"0"
],
"filament_retraction_minimum_travel": [
"nil",
"nil"
],
"filament_retraction_speed": [
"nil",
"nil"
],
"filament_scarf_gap": [
"0%"
],
"filament_scarf_height": [
"10%"
],
"filament_scarf_length": [
"10"
],
"filament_scarf_seam_type": [
"none"
],
"filament_settings_id": [
"Siraya Tech PEBA Air @BBL H2C 0.4 nozzle"
],
"filament_shrink": [
"100%"
],
"filament_soluble": [
"0"
],
"filament_start_gcode": [
"; filament start gcode\n"
],
"filament_type": [
"TPU"
],
"filament_velocity_adaptation_factor": [
"1"
],
"filament_vendor": [
"Siraya Tech"
],
"filament_wipe": [
"nil",
"nil"
],
"filament_wipe_distance": [
"nil",
"nil"
],
"filament_z_hop": [
"nil",
"nil"
],
"filament_z_hop_types": [
"nil",
"nil"
],
"first_x_layer_fan_speed": [
"0"
],
"from": "User",
"full_fan_speed_layer": [
"0"
],
"hole_coef_1": [
"0"
],
"hole_coef_2": [
"-0.025"
],
"hole_coef_3": [
"0.28"
],
"hole_limit_max": [
"0.25"
],
"hole_limit_min": [
"0.08"
],
"hot_plate_temp": [
"70"
],
"hot_plate_temp_initial_layer": [
"70"
],
"impact_strength_z": [
"0"
],
"inherits": "",
"long_retractions_when_ec": [
"0",
"0"
],
"name": "Siraya Tech PEBA Air @BBL H2C 0.4 nozzle",
"no_slow_down_for_cooling_on_outwalls": [
"0"
],
"nozzle_temperature": [
"230",
"230"
],
"nozzle_temperature_initial_layer": [
"230",
"230"
],
"nozzle_temperature_range_high": [
"270"
],
"nozzle_temperature_range_low": [
"220"
],
"overhang_fan_speed": [
"100"
],
"overhang_fan_threshold": [
"95%"
],
"overhang_threshold_participating_cooling": [
"95%"
],
"pre_start_fan_time": [
"0"
],
"pressure_advance": [
"0.02"
],
"reduce_fan_stop_start_freq": [
"1"
],
"required_nozzle_HRC": [
"3"
],
"retraction_distances_when_ec": [
"0",
"0"
],
"slow_down_for_layer_cooling": [
"0"
],
"slow_down_layer_time": [
"8"
],
"slow_down_min_speed": [
"20"
],
"supertack_plate_temp": [
"100"
],
"supertack_plate_temp_initial_layer": [
"100"
],
"temperature_vitrification": [
"30"
],
"textured_plate_temp": [
"100"
],
"textured_plate_temp_initial_layer": [
"100"
],
"version": "2.4.0.70",
"volumetric_speed_coefficients": [
"0 0 0 0 0 0",
"0 0 0 0 0 0"
]
}
Then a .6mm nozzle base profile in the folder above it.
It just changes the default flow rate and some plate temperatures (not even sure those are needed yet), but crucially it inherits the parent .4 nozzle profile.
Siraya Tech PEBA Air @BBL H2C 0.6 nozzle.json
{
"compatible_printers": [
"Bambu Lab H2C 0.6 nozzle",
"Bambu Lab H2D 0.6 nozzle"
],
"cool_plate_temp": [
"80"
],
"cool_plate_temp_initial_layer": [
"80"
],
"eng_plate_temp": [
"80"
],
"eng_plate_temp_initial_layer": [
"80"
],
"filament_flow_ratio": [
"0.95",
"0.95"
],
"filament_settings_id": [
"Siraya Tech PEBA Air @BBL H2C 0.6 nozzle"
],
"hot_plate_temp": [
"70"
],
"hot_plate_temp_initial_layer": [
"70"
],
"inherits": "Siraya Tech PEBA Air @BBL H2C 0.4 nozzle",
"instantiation": "true",
"name": "Siraya Tech PEBA Air @BBL H2C 0.6 nozzle",
"supertack_plate_temp": [
"80"
],
"supertack_plate_temp_initial_layer": [
"80"
],
"textured_plate_temp": [
"80"
],
"textured_plate_temp_initial_layer": [
"80"
],
"version": "2.4.0.70"
}
And at the filaments level I have just the individual temperatures and flow rates and nozzles. They inherit from the parent .4 or .6mm profiles above.
One of the files as an example:
Siraya Tech PEBA Air 250C 76A @BBL H2C 0.4mm.json
{
"filament_flow_ratio": [
"0.82",
"0.82"
],
"filament_settings_id": [
"Siraya Tech PEBA Air 250C 76A @BBL H2C 0.4mm"
],
"inherits": "Siraya Tech PEBA Air @BBL H2C 0.4 nozzle",
"name": "Siraya Tech PEBA Air 250C 76A @BBL H2C 0.4mm",
"nozzle_temperature": [
"250",
"250"
],
"nozzle_temperature_initial_layer": [
"250",
"250"
],
"version": "2.4.0.70"
}
–
I know that’s a lot of info, and far from detailed at that, but maybe it helps someone get a grip. If you have any related tricks, please share! If there’s interest in better profile management then I’m open to that conversation as well, as a programmer who could help build a tool or perhaps improve Studio.
Cheers,
-Max




