# Presets Functions

### Presets

\- Generally speaking, presets store and recall parameter values and triggers in Reactor  
\- The values to be stored can be predefined in a preset profile or they can be completely arbitrary (recording what changes)  
\- A preset profile can define values across device cores, device IDs and parameter dimensions - or they can be narrowed down  
\- With narrow preset profiles, there are inherent opportunities to use presets to copy/paste sets of values between devices and dimensions  
\- Reactor supports an infinite amount of preset profiles (re-)defined anywhere in the layer tree  
\- Storage and recall of a preset can work either instantaneously or played back over time  
\- When recorded and played back over time, values are organized in multiple segments. Each segment is essentially a time line and at the end of a timeline, playback will continue to the next segment either automatically or by user invocation (waiting for user input).  
\- Playback order of segments can be shuffled and waiting time between segments can be randomized. Playback for a timeline can be looped  
\- Recording and playback allows cancellation which will restore the state before recording or playback.  
\- Support for ganged recording and playback of multiple preset numbers, device ids, and dimensions (fairly exotic, honestly)  
\- Prepared for parameter animation (must be implemented in devicecollection)

### Commands:

**NextSegment (trigger)**  
During recording, this will end the segment and start a new one assuming there has been values added.  
During playback, this will skip to next segment

**AddUserWait (trigger)**  
Like NextSegment, but when used during recording it will insert a User Wait at the end and cap the segment length to the last added value.

**Play (trigger)**  
Starts playback

**PlayToggle (trigger)**  
Starts or stops playback

**PlayToggleNext (trigger)**  
Starts or stops playback, except if waiting in which case it will

**PlaySkip (trigger)**  
Starts playback, and skips to next segment if already playing (which may result in stopping altogether)

**PlayPause**  
Starts playback and toggles pause if already playing

**PlayPauseNext**  
Starts playback and toggles pause if already playing, unless at a user wait in which case it skips to next.

**Record (trigger)**  
Starts recording

**RecordToggle (trigger)**  
Starts or stops recording

**RecordNewSegment (trigger)**  
Starts recording, and creates new segment on second press

**RecordAddUserWait (trigger)**  
Starts recording, and creates new segment with user wait on second press

**Stop (trigger)**  
Stops recording or playing

**Delete (trigger)**  
Deletes preset if it is not recording or playing

**Cancel (trigger)**  
If recording, it will stop recording, recall the values from before recording and reinstate the previous content for the preset   
If playing, it will stop playing and recall the values from before playing.

**Recall (trigger)**  
Instantly recalls the final values of the first segment of a preset.

**RecallStateFromBeforeRecording (trigger)**  
Recalls the initially stored state of a given preset

**DurationRandomExtension (Integer value, ms)**  
Sets the Random extension value for a given recorded preset.

**Loop (bool)**  
Enable looping for a preset

**Shuffle (bool)**  
Enable shuffle for a preset