I was reading @PeZsmistic’s feature request for a Preset Manager to be added to Studio, and I decided to make that into a plugin while we wait for that feature to (maybe?) get made.
This plugin ended up being a bit over 2,800 lines of code, and took me quite a while to make. It was a really fun challenge!
Special thanks to @Elttob for letting me use the wonderful Vanilla icons for this plugin!
Special thanks to @Maximum_ADHD for his wonderful API Dump!
Special thanks to @1waffle1 for their LZW text compression I used to store the serialized Presets more efficiently!
Honestly, I don’t think I can explain it better than PeZsmistic did in the feature request, so I’ll quote that here.
Some example use cases, explained by PeZsmistic in their request:
What can it do?
Well, for this initial MVP release I did the majority of what PeZ requested:
The ability to create “Presets”. (A Preset is a collection of properties, attributes, tags, and a collision group)
The ability to apply Presets to instances in the selection.
Presets can be applied to any instance type. Property names that are not valid are simply ignored.
These presets could be applied additively or as a complete overwrite to an instance.
If I “add” a preset to an instance, only properties defined in the preset will be changed, missing tags and attributes will be added, and the collision group will be changed
If I “set” a preset on an instance, all properties will be reset to default, all tags and attributes will be deleted, and the Preset will then be added as above.
The ability to name Presets.
The ability to quickly find a preset by searching by name.
The ability to duplicate Presets for quicker variant creation.
Autofill suggestions for Properties and Collision Group.
Automatic datatypes for Properties from API Dump.
Settable datatypes for Attributes.
The presets are serialized and saved, so your Presets do persist between sessions.
Preset summary when the GUI is collapsed.
Export Preset as standalone module for runtime preset application.
Select all Instances that match the Preset.
(More features are planned, just not needed for this initial release.)
Here’s a quick demonstration of some of the features in use.
Roadmap
Folders and Sorting
Recently Used Tab
Create Preset from Selection
Supporting more property types (eg: CFrame, Axes, PhysicalProperties, Instance)
Ohhhh, I see then what you suggested before would work great!
either that or we create our own preset setter / adder function but the exported module would contain Preset information so developers can fully customize the behavior they want.
Does this plugin have the ability to extract Properties / Tags / etc as Presets from exiting Instances? (I read through the OP quickly but didn’t seem to find anything on that)
Another new Preset action button! This selection button will automatically select all Instances in the workspace that match the Preset exactly- object must have all the properties, attributes, tags, and (if a basepart) collision group.
It’s pretty expensive to check against every object in the workspace, so use this sparingly.
Would you consider allowing setting/adding for services? My use case is I want to modify Lighting settings so I can jot them down in a script and then reset them when I am done.
Been having an issue where every time I apply a preset, it sets the part’s position to the Origin, even though there is not Position property set for the part.