Instances can be created and freed dynamically – these functions alter the number of allocated instances:
int mpr_sig_reserve_inst (mpr_sig signal, int number, mpr_id *ids, void **data)
void mpr_sig_remove_inst (mpr_sig signal, mpr_id instance)
This is different from whether the allocated instances are active or not. Instances are usually activated by setting their value, and released by either setting their value to NULL or calling mpr_sig_release_inst(). MAX_INST is currently defined to 128 in signal.c as an arbitrary limit but could be changed.
I’m interested in discussing this further – either on this list or we could schedule a video chat. The “gesture demonstration” example seems like it might relate to the MapLooper work expanding map memory (perhaps with instances), but I’m not sure how you are considering presets as signal instances. 3D pointclouds and flocking simulations have been discussed before as targets for exploring instances.