NewTek TriCaster Network Control in Advanced Edition

A largely undocumented but very powerful feature of NewTek’s TriCaster Advanced Edition is the remote control API. These shortcuts let you fire commands to the TriCaster via HTTP over the local network to control most aspects of the system. Whether it’s changing sources, controlling DDRs or even triggering macros.

When using the TriCaster system, I’ve always find it interesting to have a browse around the program directory to see what I can find and when I upgraded to the TriCaster Advanced Edition it was no exception. I’ve often found it pretty strange that there’s hints to a lot more functionality under the bonnet that’s not reflected in documentation or the interface.

I’ve been using HTTP commands on the version of software that shipped with the TriCaster Mini but these were always pretty basic. I was never able to get it to do more than just fire off macros and hope for the best. Though great to use in development I always felt like there could have been more to it. Upon browsing the TriCaster program directory I came across this XML file:

C:\TriCaster\Configuration\shortcuts_cfg.xml

In here I found commands to control any part of the TriCaster system. It takes some time but when browsing the XML file you’ll be able to find almost any value that you’re looking for. These can then be used via external systems to further expand automation of the TriCaster system.

Example

Here’s a quick example of using one of these commands using curl in PHP. For this example I’m going to use record_set_filename which, as you may be able to guess, will set the filename in the recorder.

public function setRecordName( $recordname )
    {

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "http://ip-of-tricaster/v1/shortcut");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, "<shortcut name='record_set_filename'><entry key='filename' value='$recordname'/><entry key='row_index' value='0'/></shortcut>");
        curl_setopt($ch, CURLOPT_POST, 1);

        $headers = array();
        $headers[] = "Content-Type: text/xml";
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

        $result = curl_exec($ch);
        if (curl_errno($ch)) {
            echo 'Error:' . curl_error($ch);
        }
        curl_close($ch);
    }

From the above example you can see that we’re basically posting an XML string to the TriCaster with our required values. These will change with each different aspect of the system that you’re interacting with.

shortcut name is the shortcut that we’re addressing.
filename is the parameter that we’re going to set. We’ll be setting it to whatever is defined in value.
row_index refers to the recorder that we’re adjusting. The advanced edition features multiple recorders but here we’re changing the first one with ID 0.

Hopefully this was helpful to you if you’re looking as using this functionality. For quick reference, below is the full XML file with all shortcuts.

XML

<!-- Caution, if the settings in this file are changed then the performance of your system is no
     longer assured and the product cannot be supported by NewTek until the system has been restored
     and the factory default settings are being used.
-->

<!-- {value}s for Input Rows -->

<!-- XD850 -->
<!-- {value} == 0  : "Input1" -->
<!-- {value} == 1  : "Input2" -->
<!-- {value} == 2  : "Input3" -->
<!-- {value} == 3  : "Input4" -->
<!-- {value} == 4  : "Input5" -->
<!-- {value} == 5  : "Input6" -->
<!-- {value} == 6  : "Input7" -->
<!-- {value} == 7  : "Input8" -->
<!-- {value} == 8  : "Net1" -->
<!-- {value} == 9  : "Net2" -->
<!-- {value} == 10 : "DDR1" -->
<!-- {value} == 11 : "DDR2" -->
<!-- {value} == 12 : "GFX1" -->
<!-- {value} == 13 : "GFX2" -->
<!-- {value} == 15 : "Frame Buffer" -->
<!-- {value} == 16 : "Black" -->
<!-- {value} == 17 : "Virtual Input 1" -->
<!-- {value} == 18 : "Virtual Input 2" -->
<!-- {value} == 19 : "Virtual Input 3" -->
<!-- {value} == 20 : "Virtual Input 4" -->
<!-- {value} == 21 : "Virtual Input 5" -->
<!-- {value} == 22 : "Virtual Input 6" -->
<!-- {value} == 23 : "Virtual Input 7" -->
<!-- {value} == 24 : "Virtual Input 8" -->

<shortcuts shortcuts_processing="threaded_and_invoke">

  <!-- Transition Shortcuts -->
  <shortcut name="transition_delegate" shortcut_type="string" state_type="string" undocumented="true">
    <!-- Select Transition Delegate.  -->
    <!-- Options: "background", "overlay0", "overlay1", "ftb". -->
    <!-- May be piped for multi-select: "background|overlay1". -->
  </shortcut>
  <shortcut name="transition_delegate_flags" shortcut_type="int" state_type="int" undocumented="true">
    <!-- Select Delegate using Base 2 flags. -->
    <!-- {value} == 2^0 selects the first option.  -->
  </shortcut>


  <group>
    <prefix name="main" />
    <prefix name="main_mes" />
    <prefix name="virtualinputs" />
    <prefix name="v1" />
    <prefix name="v2" />
    <prefix name="v3" />
    <prefix name="v4" />
    <prefix name="v5" />
    <prefix name="v6" />
    <prefix name="v7" />
    <prefix name="v8" />
    <prefix name="previz" />

    <prefix name="main_background" />
    <prefix name="virtualinputs_background" />
    <prefix name="v1_background" />
    <prefix name="v2_background" />
    <prefix name="v3_background" />
    <prefix name="v4_background" />
    <prefix name="v5_background" />
    <prefix name="v6_background" />
    <prefix name="v7_background" />
    <prefix name="v8_background" />
    <prefix name="previz_background" />

    <prefix name="main_dskrow" undocumented="true" />
    <prefix name="virtualinputs_dskrow" undocumented="true" />
    <prefix name="v1_dskrow" undocumented="true" />
    <prefix name="v2_dskrow" undocumented="true" />
    <prefix name="v3_dskrow" undocumented="true" />
    <prefix name="v4_dskrow" undocumented="true" />
    <prefix name="v5_dskrow" undocumented="true" />
    <prefix name="v6_dskrow" undocumented="true" />
    <prefix name="v7_dskrow" undocumented="true" />
    <prefix name="v8_dskrow" undocumented="true" />

    <prefix name="virtualinputs_rowtoggle_ac" undocumented="true" />
    <prefix name="v1_rowtoggle_ac" undocumented="true" />
    <prefix name="v2_rowtoggle_ac" undocumented="true" />
    <prefix name="v3_rowtoggle_ac" undocumented="true" />
    <prefix name="v4_rowtoggle_ac" undocumented="true" />
    <prefix name="v5_rowtoggle_ac" undocumented="true" />
    <prefix name="v6_rowtoggle_ac" undocumented="true" />
    <prefix name="v7_rowtoggle_ac" undocumented="true" />
    <prefix name="v8_rowtoggle_ac" undocumented="true" />

    <prefix name="virtualinputs_rowtoggle_bd" undocumented="true" />
    <prefix name="v1_rowtoggle_bd" undocumented="true" />
    <prefix name="v2_rowtoggle_bd" undocumented="true" />
    <prefix name="v3_rowtoggle_bd" undocumented="true" />
    <prefix name="v4_rowtoggle_bd" undocumented="true" />
    <prefix name="v5_rowtoggle_bd" undocumented="true" />
    <prefix name="v6_rowtoggle_bd" undocumented="true" />
    <prefix name="v7_rowtoggle_bd" undocumented="true" />
    <prefix name="v8_rowtoggle_bd" undocumented="true" />

    <prefix name="main_dsk1" />
    <prefix name="main_mes_dsk1" />
    <prefix name="virtualinputs_dsk1" />
    <prefix name="v1_dsk1" />
    <prefix name="v2_dsk1" />
    <prefix name="v3_dsk1" />
    <prefix name="v4_dsk1" />
    <prefix name="v5_dsk1" />
    <prefix name="v6_dsk1" />
    <prefix name="v7_dsk1" />
    <prefix name="v8_dsk1" />
    <prefix name="previz_dsk1" />

    <prefix name="main_dsk2" />
    <prefix name="main_mes_dsk2" />
    <prefix name="virtualinputs_dsk2" />
    <prefix name="v1_dsk2" />
    <prefix name="v2_dsk2" />
    <prefix name="v3_dsk2" />
    <prefix name="v4_dsk2" />
    <prefix name="v5_dsk2" />
    <prefix name="v6_dsk2" />
    <prefix name="v7_dsk2" />
    <prefix name="v8_dsk2" />
    <prefix name="previz_dsk2" />

    <prefix name="main_dsk3" />
    <prefix name="main_mes_dsk3" />
    <prefix name="virtualinputs_dsk3" />
    <prefix name="v1_dsk3" />
    <prefix name="v2_dsk3" />
    <prefix name="v3_dsk3" />
    <prefix name="v4_dsk3" />
    <prefix name="v5_dsk3" />
    <prefix name="v6_dsk3" />
    <prefix name="v7_dsk3" />
    <prefix name="v8_dsk3" />
    <prefix name="previz_dsk3" />

    <prefix name="main_dsk4" />
    <prefix name="main_mes_dsk4" />
    <prefix name="virtualinputs_dsk4" />
    <prefix name="v1_dsk4" />
    <prefix name="v2_dsk4" />
    <prefix name="v3_dsk4" />
    <prefix name="v4_dsk4" />
    <prefix name="v5_dsk4" />
    <prefix name="v6_dsk4" />
    <prefix name="v7_dsk4" />
    <prefix name="v8_dsk4" />
    <prefix name="previz_dsk4" />

    <prefix name="main_ftb" />
    <prefix name="main_mes_ftb" />
    <prefix name="virtualinputs_ftb" />
    <prefix name="v1_ftb" />
    <prefix name="v2_ftb" />
    <prefix name="v3_ftb" />
    <prefix name="v4_ftb" />
    <prefix name="v5_ftb" />
    <prefix name="v6_ftb" />
    <prefix name="v7_ftb" />
    <prefix name="v8_ftb" />
    <prefix name="previz_ftb" />

    <prefix name="main_fx" />
    <prefix name="main_output2" />

    <suffix name="_auto" shortcut_type="bool" state_type="bool">
      <!-- Trigger an auto.  The bool value is only used in the state, to light the auto button.  -->
    </suffix>
    <suffix name="_reversed_auto" shortcut_type="bool">
      <!-- Trigger a reversed auto. -->
    </suffix>
    <suffix name="_take" shortcut_type="void" state_type="bool">
      <!-- Trigger a take.  The bool value is only used in the state, to light the take button.  -->
    </suffix>
    <suffix name="_up" shortcut_type="void">
      <!-- Move the transition tbar up 1%. -->
    </suffix>
    <suffix name="_down" shortcut_type="void">
      <!-- Move the transition tbar down 1%. -->
    </suffix>
    <suffix name="_up_fast" shortcut_type="void">
      <!-- Move the transition tbar up 5%. -->
    </suffix>
    <suffix name="_down_fast" shortcut_type="void">
      <!-- Move the transition tbar down 5%. -->
    </suffix>
    <suffix name="_goto_halfway" shortcut_type="void">
      <!-- Move the transition tbar to the halfway point. -->
    </suffix>
    <suffix name="_goto_top" shortcut_type="void">
      <!-- Move the transition tbar to the top. -->
    </suffix>
    <suffix name="_goto_bottom" shortcut_type="void">
      <!-- Move the transition tbar to the bottom. -->
    </suffix>
    <suffix name="_tbar_speed" shortcut_type="double">
      <!-- Start an Auto using the transition speed specified by Value (in seconds), or update the speed of an Auto already in progress. -->
    </suffix>
    <suffix name="_value" shortcut_type="double" state_type="double">
      <!-- Set the TBar location value. -->
    </suffix>
    <suffix name="_toggle_reverse" shortcut_type="bool">
      <!-- Toggle reverse on and off for the target transition.  -->
    </suffix>
    <suffix name="_toggle_autoreverse" shortcut_type="bool">
      <!-- Toggle ping/pong on and off for the target transition.  -->
    </suffix>
    <suffix name="_select_index" shortcut_type="int" state_type="int" web_access="true">
      <!-- Select Transition Preset {value}. -->
    </suffix>
    <suffix name="_select_next" shortcut_type="void">
      <!-- Select the next Transition Preset. -->
    </suffix>
    <suffix name="_select_prev" shortcut_type="void">
      <!-- Select the previous Transition Preset. -->
    </suffix>
    <suffix name="_select_fade" shortcut_type="void" state_type="bool">
      <!-- Select fade for the target transition. -->
    </suffix>
    <suffix name="_slow" shortcut_type="void">
      <!-- Select a duration of 2.0 for transitions, or 20.0 for effect zooms.  -->
    </suffix>
    <suffix name="_medium" shortcut_type="void">
      <!-- Select a duration of 1.0 for transitions, or 10.0 for effect zooms. -->
    </suffix>
    <suffix name="_fast" shortcut_type="void">
      <!-- Select a duration of 0.5 for transitions, or 5.0 for effect zooms. -->
    </suffix>
    <suffix name="_speed_next_preset" shortcut_type="void">
      <!-- Select the next S, M, or F preset. -->
    </suffix>
    <suffix name="_adjust_speed" shortcut_type="double" state_type="double">
      <!-- Change the Transition duration by {value} seconds. -->
    </suffix>
    <suffix name="_speed" shortcut_type="double" state_type="double">
      <!-- Change the Transition duration to {value} seconds. -->
    </suffix>
    <suffix name="_switch_transition" shortcut_type="int">
      <!-- Selects the next or previous transition.  1 for next transition.  -1 for previous transition. -->
    </suffix>
    <suffix name="_set_transition" shortcut_type="string">
      <!-- Choose a transition from a path on disk. -->
    </suffix>
    <suffix name="_select_saved_nonfade_transition" shortcut_type="void">
      <!-- Turns fade off, and selects the last non-fade transition selected.  -->
    </suffix>
    <suffix name="_show_on_preview" shortcut_type="string" undocumented="true">
      <!-- Show layers on preview conditionally.  Accepted values are "alpha", "true", "false". -->
    </suffix>
    <suffix name="_direction" state_type="int" undocumented="true" />

    <!-- Overlay Shortcuts -->
    <suffix name="_select" shortcut_type="int" state_type="int">
      <!-- Sets the DSK source by index. -->
    </suffix>
    <suffix name="_select_named_input" shortcut_type="string" state_type="string">
      <!-- Sets the DSK source by name.  Use switcher internal names: input1, input2... ddr, ddr2, stills, titles." -->
    </suffix>
    <suffix name="_switch_source" shortcut_type="int">
      <!-- Use -1 and 1 to cycle through DSK sources. -->
    </suffix>
    <suffix name="_undo" shortcut_type="bool" undocumented="true">
      <!-- load previous saved preset. -->
    </suffix>
    <suffix name="_redo" shortcut_type="bool" undocumented="true">
      <!-- load previous saved preset. -->
    </suffix>
    <suffix name="_save" shortcut_type="bool" undocumented="true">
      <!-- save preset for future. -->
    </suffix>
    <suffix name="_frmbfr_change" undocumented="true">
      <!-- Change FrameBuffer Selection by NAME. -->
      <shortcut_dictionary>
        <entry key="ShortCutName" type="string" />
        <entry key="FrmBfrName" type="string" />
        <entry key="UpdateUI" type="bool" />
      </shortcut_dictionary>
    </suffix>
    <suffix name="_ftb_blink" shortcut_type="bool"  undocumented="true" />
  </group>

  <group>
    <prefix name="virtualinputs" />
    <prefix name="v1" />
    <prefix name="v2" />
    <prefix name="v3" />
    <prefix name="v4" />
    <prefix name="v5" />
    <prefix name="v6" />
    <prefix name="v7" />
    <prefix name="v8" />
    <prefix name="previz" />

    <suffix name="_toggle_mix_effect_mode" state_type="bool">
      <!-- A boolean state - true when in Effect mode. -->
    </suffix>
  </group>

  <shortcut name="main_mes_delegate" shortcut_type="string" state_type="string" undocumented="true" />
  <shortcut name="main_mes_select_delegate_flags" shortcut_type="int" state_type="int" undocumented="true" />

  <!-- Media Bin Shortcuts -->
  <shortcut name="media_delegate" shortcut_type="string" state_type="string" undocumented="true">
    <!-- Select Transition Delegate.  -->
    <!-- Options: "ddr1", "gfx1", "gfx2", "ddr2". "sound". -->
    <!-- May be piped for multi-select: "ddr|ddr2". -->
  </shortcut>
  <shortcut name="media_delegate_flags" shortcut_type="int" state_type="int" undocumented="true">
    <!-- Select Delegate using Base 2 flags. 2^0 is the first option.  -->
  </shortcut>

  <shortcut name="main_shift_blink" shortcut_type="bool" undocumented="true" />

  <shortcut name="request_filebrowser_update" shortcut_type="void" />
  <!-- ***NEW*** -->

  <group>
    <prefix name="media" undocumented="true" />
    <prefix name="ddr1" />
    <prefix name="ddr2" />
    <prefix name="ddr3" />
    <prefix name="ddr4" />
    <prefix name="gfx1" />
    <prefix name="gfx2" />
    <prefix name="sound" />
    <prefix name="focusedddr" undocumented="true" />
    <prefix name="ddr" />
    <!-- Legacy Alias for DDR1 -->
    <prefix name="stills" />
    <!-- Legacy Alias for GFX1 -->
    <prefix name="titles" />
    <!-- Legacy Alias for GFX2 -->

    <suffix name="_playspeed" shortcut_type="int" state_type="int">
      <!-- Change Media Bin Speed to {value} in % of normal.  Valid values are 25-400. -->
    </suffix>
    <suffix name="_play" shortcut_type="void" state_type="bool" web_access="true">
      <!-- Play the target media bin if it is currently stopped. -->
    </suffix>
    <suffix name="_play_toggle" shortcut_type="void">
      <!-- Play the target media bin if it is currently stopped, or stop it if it is currently playing. -->
    </suffix>
    <suffix name="_stop" shortcut_type="void" state_type="bool">
      <!-- Stop the target media bin if it is currently playing.  -->
    </suffix>
    <suffix name="_back" shortcut_type="void">
      <!-- Moves the target media bin's playhead to the previous clip.  -->
    </suffix>
    <suffix name="_forward" shortcut_type="void">
      <!-- Moves the target media bin's playhead to the next clip.  -->
    </suffix>
    <suffix name="_add_clips" shortcut_type="string">
      <!-- Pass {value} as a list of paths to add to the target media bin, separated by "|". <br>Example: "c:\show\intro.avi|c:\show\middle.avi|c:\show\finale.avi". -->
    </suffix>
    <suffix name="_play_file" shortcut_type="string">
      <shortcut_dictionary>
        <entry key="path" type="string" />
        <entry key="index" type="int" />
        <entry key="tag" type="string" />

      </shortcut_dictionary>
      <!-- Plays a clip at {path} in the playlist.  {index} specifies which clip to play if there is more than one clip with the same path in the playlist.  For example, index="1" will play the 2nd clip with this path.  Use {index}=-1 for last clip with this path.  Adds the clip to the playlist if it does not already exist. -->
    </suffix>
    <suffix name="_select_file">
      <shortcut_dictionary>
        <entry key="path" type="string" />
        <entry key="index" type="int" />
        <entry key="tag" type="string" />
      </shortcut_dictionary>
      <!-- Selects the clips with {tag}, or at {path} if tag is not used.  {index} specifies which clip to select if there is more than one clip with the same path/tag in the playlist. Omitting index selects all clips that match the {path}/{tag}. For example, index="1" will play the 2nd clip with this path.  Use {index}=-1 for last clip with this path.  Adds the clip to the playlist if it does not already exist. -->
    </suffix>
    <suffix name="_move_playhead_to_clip" shortcut_type="int">
      <!-- Moves the target media bin's playhead to clip number {value}. -->
    </suffix>
    <suffix name="_select_clip" shortcut_type="int">
      <!-- Selects clip {value} in the current preset. -->
    </suffix>
    <suffix name="_select_clips" shortcut_type="string">
      <!-- {value} is formatted "N1|N2|N3..."<br>  Selects clip N1, N2, and N3 in the current preset, where N1, N2, and N3 are indicies.<br> Example: "8|9|11" -->
    </suffix>
    <suffix name="_select_clips_by_tag" shortcut_type="string">
      <!-- {value} is formatted "N1|N2|N3..."<br>  Selects clip N1, N2, and N3 in the current preset, where N1, N2, and N3 are clip tags.<br> Example: "Intro|Kiki1|RexTitle" -->
    </suffix>
    <suffix name="_select_preset" shortcut_type="int" state_type="int">
      <!-- Selects preset {value}. -->
    </suffix>
    <suffix name="_copy_preset" shortcut_type="int">
      <!-- Copies preset {value}. -->
    </suffix>
    <suffix name="_paste_preset" shortcut_type="int">
      <!-- Pastes preset {value}. -->
    </suffix>
    <suffix name="_delete_preset" shortcut_type="int">
      <!-- Deletes preset {value}. -->
    </suffix>
    <suffix name="_remove_currently_selected_clips" shortcut_type="void">
      <!-- Removes all selected clips from the target media bin. -->
    </suffix>
    <suffix name="_cache_currently_selected_clips" shortcut_type="void">
      <!-- stores selected clips to a temporary cache, useful for drag drop action -->
    </suffix>
    <suffix name="_remove_currently_cached_clips" shortcut_type="void">
      <!-- removes the cached items, useful for drag drop action -->
    </suffix>
    <suffix name="_set_fade_transition_to_currently_selected_clips" shortcut_type="void">
      <!-- sets fade transition to all selected clips -->
    </suffix>
    <suffix name="_relative_time" shortcut_type="double">
      <!-- Scrubs {value} seconds from the current position. -->
    </suffix>
    <suffix name="_relative_frame" shortcut_type="int">
      <!-- Scrubs {value} frames from the current position. -->
    </suffix>
    <suffix name="_relative_frame_full" shortcut_type="int">
      <!-- the same as _relative_frame but lets to scurb pass the in/out point --> <!--***NEW***-->
    </suffix>
    <suffix name="_single_mode_toggle" shortcut_type="void" state_type="bool" web_access="true">
      <!-- Toggle single mode on/off. Overloaded as shortcut_type="bool" for explicit selection. -->
    </suffix>
    <suffix name="_loop_mode_toggle" shortcut_type="void" state_type="bool" web_access="true">
      <!-- Toggle loop on/off. Overloaded as shortcut_type="bool" for explicit selection. -->
    </suffix>
    <suffix name="_autoplay_mode_toggle" shortcut_type="void" state_type="bool" web_access="true">
      <!-- Toggle autoplay on/off. Overloaded as shortcut_type="bool" for explicit selection. -->
    </suffix>
    <suffix name="_next_preset" shortcut_type="void">
      <!-- Selects the next preset in the target media bin.  -->
    </suffix>
    <suffix name="_previous_preset" shortcut_type="void">
      <!-- Selects the previous preset in the target media bin.  -->
    </suffix>
    <suffix name="_shuttle" shortcut_type="int">
      <!-- Shuttle at speed percent {value}.  Valid speed values -1600 through 1600.  0 stops shuttling.  -->
    </suffix>
    <suffix name="_scrub_to_time_from_beginning" shortcut_type="double">
      <!-- Scrubs {value} seconds from the beginning of clip. -->
    </suffix>
    <suffix name="_scrub_to_time_from_end" shortcut_type="double">
      <!-- Scrubs {value} seconds from the end of clip. -->
    </suffix>
    <suffix name="_set_duration" shortcut_type="double">
      <!-- Sets the duration of any selected clips to {value} (in seconds). -->
    </suffix>
    <suffix name="_mark_in" shortcut_type="double">
      <!-- Sets the in point to {value} (in seconds) - or, if called without a value, marks the current position as the clip's in-point. -->
    </suffix>
    <suffix name="_mark_out" shortcut_type="double">
      <!-- Sets the out point {value} (in seconds) - or, if called without a value, marks the current position as the clip's out-point. -->
    </suffix>
    <suffix name="_split" shortcut_type="void">
      <!-- Splits the currently playing clip at the playhead into two clips. -->
    </suffix>
    <suffix name="_mark_in_reset" shortcut_type="void">
      <!-- Sets the in point to 0. -->
    </suffix>
    <suffix name="_mark_out_reset" shortcut_type="void">
      <!-- Sets the out point to the end of the clip. -->
    </suffix>
    <suffix name="_mark_in_out_clear" shortcut_type="void">
      <!-- clears in and out points -->
    </suffix>
    <suffix name="_copy_selected" shortcut_type="int">
      <!-- Copy selected clip to clipboard. -->
      <!--the value is for internal use, it contains some bitwise flags for the copy operation, currently 1 is for automation triggers-->
    </suffix>
    <suffix name="_paste_selected" shortcut_type="int">
      <!-- Paste from clipboard to index {value}. Set to -1 for paste to the end.  Set to -2 for paste to current position.  -->
    </suffix>
    <suffix name="_set_audio_level">
      <!-- Set the volume level of clip {clip_index} in target media bin to {level} dB. -->
      <shortcut_dictionary>
        <entry key="clip_index" type="string" />
        <!-- Supports a barred list of indicies, like "0|4|5|6" -->
        <entry key="clip_tag" type="string" />

        <entry key="level" type="double" />
      </shortcut_dictionary>
    </suffix>
    <suffix name="_send_to_framebuffer">
      <shortcut_dictionary>
        <!-- The index of the file in the playlist -->
        <entry key="playlist_index" type="int" />
        <entry key="clip_tag" type="string" />

        <!-- The framebuffer to send to -->
        <entry key="buffer_number" type="int" />
      </shortcut_dictionary>
    </suffix>
    <suffix name="_set_clip_tag">
      <!-- Set the "tag" identifier of a clip in the playlist -->
      <shortcut_dictionary>
        <entry key="clip_index" type="string" />
        <!-- Supports a barred list of indicies, like "0|4|5|6" -->
        <entry key="clip_tag" type="string" />
      </shortcut_dictionary>
    </suffix>
    <suffix name="_set_clip_alias">
      <!-- Set the display name of a clip in the playlist -->
      <shortcut_dictionary>
        <entry key="clip_index" type="string" />
        <!-- Supports a barred list of indicies, like "0|4|5|6" -->
        <entry key="alias" type="string" />
      </shortcut_dictionary>
    </suffix>
    <suffix name="_set_clip_comment">
      <!-- Set the comment for a clip in the playlist -->
      <shortcut_dictionary>
        <entry key="clip_index" type="string" />
        <!-- Supports a barred list of indicies, like "0|4|5|6" -->
        <entry key="comment" type="string" />
      </shortcut_dictionary>
    </suffix>
    <suffix name="_set_currentframe_as_thumbnail" />
    <suffix name="_request_timecode_update" shortcut_type="void" undocumented="true" />

    <suffix name="_set_clip_speed" type="double" />
    <!--***NEW*** set the speed for selected clips in percentage-->

    <suffix name="_add_to_playlist">
      <shortcut_dictionary>
        <!-- The full path to the file -->
        <entry key="filename" type="string" />

        <!-- Chop index - optional -->
        <entry key="chop" type="int" />

        <entry key="chop_index" type="int" />

        <!-- Add to the current playlist - optional -->
        <entry key="current" type="bool" />

        <!-- Comma separated list of individual playlists to send to - optional -->
        <!-- example: "1, 3, 5, 9,12 -->
        <entry key="playlists" type="string" />
        <!-- optional, defaults to true. -->
        <!-- false prevents the normal selection and potential play head change that happens when clips are added to a DDR -->
        <!-- only relevant to DDR playlists that are currently selected -->
        <entry key="select" type="bool" />
        <!-- Adds an identifier that can be used by some other shortcuts -->
        <entry key="clip_tag" type="string" />
        <!-- If index is negative, missing, or out of bounds = insert at end of playlist -->
        <entry key="index" type="int" />
        <entry key="recording" type="bool" />
        <entry key="recorder_index" type="int" />
        <entry key="thumbnail_path" type="string" />
        <entry key="comment" type="string" />
        <entry key="alias" type="string" />
        <entry key="inpoint" type="double" />
        <entry key="outpoint" type="double" />
      </shortcut_dictionary>
    </suffix>
    <suffix name="_remove_from_playlist">
      <shortcut_dictionary>
        <!-- Comma separated list of individual playlists to send to - optional -->
        <!-- example: "1, 3, 5, 9,12 -->
        <entry key="playlists" type="string" />
        <!-- Negative # = remove last clip, positive # = remove item number n. If positive # is greater than the list size, this command will be ignored. -->
        <entry key="index" type="int" />
        <!-- Remove from the current playlist - optional -->
        <entry key="current" type="bool" />
      </shortcut_dictionary>
    </suffix>
    <suffix name="_add_to_playlist_updated" undocumented="true">
      <shortcut_dictionary>
        <!-- The full path to the file -->
        <entry key="filename" type="string" />
        <entry key="chop_index" type="int" />
        <entry key="timecode" type="double" />
        <entry key="in" type="double" />
        <entry key="out" type="double" />
      </shortcut_dictionary>
    </suffix>
    <suffix name="_add_to_playlist_finished" undocumented="true">
      <shortcut_dictionary>
        <!-- The full path to the file -->
        <entry key="filename" type="string" />
      </shortcut_dictionary>
    </suffix>
    <suffix name="_publish_selected_clips" shortcut_type="void">
      <!-- Sends any selected clips to the Publish queue  -->
    </suffix>

    <suffix name="_set_clip_thumbnail">
      <!--setting a recording clip's thumbnail-->
      <shortcut_dictionary>
        <entry key="record_filename" type="string" />
        <entry key="thumbnail_filename" type="string" />
        <entry key="chop_index" type="int" />
      </shortcut_dictionary>
    </suffix>

    <suffix name="_select_angle_index" type="int" />
    <suffix name="_select_angle_index_delta" type="int" />

    <suffix name="_show_on_switcher" type="void" web_access="true" state_type="bool" />
    <!--***NEW*** start or ends an auto play in ddr depending on the current state-->
    <!--***NEW*** state shows the current state of the on going show on switcher-->

    <!--this set of shortcuts applies to the playing preset in ddr-->
    <suffix name="_set_show_on_switcher_index" type="int" />
    <!--***NEW*** selects the switcher pane for the ddr-autoplay by index-->
    <suffix name="_set_show_on_switcher_in_transition_type" type="int" />
    <!-- ***NEW*** sets the transition type for auto play in, value is an enum of (background=0,cut=1,custom=2)-->
    <suffix name="_set_show_on_switcher_in_transition_index" type="int" />
    <!-- ***NEW*** sets the custom transition index for auto play in, value is 0-8 index of the transition in 9-bin transition popup-->
    <suffix name="_set_show_on_switcher_out_transition_type" type="int" />
    <!-- ***NEW*** sets the transition type for auto play out, value is an enum of (background=0,cut=1,custom=2)-->
    <suffix name="_set_show_on_switcher_out_transition_index" type="int" />
    <!-- ***NEW*** sets the custom transition index for auto play out, value is 0-8 index of the transition in 9-bin transition popup-->

  </group>


  <!-- Title Template related shortcuts -->
  <group>
    <!-- "ddrs" -->
    <prefix name="ddr1" />
    <prefix name="gfx1" />
    <prefix name="gfx2" />
    <prefix name="ddr2" />
    <prefix name="ddr3" />
    <prefix name="ddr4" />
    <prefix name="ddr" />
    <!-- Legacy Alias for DDR1 -->
    <prefix name="stills" />
    <!-- Legacy Alias for GFX1 -->
    <prefix name="titles" />
    <!-- Legacy Alias for GFX2 -->

    <!-- framebuffers-->
    <prefix name="bfr1" />
    <prefix name="bfr2" />
    <prefix name="bfr3" />
    <prefix name="bfr4" />
    <prefix name="bfr5" />
    <prefix name="bfr6" />
    <prefix name="bfr7" />
    <prefix name="bfr8" />
    <prefix name="bfr9" />
    <prefix name="bfr10" />
    <prefix name="bfr11" />
    <prefix name="bfr12" />
    <prefix name="bfr13" />
    <prefix name="bfr14" />
    <prefix name="bfr15" />


    <suffix name="_title_begin_edit" undocumented="true" shortcuts_processing="threaded">
      <!-- Start a batch of edits to a single title. -->
      <!-- requires a matching _title_end_edit -->
      <!-- Can NOT be nested.  Will abort changes if attempted. -->
      <shortcut_dictionary>
        <entry key="playlist_index" type="int" />

        <!-- A user defined tag that has previously been assigned -->
        <entry key="clip_tag" type="string" />

        <!-- intentionally using a dictionary for single entry -->
      </shortcut_dictionary>
    </suffix>

    <suffix name="_title_end_edit" shortcut_type="void" shortcuts_processing="threaded">
      <!-- Ends a batch edit, writes to disk and updates output. -->
      <!-- Ignored if a batch has not yet been started. -->
      <shortcut_dictionary>
        <entry key="playlist_index" type="int" />

        <!-- A user defined tag that has previously been assigned -->
        <entry key="clip_tag" type="string" />

        <!-- intentionally using a dictionary for single entry -->
      </shortcut_dictionary>
    </suffix>

    <suffix name="_title_set_line_property" undocumented="true" shortcuts_processing="threaded">
      <!-- Set properties of a text line. -->
      <shortcut_dictionary>

        <!-- use either index or tag.  Tag overrides index. -->
        <entry key="playlist_index" type="int" />

        <!-- A user defined tag that has previously been assigned -->
        <entry key="clip_tag" type="string" />

        <!-- use either index or tag.  Tag overrides index. -->

        <!-- The index line in the page		-->
        <entry key="line_number" type="int" />

        <!-- A previously tagged (named) line -->
        <entry key="tag" type="string" />


        <entry key="property" type="string" />
        <entry key="value" type="string" />
      </shortcut_dictionary>
    </suffix>

    <suffix name="_title_set_image_property" undocumented="true" shortcuts_processing="threaded">
      <!-- Set properties of an image -->
      <shortcut_dictionary>
        <!-- use either index or tag.  Tag overrides index. -->
        <entry key="playlist_index" type="int" />

        <!-- A user defined tag that has previously been assigned -->
        <entry key="clip_tag" type="string" />

        <!-- use either index or tag.  Tag overrides index. -->

        <!-- The index of the image		-->
        <entry key="image_number" type="int" />

        <!-- Only count changeable images?  defaults to false, index includes all images -->
        <entry key="changeable_only" type="bool" />

        <!-- A previously tagged (named) image -->
        <entry key="tag" type="string" />

        <entry key="property" type="string" />
        <entry key="value" type="string" />
      </shortcut_dictionary>
    </suffix>

    <suffix name="_title_set_layer_enabled" undocumented="true" shortcuts_processing="threaded">
      <!-- Set the enabled state of a layer group. Primarily for animated titles. -->
      <shortcut_dictionary>
        <!-- use either index or tag.  Tag overrides index. -->
        <entry key="playlist_index" type="int" />

        <!-- A user defined tag that has previously been assigned -->
        <entry key="clip_tag" type="string" />

        <!-- The animation preset index you're targeting on this title -->
        <entry key="preset" type="int" />

        <!-- The name of the layer group -->
        <entry key="layer_name" type="string" />

        <!-- Is it enabled or not? -->
        <entry key="value" type="bool" />

      </shortcut_dictionary>
    </suffix>

    <suffix name="_title_select_anim_preset" undocumented="true" shortcuts_processing="threaded">
      <!-- Set the enabled state of a layer group. Primarily for animated titles. -->
      <shortcut_dictionary>
        <!-- use either index or tag.  Tag overrides index. -->
        <entry key="playlist_index" type="int" />

        <!-- A user defined tag that has previously been assigned -->
        <entry key="clip_tag" type="string" />

        <!-- The animation preset index to select -->
        <entry key="preset" type="int" />


      </shortcut_dictionary>
    </suffix>

    <suffix name="_title_line_restore_defaults" undocumented="true" shortcuts_processing="threaded">
      <!-- Restores the font size, font family, bold, italic, underline and all caps -->
      <!-- to the original values -->
      <shortcut_dictionary>

        <!-- use either index or tag.  Tag overrides index. -->
        <entry key="playlist_index" type="int" />

        <!-- A user defined tag that has previously been assigned -->
        <entry key="clip_tag" type="string" />

        <!-- use either index or tag.  Tag overrides index. -->

        <!-- The index line in the page		-->
        <entry key="line_number" type="int" />

        <!-- A previously tagged (named) line -->
        <entry key="tag" type="string" />

      </shortcut_dictionary>
    </suffix>

    <suffix name="_title_image_restore_defaults" undocumented="true" shortcuts_processing="threaded">
      <!-- Restores the fill mode and file name to the original values -->
      <shortcut_dictionary>

        <!-- use either index or tag.  Tag overrides index. -->
        <entry key="playlist_index" type="int" />

        <!-- A user defined tag that has previously been assigned -->
        <entry key="clip_tag" type="string" />

        <!-- use either index or tag.  Tag overrides index. -->

        <!-- The index image in the page		-->
        <entry key="image_number" type="int" />

        <!-- A previously tagged (named) line -->
        <entry key="tag" type="string" />

      </shortcut_dictionary>
    </suffix>

    <suffix name="_title_save_png" undocumented="true" shortcuts_processing="threaded">
      <!-- Save the current state of a title to a png bitmap		-->
      <!-- Requires a full path destination ex: D:\temp\mytitle.png -->
      <shortcut_dictionary>
        <!-- use either index or tag.  Tag overrides index. 		-->
        <entry key="playlist_index" type="int" />

        <!-- A user defined tag that has previously been assigned 	-->
        <entry key="clip_tag" type="string" />

        <!-- full path to save png to -->
        <entry key="destination" type="string" />
      </shortcut_dictionary>
    </suffix>

  </group>

  <!-- Positioning Shortcuts -->
  <group>
    <prefix name="main_a" />
    <prefix name="main_b" />
    <prefix name="main_dskrow" />
    <prefix name="main_dsk1" />
    <prefix name="main_dsk2" />
    <prefix name="main_dsk3" />
    <prefix name="main_dsk4" />
    <prefix name="main_ftb" />
    <prefix name="main_mes_a" />
    <prefix name="main_mes_b" />
    <prefix name="virtualinputs_a" undocumented="true" />
    <prefix name="virtualinputs_b" undocumented="true" />
    <prefix name="virtualinputs_c" undocumented="true" />
    <prefix name="virtualinputs_d" undocumented="true" />
    <prefix name="virtualinputs_dsk1" undocumented="true" />
    <prefix name="virtualinputs_dsk2" undocumented="true" />
    <prefix name="virtualinputs_dsk3" undocumented="true" />
    <prefix name="virtualinputs_dsk4" undocumented="true" />
    <prefix name="virtualinputs_ftb" undocumented="true" />
    <prefix name="v1_a" />
    <prefix name="v1_b" />
    <prefix name="v1_c" />
    <prefix name="v1_d" />
    <prefix name="v1_dsk1" />
    <prefix name="v1_dsk2" />
    <prefix name="v1_dsk3" />
    <prefix name="v1_dsk4" />
    <prefix name="v1_ftb" />
    <prefix name="v2_a" />
    <prefix name="v2_b" />
    <prefix name="v2_c" />
    <prefix name="v2_d" />
    <prefix name="v2_dsk1" />
    <prefix name="v2_dsk2" />
    <prefix name="v2_dsk3" />
    <prefix name="v2_dsk4" />
    <prefix name="v2_ftb" />
    <prefix name="v3_a" />
    <prefix name="v3_b" />
    <prefix name="v3_c" />
    <prefix name="v3_d" />
    <prefix name="v3_dsk1" />
    <prefix name="v3_dsk2" />
    <prefix name="v3_dsk3" />
    <prefix name="v3_dsk4" />
    <prefix name="v3_ftb" />
    <prefix name="v4_a" />
    <prefix name="v4_b" />
    <prefix name="v4_c" />
    <prefix name="v4_d" />
    <prefix name="v4_dsk1" />
    <prefix name="v4_dsk2" />
    <prefix name="v4_dsk3" />
    <prefix name="v4_dsk4" />
    <prefix name="v4_ftb" />
    <prefix name="v5_a" />
    <prefix name="v5_b" />
    <prefix name="v5_c" />
    <prefix name="v5_d" />
    <prefix name="v5_dsk1" />
    <prefix name="v5_dsk2" />
    <prefix name="v5_dsk3" />
    <prefix name="v5_dsk4" />
    <prefix name="v5_ftb" />
    <prefix name="v6_a" />
    <prefix name="v6_b" />
    <prefix name="v6_c" />
    <prefix name="v6_d" />
    <prefix name="v6_dsk1" />
    <prefix name="v6_dsk2" />
    <prefix name="v6_dsk3" />
    <prefix name="v6_dsk4" />
    <prefix name="v6_ftb" />
    <prefix name="v7_a" />
    <prefix name="v7_b" />
    <prefix name="v7_c" />
    <prefix name="v7_d" />
    <prefix name="v7_dsk1" />
    <prefix name="v7_dsk2" />
    <prefix name="v7_dsk3" />
    <prefix name="v7_dsk4" />
    <prefix name="v7_ftb" />
    <prefix name="v8_a" />
    <prefix name="v8_b" />
    <prefix name="v8_c" />
    <prefix name="v8_d" />
    <prefix name="v8_dsk1" />
    <prefix name="v8_dsk2" />
    <prefix name="v8_dsk3" />
    <prefix name="v8_dsk4" />
    <prefix name="v8_ftb" />
    <prefix name="previz_a" />
    <prefix name="previz_b" />
    <prefix name="previz_c" />
    <prefix name="previz_d" />
    <prefix name="previz_dsk1" />
    <prefix name="previz_dsk2" />
    <prefix name="previz_dsk3" />
    <prefix name="previz_dsk4" />
    <prefix name="previz_ftb" />

    <suffix name="_position_x" shortcut_type="double">
      <!-- Positions the layer to {value} on the X Axis. -->
      <!-- Valid values: -500 to 500.  0 is Origin. -->
    </suffix>
    <suffix name="_position_y" shortcut_type="double">
      <!-- Positions the layer to {value} on the Y Axis. -->
      <!-- Valid values: -500 to 500.  0 is Origin. -->
    </suffix>
    <suffix name="_position_x_delta_value" shortcut_type="double">
      <!-- Translates the layer by {value} on the X Axis. -->
    </suffix>
    <suffix name="_position_y_delta_value" shortcut_type="double">
      <!-- Translates the layer by {value} on the X Axis. -->
    </suffix>
    <suffix name="_position_reset" shortcut_type="void">
      <!-- Resets position values to origin. -->
    </suffix>
    <suffix name="_scale_all" shortcut_type="double">
      <!-- Changes the Scale all the axies value to {value}. Valid values: -500 to 500.  100 is Origin. -->
      <shortcut_dictionary>
        <entry key="x" type="double" />
        <entry key="y" type="double" />
        <entry key="z" type="double" />
      </shortcut_dictionary>
    </suffix>
    <suffix name="_scale_x" shortcut_type="double">
      <!-- Changes the Scale X value to {value}. Valid values: -500 to 500.  100 is Origin. -->
    </suffix>
    <suffix name="_scale_y" shortcut_type="double">
      <!-- Changes the Scale Y value to {value}. Valid values: -500 to 500.  100 is Origin. -->
    </suffix>
    <suffix name="_scale_x_delta_value" shortcut_type="double">
      <!-- Changes the Scale X value by {value}. -->
    </suffix>
    <suffix name="_scale_y_delta_value" shortcut_type="double">
      <!-- Changes the Scale Y value by {value}. -->
    </suffix>
    <suffix name="_scale_delta_value" shortcut_type="double">
      <!-- Changes the Scale X & Scale Y values by {value}. -->
    </suffix>
    <suffix name="_scale_reset" shortcut_type="void">
      <!-- Resets all scale values to origin.  -->
    </suffix>
    <suffix name="_rotation_x" shortcut_type="double">
      <!-- Changes the Rotate X value to {value}. Valid Values -360 to 360. -->
    </suffix>
    <suffix name="_rotation_y" shortcut_type="double">
      <!-- Changes the Rotate Y value to {value}. Valid Values -360 to 360. -->
    </suffix>
    <suffix name="_rotation_z" shortcut_type="double">
      <!-- Changes the Rotate Z value to {value}. Valid Values -360 to 360. -->
    </suffix>
    <suffix name="_rotation_x_delta_value" shortcut_type="double">
      <!-- Changes the Rotate X value by {value}. -->
    </suffix>
    <suffix name="_rotation_y_delta_value" shortcut_type="double">
      <!-- Changes the Rotate Y value by {value}. -->
    </suffix>
    <suffix name="_rotation_z_delta_value" shortcut_type="double">
      <!-- Changes the Rotate Z value by {value}. -->
    </suffix>
    <suffix name="_rotation_reset" shortcut_type="void">
      <!-- Resets all rotate values to origin.  -->
    </suffix>
    <suffix name="_left_delta_value" shortcut_type="double">
      <!-- Changes the Crop Left Value by {value}. -->
    </suffix>
    <suffix name="_right_delta_value" shortcut_type="double">
      <!-- Changes the Crop Right Value by {value}. -->
    </suffix>
    <suffix name="_up_delta_value" shortcut_type="double">
      <!-- Changes the Crop Up Value by {value}. -->
    </suffix>
    <suffix name="_down_delta_value" shortcut_type="double">
      <!-- Changes the Crop Down Value by {value}. -->
    </suffix>
    <suffix name="_crop_left_value" shortcut_type="double" undocumented="true">
      <!-- Crop Left Value-->
    </suffix>
    <suffix name="_crop_right_value" shortcut_type="double" undocumented="true">
      <!-- Crop Right Value-->
    </suffix>
    <suffix name="_crop_up_value" shortcut_type="double" undocumented="true">
      <!-- Crop Up Value -->
    </suffix>
    <suffix name="_crop_down_value" shortcut_type="double" undocumented="true">
      <!-- Crop Down Value -->
    </suffix>
    <suffix name="_feather_delta_value" shortcut_type="double">
      <!-- Changes the Crop Feather Value by {value}. -->
    </suffix>
    <suffix name="_feather_value" shortcut_type="double" undocumented="true">
      <!-- Crop Feather Value -->
    </suffix>
    <suffix name="_all_delta_value" shortcut_type="double">
      <!-- Changes all Crop Values by {value}. -->
    </suffix>
    <suffix name="_crop_reset" shortcut_type="void">
      <!-- Resets all crop values to origin.  (Origin is 0.) -->
    </suffix>
    <suffix name="_lock_to_virtualset" shortcut_type="bool">
      <!-- Changes the Lock to Virtual Set Value by {value}. -->
    </suffix>
    <suffix name="_parallex_delta_value" shortcut_type="double">
      <!-- Changes the Tracking parallex Value by {value}. -->
    </suffix>
    <suffix name="_zindex_set_value" shortcut_type="int">
      <!-- ***NEW*** -->
      <!-- Changes the zindex/priority on dsks. -->
    </suffix>
    <suffix name="_positioning_enable" shortcut_type="bool">
      <!-- Sets the Enabled state of Positioning for the target layer to {value}. -->
    </suffix>
    <suffix name="_border_enable" shortcut_type="bool" />
    <suffix name="_border_select_index" shortcut_type="int" />
    <suffix name="_border_set">
      <shortcut_dictionary>
        <entry key="index" type="int" />
        <entry key="path" type="string" />
      </shortcut_dictionary>
    </suffix>
    <suffix name="_crop_enable" shortcut_type="bool">
      <!-- Sets the Enabled state of Crop for the target layer to {value}. -->
    </suffix>
    <suffix name="_keep_aspectratio" shortcut_type="bool">
      <!-- Sets "Lock Aspect Ratio" for the target layer to {value}. -->
    </suffix>
    <suffix name="_apply_to_comp" shortcut_type="bool" undocumented="true">
      <!--if this is not enabled then comp bin wont apply the positioning info-->
    </suffix>

    <suffix name="_select_color_group" shortcut_type="int" state_type="int" />
    <suffix name="_switch_color_group" shortcut_type="int" />
    <suffix name="_toggle_color_group" shortcut_type="void" state_type="bool" />
    <suffix name="_clear_color_group" shortcut_type="void" />
  </group>

  <!-- M/E Shortcuts -->
  <shortcut name="virtualinputs_delegate" shortcut_type="string" state_type="string" undocumented="true">
    <!-- Options: "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8". May be piped for multi-select: "v1|v3". -->
  </shortcut>

  <shortcut name="virtualinputs_delegate_flags" shortcut_type="int" state_type="int" undocumented="true">
    <!-- Select Delegate using Base 2 flags. 2^0 is the first option.  -->
  </shortcut>

  <shortcut name="virtualinputs_follow_preview" shortcut_type="bool" state_type="bool">
    <!-- Sets the "Virtual Inputs Delegate Follows Preview" option to {value}. -->
  </shortcut>
  <shortcut name="virtualinputs_me_preview_current" shortcut_type="void" undocumented="true"> </shortcut>

  <group>
    <prefix name="main">
      <!-- Only uses A & B selection, for setting program and preview. -->
    </prefix>
    <prefix name="virtualinputs" undocumented="true" />
    <prefix name="v1" />
    <prefix name="v2" />
    <prefix name="v3" />
    <prefix name="v4" />
    <prefix name="v5" />
    <prefix name="v6" />
    <prefix name="v7" />
    <prefix name="v8" />
    <prefix name="previz" />

    <suffix name="_a_row" shortcut_type="int" state_type="int">
      <!-- Select source {value} on A row (Program).  Valid values 0 through Number of Sources. -->
    </suffix>
    <suffix name="_b_row" shortcut_type="int" state_type="int">
      <!-- Select source {value} on B row (Preview).  Valid values 0 through Number of Sources. -->
    </suffix>
    <suffix name="_c_row" shortcut_type="int" state_type="int">
      <!-- Select source {value} on C row.  Valid values 0 through Number of Sources. -->
    </suffix>
    <suffix name="_d_row" shortcut_type="int" state_type="int">
      <!-- Select source {value} on D row.  Valid values 0 through Number of Sources. -->
    </suffix>
    <suffix name="_a_row_named_input" shortcut_type="string" state_type="string">
      <!-- Select input with internal name on A row. Example: input1, input2... ddr, ddr2, stills, titles.  -->
    </suffix>
    <suffix name="_b_row_named_input" shortcut_type="string" state_type="string">
      <!-- Select input with internal name on B row. Example: input1, input2... ddr, ddr2, stills, titles. -->
    </suffix>
    <suffix name="_c_row_named_input" shortcut_type="string" state_type="string">
      <!-- Select input with internal name on A row. Example: input1, input2... ddr, ddr2, stills, titles. -->
    </suffix>
    <suffix name="_d_row_named_input" shortcut_type="string" state_type="string">
      <!-- Select input with internal name on B row. Example: input1, input2... ddr, ddr2, stills, titles. -->
    </suffix>
    <suffix name="_rowtoggle_bd_row" shortcut_type="int" state_type="int" undocumented="true"> </suffix>
    <suffix name="_rowtoggle_bd_row_named_input" shortcut_type="string" state_type="string" undocumented="true"> </suffix>
    <suffix name="_rowtoggle_bd_select_color_group" shortcut_type="int" state_type="int" undocumented="true"> </suffix>
    <suffix name="_rowtoggle_ac_row" shortcut_type="int" state_type="int" undocumented="true"> </suffix>
    <suffix name="_rowtoggle_ac_row_named_input" shortcut_type="string" state_type="string" undocumented="true"> </suffix>
    <suffix name="_rowtoggle_ac_select_color_group" shortcut_type="int" state_type="int" undocumented="true"> </suffix>
    <suffix name="_dskrow_select_color_group" shortcut_type="int" state_type="int" undocumented="true"> </suffix>
    <suffix name="_zoom_speed_next_preset" shortcut_type="void" undocumented="true">
      <!-- Select the next zoom speed S, M, or F preset. Currently unimplemented. -->
    </suffix>
    <suffix name="_adjust_zoom" shortcut_type="double" state_type="double">
      <!-- Changes the Animated Zoom duration by {value} seconds. -->
    </suffix>
    <suffix name="_toggle_animate_zoom" shortcut_type="void" state_type="bool">
      <!-- Toggle between a zoom duration and "CUT".<br>Overloaded as shortcut_type="bool". -->
    </suffix>
    <suffix name="_select_zoom_preset" shortcut_type="int">
      <!-- Select preset {value}.  Valid values: 0-9. -->
    </suffix>
    <suffix name="_zoom_speed_value" shortcut_type="double">
      <!-- Performs a zoom by setting the current zoom speed.   -->
      <!-- Valid values are between -1.0 and 1.0. -->
    </suffix>
    <suffix name="_panx_speed_value" shortcut_type="double">
      <!-- Performs a pan by setting the current pan x speed.   -->
      <!-- Valid values are between -1.0 and 1.0. -->
    </suffix>
    <suffix name="_pany_speed_value" shortcut_type="double">
      <!-- Performs a pan by setting the current pan y speed.   -->
      <!-- Valid values are between -1.0 and 1.0. -->
    </suffix>
    <suffix name="_set_zoom_duration" shortcut_type="double">
      <!-- Set the animate zoom duration to {value}.  Valid values are between 0.0 and 120.0 -->
    </suffix>
    <suffix name="_select_bkgd_mode" shortcut_type="void" state_type="bool">
      <!-- Switch the targeted M/E to Mix mode. -->
    </suffix>
    <suffix name="_select_effect_mode" shortcut_type="void" state_type="bool">
      <!-- Switch the targeted M/E to effect mode. -->
    </suffix>

    <suffix name="_set_mix_effect_comp_preset_index" shortcut_type="int" />
    <!-- ***NEW*** -->
    <!-- set preset index for new composite preset combo in mix effect control-->
    <suffix name="_set_mix_effect_comp_preset_file">
      <!-- ***NEW*** -->
      <!--choose a file for a slot in new composite preset combo in mix effect control-->
      <shortcut_dictionary>
        <entry key="index" type="int" />
        <entry key="filename" type="string" />
      </shortcut_dictionary>
    </suffix>
    <suffix name="_select_preset" shortcut_type="int" state_type="int">
      <!-- Selects preset at index {value}. -->
    </suffix>
    <suffix name="_copy_preset" shortcut_type="int">
      <!-- Copies preset {value}. -->
    </suffix>
    <suffix name="_paste_preset" shortcut_type="int">
      <!-- Pastes preset {value}. -->
    </suffix>
    <suffix name="_delete_preset" shortcut_type="int">
      <!-- Deletes preset {value}. -->
    </suffix>
    <suffix name="_set_liveset" shortcut_type="string">
      <!-- Load a preset from path {value}. -->
    </suffix>
    <suffix name="_select_dockpreset" shortcut_type="int">
      <!-- Select preset at index {value}. -->
    </suffix>
    <!-- CompBins -->
    <suffix name="_load_compbin" shortcut_type="int">
      <!-- ***NEW*** -->
      <!-- Select compbin from index {value}. -->
    </suffix>
    <suffix name="_save_to_compbin" shortcut_type="int">
      <!-- ***NEW*** -->
      <!-- Save compbin at index {value}. -->
    </suffix>
    <suffix name="_delete_compbin" shortcut_type="int">
      <!-- ***NEW*** -->
      <!-- Delete compbin at index {value}. -->
    </suffix>
    <suffix name="_rename_compbin">
      <!-- ***NEW*** -->
      <!--Rename compbin at index {value}-->
      <shortcut_dictionary>
        <entry key="index" type="int" />
        <entry key="alias" type="string" />
      </shortcut_dictionary>
    </suffix>
    <suffix name="_open_compbin" shortcut_type="void">
      <!-- ***NEW*** -->
      <!-- Open compbin. -->
    </suffix>
    <suffix name="_close_compbin" shortcut_type="void">
      <!-- ***NEW*** -->
      <!-- Close compbin. -->
    </suffix>
    <suffix name="_set_position">
      <shortcut_dictionary>
        <entry key="panx" type="double" />
        <entry key="pany" type="double" />
        <entry key="zoom" type="double" />
        <entry key="tracking" type="bool" />
      </shortcut_dictionary>
    </suffix>
  </group>

  <!-- Switcher Undo -->
  <shortcut name="switcher_undo" shortcut_type="bool" state_type="bool">
    <!-- Undoes all and reverts to saved Preset for Main & MEs -->
  </shortcut>

  <shortcut name="switcher_redo" shortcut_type="bool" state_type="bool">
    <!-- Undoes all and reverts to saved Preset for Main & MEs -->
  </shortcut>

  <shortcut name="switcher_saveall" shortcut_type="bool" state_type="bool" undocumented="true">
    <!-- Undoes all and reverts to saved Preset for Main & MEs -->
  </shortcut>

  <shortcut name="switcher_ingminxml" shortcut_type="bool" undocumented="true">
    <!-- Start sending Simulated Input data as whole xml -->
  </shortcut>

  <shortcut name="switcher_startminxml" shortcut_type="bool" undocumented="true">
    <!-- Start sending only changed Simulated Input data -->
  </shortcut>

  <!-- PreViz -->
  <shortcut name="copy_main_to_previz" shortcut_type="void" >
    <!-- Copy Main to PREVIZ --> <!-- ###NEWTEK NEW### -->
  </shortcut>

  <shortcut name="copy_previz_to_main" shortcut_type="void" >
    <!-- Copy PREVIZ to Main --> <!-- ###NEWTEK NEW### -->
  </shortcut>

  <shortcut name="copy_me_to_previz" shortcut_type="void" >
    <!-- Copy M/E Tab to PREVIZ --> <!-- ###NEWTEK NEW### -->
  </shortcut>

  <shortcut name="copy_previz_to_me" shortcut_type="void" >
    <!-- Copy PREVIZ to M/E Tab --> <!-- ###NEWTEK NEW### -->
  </shortcut>


  <shortcut name="copy_main_mes_to_previz" shortcut_type="bool" state_type="bool" undocumented="true">
    <!-- Sets the FX Transition Preview Mode Toggle for MAIN or ME (basically for 450/850 CSs) --> <!-- ###NEWTEK NEW### -->
  </shortcut>

  <shortcut name="copy_previz_to_main_mes" shortcut_type="bool" state_type="bool" undocumented="true">
    <!-- Takes the FX Transition Preview State into Output for MAIN or ME (basically for 450/850 CSs) --> <!-- ###NEWTEK NEW### -->
  </shortcut>

  <shortcut name="send_begin_changes_to_process_switcherbtn_msgs" shortcut_type="void" undocumented="true">
    <!-- send_begin_changes_to_process_switcherbtn_msgs -->
  </shortcut>

  <shortcut name="send_finish_changes_to_process_switcherbtn_msgs" shortcut_type="void" undocumented="true">
    <!-- send_finish_changes_to_process_switcherbtn_msgs -->
  </shortcut>

  <shortcut name="main_framebuffer_index" state_type="int" />
  <shortcut name="v1_framebuffer_index" state_type="int" />
  <shortcut name="v2_framebuffer_index" state_type="int" />
  <shortcut name="v3_framebuffer_index" state_type="int" />
  <shortcut name="v4_framebuffer_index" state_type="int" />
  <shortcut name="v5_framebuffer_index" state_type="int" />
  <shortcut name="v6_framebuffer_index" state_type="int" />
  <shortcut name="v7_framebuffer_index" state_type="int" />
  <shortcut name="v8_framebuffer_index" state_type="int" />

  <shortcut name="program_tally" state_type="string" />
  <shortcut name="preview_tally" state_type="String" />

  <!-- Recording Shortcuts -->
  <shortcut name="grab_still">
    <shortcut_dictionary>
      <entry key="sources" type="string" />
      <!-- ',' separated sources to capture, the pattern is [output/input]+[index], like "output1,input1", if this is not set selected sources in the combobox will be used-->
      <entry key="path" type="string" />
      <!-- the root path to store the files, if this is not set then the default session's still path would be used-->
      <entry key="addto" type="bool" />
      <!--wheather or not add images to the selected destinations-->
    </shortcut_dictionary>
    <!-- *** NEW *** Perform a Still Grab. -->
  </shortcut>
  <shortcut name="record_toggle" shortcut_type="int" state_type="int">
    <!-- Toggles recording on/off.<br> Can be supplied w/ {value} == 1 or {value} == 0 to set record state directly. You may turn on bit 1 to signal blinking the shift key (i.e. {value} == 3 for "on and blinking"). -->
  </shortcut>
  <shortcut name="record_start" shortcut_type="void">
    <!-- Starts recording if not already recording.  -->
  </shortcut>
  <shortcut name="record_start_and_chop" shortcut_type="int"> <!--***NEW-->
    <!-- Starts recording if not already recording.  -->
  </shortcut>
  <shortcut name="record_stop" shortcut_type="void">
    <!-- Stops recording if currently recording.  -->
  </shortcut>
  <shortcut name="record_reset" shortcut_type="int"><!--***NEW-->
    <!-- Perform a record start if currently stopped.  Performs a record reset if currently playing.  A record reset discards the current recording and starts a new one. -->
  </shortcut>
  <shortcut name="record_chop" shortcut_type="int">
    <!-- Perform a record start if currently stopped.  Performs a record chop if currently playing. -->
  </shortcut>
  <shortcut name="record_filename" shortcut_type="string" deprecated="true" >
    <!-- Sets the record base filename only for the first recorder row -->
  </shortcut>
  <shortcut name="record_set_filename" undocumented="true" >
    <!-- Sets the record base filename for the recorder row specified by row index -->
    <shortcut_dictionary>
      <entry key="filename" type="string" />
      <entry key="row_index" type="int" />
    </shortcut_dictionary>
  </shortcut>
  <shortcut name="record_setting"> <!--***NEW-->
    <!--uses name and value to set settings in record panel ex. setting:row_1_ischecked value:true or setting:row_1_source value: input1-->
    <shortcut_dictionary>
      <entry key="setting" type="string" />
      <entry key="value" type="string" />
    </shortcut_dictionary>
  </shortcut>

  <!-- Record -->
  <shortcut name="record_chop_source" shortcut_type="int" />
  <!-- the int value is index of the recorder module-->

  <!-- Audiomixer Shortcuts -->
  <group>
    <prefix name="input1" />
    <prefix name="input2" />
    <prefix name="input3" />
    <prefix name="input4" />
    <prefix name="input5" />
    <prefix name="input6" />
    <prefix name="input7" />
    <prefix name="input8" />
    <prefix name="input9" />
    <prefix name="input10" />
    <prefix name="input11" />
    <prefix name="input12" />
    <prefix name="input13" />
    <prefix name="input14" />
    <prefix name="input15" />
    <prefix name="input16" />
    <prefix name="ddr1" />
    <prefix name="ddr2" />
    <prefix name="ddr3" />
    <prefix name="ddr4" />
    <prefix name="sound" />
    <prefix name="effects" />
    <prefix name="master" />
    <prefix name="aux1" />
    <prefix name="aux2" />
    <prefix name="aux3" />
    <prefix name="stream" />
    <prefix name="ddr" />
    <!-- Legacy Alias for DDR1 -->
    <prefix name="stills" />
    <!-- Legacy Alias for GFX1 -->
    <prefix name="titles" />
    <!-- Legacy Alias for GFX2 -->

    <suffix name="_volume" shortcut_type="double" state_type="double" web_access="true">
      <!-- Sets volume level of the target to {value} dB.  State contains current volume. -->
    </suffix>
    <suffix name="_adjust_volume" shortcut_type="double">
      <!-- Changes volume of the target by {value} dB. -->
    </suffix>
    <suffix name="_mute" shortcut_type="bool" state_type="bool" web_access="true">
      <!-- Turns target Mute On/Off. -->
    </suffix>
    <suffix name="_mute_toggle" shortcut_type="void" state_type="bool">
      <!-- Turns target Mute On/Off. -->
    </suffix>
    <suffix name="_solo" shortcut_type="bool" state_type="bool" web_access="true">
      <!-- Turns target Solo On/Off. -->
    </suffix>
    <suffix name="_solo_toggle" shortcut_type="void" state_type="bool" >
      <!-- *** NEW *** -->
      <!-- Turns target Solo On/Off. -->
    </suffix>
    <suffix name="_enable_noisegate" shortcut_type="bool" state_type="bool" web_access="true">
      <!-- Set enable noisegate to true or false. -->
    </suffix>
    <suffix name="_noisegate_level" shortcut_type="double" state_type="double" web_access="true">
      <!-- Set noisegate level to {value}. -->
    </suffix>

    <suffix name="_audio_latency" shortcut_type="double" state_type="double">
      <!-- Set audio input latency to (value) frames. -->
    </suffix>
    <suffix name="_follow" shortcut_type="bool" state_type="bool">
      <!-- Turns input Follow On/Off. -->
    </suffix>
    <suffix name="_follow_toggle" state_type="bool" undocumented="true">
      <!-- Toggles input Follow On/Off  -->
    </suffix>
    <suffix name="_follow_sources" shortcut_type="string" state_type="string">
      <!-- Sets sources to follow by switcher column number, use pipes as delimiters.  Ex: "3|4|8|9|15" -->
    </suffix>
    <suffix name="_talk" shortcut_type="bool" state_type="bool">
      <!-- Turns input Talk On/Off. -->
    </suffix>
    <suffix name="_talk_toggle" shortcut_type="void" state_type="bool">
      <!-- Turns input Talk On/Off. -->
    </suffix>
    <suffix name="_name" shortcut_type="string" />

    <suffix name="_enable_equalizer" shortcut_type="bool" state_type="bool" web_access="true">
      <!-- Set enable equalizer to {value}. -->
    </suffix>
    <suffix name="_enable_compressor" shortcut_type="bool" state_type="bool" web_access="true">
      <!-- Set enable compressor to {value}. -->
    </suffix>
    <suffix name="_reset_equalizer" shortcut_type="void" state_type="void">
      <!-- Resets Equalizer values to default.  -->
    </suffix>
    <suffix name="_reset_compressor" shortcut_type="void" state_type="void">
      <!-- Resets Compressor values to default. -->
    </suffix>
    <suffix name="_pan_0" shortcut_type="double" state_type="double" web_access="true">
      <!-- Sets pan on the first (left) channel to {value}. -->
    </suffix>
    <suffix name="_pan_1" shortcut_type="double" state_type="double" web_access="true">
      <!-- Sets pan on the second (right) channel to {value}. -->
    </suffix>
    <suffix name="_eq_slider_1" shortcut_type="double" state_type="double" web_access="true">
      <!-- Set EQ slider 1 to {value}. -->
    </suffix>
    <suffix name="_eq_slider_0" shortcut_type="double" state_type="double" web_access="true">
      <!-- Set EQ slider 0 to {value}. -->
    </suffix>
    <suffix name="_eq_slider_1" shortcut_type="double" state_type="double" web_access="true">
      <!-- Set EQ slider 1 to {value}. -->
    </suffix>
    <suffix name="_eq_slider_2" shortcut_type="double" state_type="double" web_access="true">
      <!-- Set EQ slider 2 to {value}. -->
    </suffix>
    <suffix name="_eq_slider_3" shortcut_type="double" state_type="double" web_access="true">
      <!-- Set EQ slider 3 to {value}. -->
    </suffix>
    <suffix name="_eq_slider_4" shortcut_type="double" state_type="double" web_access="true">
      <!-- Set EQ slider 4 to {value}. -->
    </suffix>
    <suffix name="_eq_slider_5" shortcut_type="double" state_type="double" web_access="true">
      <!-- Set EQ slider 5 to {value}. -->
    </suffix>
    <suffix name="_eq_slider_6" shortcut_type="double" state_type="double" web_access="true">
      <!-- Set EQ slider 6 to {value}. -->
    </suffix>
    <suffix name="_gain_0" shortcut_type="double" state_type="double" web_access="true">
      <!-- Set Gain Slider 0 to {value}. -->
    </suffix>
    <suffix name="_gain_1" shortcut_type="double" state_type="double" web_access="true">
      <!-- Set Gain Slider 1 to {value}. -->
    </suffix>
    <suffix name="_gain_2" shortcut_type="double" state_type="double" web_access="true">
      <!-- Set Gain Slider 2 to {value}. -->
    </suffix>
    <suffix name="_gain_3" shortcut_type="double" state_type="double" web_access="true">
      <!-- Set Gain Slider 3 to {value}. -->
    </suffix>
    <suffix name="_gain_4" shortcut_type="double" state_type="double" web_access="true">
      <!-- Set Gain Slider 4 to {value}. -->
    </suffix>
    <suffix name="_gain_5" shortcut_type="double" state_type="double" web_access="true">
      <!-- Set Gain Slider 5 to {value}. -->
    </suffix>
    <suffix name="_gain_6" shortcut_type="double" state_type="double" web_access="true">
      <!-- Set Gain Slider 6 to {value}. -->
    </suffix>
    <suffix name="_gain_7" shortcut_type="double" state_type="double" web_access="true">
      <!-- Set Gain Slider 7 to {value}. -->
    </suffix>

    <suffix name="_routing_mask_0" shortcut_type="ulong" state_type="ulong">
      <!-- *** NEW *** -->
      <!-- Set the 1st routing mask to {value}. -->
      <!-- Routing Mask is a 64 bit unsigned integer. -->
      <!-- Little-endian Indexing each bit, i, produces a boolean representing the routing of output (i / 8) to input (i % 8). -->
    </suffix>
    <suffix name="_routing_mask_1" shortcut_type="ulong" state_type="ulong">
      <!-- *** NEW *** -->
      <!-- Set the 2nd routing mask to {value}. -->
      <!-- Routing Mask is a 64 bit unsigned integer. -->
      <!-- Little-endian Indexing each bit, i, produces a boolean representing the routing of output (i / 8) to input (i % 8). -->
    </suffix>
    <suffix name="_routing_mask_2" shortcut_type="ulong" state_type="ulong">
      <!-- *** NEW *** -->
      <!-- Set the 3rd routing mask to {value}. -->
      <!-- Routing Mask is a 64 bit unsigned integer. -->
      <!-- Little-endian Indexing each bit, i, produces a boolean representing the routing of output (i / 8) to input (i % 8). -->
    </suffix>
    <suffix name="_routing_mask_3" shortcut_type="ulong" state_type="ulong">
      <!-- *** NEW *** -->
      <!-- Set the 4th routing mask to {value}. -->
      <!-- Routing Mask is a 64 bit unsigned integer. -->
      <!-- Little-endian Indexing each bit, i, produces a boolean representing the routing of output (i / 8) to input (i % 8). -->
    </suffix>
    <suffix name="_cl_knob_0" shortcut_type="double" state_type="double" web_access="true">
      <!-- Set Compressor knob 0 to {value}. -->
    </suffix>
    <suffix name="_cl_knob_1" shortcut_type="double" state_type="double" web_access="true">
      <!-- Set Compressor knob 1 to {value}. -->
    </suffix>
    <suffix name="_cl_knob_2" shortcut_type="double" state_type="double" web_access="true">
      <!-- Set Compressor knob 2 to {value}. -->
    </suffix>
    <suffix name="_cl_knob_3" shortcut_type="double" state_type="double" web_access="true">
      <!-- Set Compressor knob 3 to {value}. -->
    </suffix>
    <suffix name="_cl_knob_4" shortcut_type="double" state_type="double" web_access="true">
      <!-- Set Compressor knob 4 to {value}. -->
    </suffix>
  </group>

  <!-- Hardware Input Shortcuts -->
  <group>
    <prefix name="hw1" />
    <prefix name="hw2" />
    <prefix name="hw3" />
    <prefix name="hw4" />
    <prefix name="hw5" />
    <prefix name="hw6" />
    <prefix name="hw7" />
    <prefix name="hw8" />

    <suffix name="_input_type" shortcut_type="string" state_type="string">
      <!-- Set the connection type. <br>Options: mic, mic_single, mic_and_phantom, line, aes3, sdi_embedded, line_quad. -->
    </suffix>
    <suffix name="_trim" shortcut_type="double" state_type="double">
      <!--****NEW****-->
      <!-- Set trim of the harware input mic to {value} dB.  State contains current trim. -->
    </suffix>
  </group>

  <shortcut name="audiomixer_solo" shortcut_type="string" state_type="string">
    <!-- Allows multiselect control of solo. Example value: "input1|input3|ddr2"
         Outputs not supported with multiselect -->
  </shortcut>
  <shortcut name="audiomixer_save_to_emem" shortcut_type="int" >
    <!-- Store audiomixer state into mem preset at index {value}. ***NEW*** -->
  </shortcut>
  <shortcut name="audiomixer_load_from_emem" shortcut_type="int" >
    <!-- Select audiomixer mem preset at index {value}. ***NEW*** -->
  </shortcut>
  <shortcut name="audiomixer_restore_default_emem" shortcut_type="int">
    <!-- Delete audiomixer preset at index {value}. ***NEW*** -->
  </shortcut>

  <shortcut name="phones_adjust_volume" shortcut_type="double" state_type="double">
    <!-- Change headphones volume level by {value} dB.  -->
  </shortcut>
  <shortcut name="phones_volume" shortcut_type="double" state_type="double">
    <!-- Set headphones volume level to {value} dB. -->
  </shortcut>

  <!-- Other Shortcuts -->
  <shortcut name="streaming_toggle" shortcut_type="int">
    <!-- With no value, toggles recording on/off.  Use {value} == 0 to force disable streaming.  Use {value} == 1 to force enabled. -->
  </shortcut>
  <shortcut name="switcher_begin_changes" shortcut_type="void" state_type="bool">
    <!-- switcher_begin_changes intercepts all messages to the switcher until switcher_finish_and_send_changes is sent. -->
    <!-- Allows 'batching' of switcher commands.  -->
  </shortcut>
  <shortcut name="switcher_finish_and_send_changes" shortcut_type="void">
    <!-- switcher_begin_changes intercepts all messages to the switcher until switcher_finish_and_send_changes is sent. -->
    <!-- Allows 'batching' of switcher commands.  -->
  </shortcut>

  <shortcut name="display_version" shortcut_type="void">
    <!-- Display your version of TriCaster in the Error Flash.  -->
  </shortcut>

  <shortcut name="me_preview_index" shortcut_type="int" state_type="int" undocumented="true" supports_logging="false">
    <!-- Change the ME previewed.  Takes from 0-7. -->
  </shortcut>

  <shortcut name="set_router_mapping">
    <!-- Map router input  to  a TC/3P input. -->
    <shortcut_dictionary>
      <entry key="router_input" type="int" />
      <entry key="system_input" type="int" />
      <entry key="input" type="int" deprecated="true" />
      <!-- For legacy support only -->
      <entry key="output" type="int" deprecated="true" />
      <!-- For legacy support only -->
      <entry key="tcinput" type="int" deprecated="true" />
      <!-- For legacy support only -->
    </shortcut_dictionary>
  </shortcut>

  <shortcut name="add_ip_camera">
    <!-- Adds a new ip camera with given name and address {value}. -->
    <shortcut_dictionary>
      <entry key="camera_name" type="string" />
      <entry key="address" type="string" />
    </shortcut_dictionary>
  </shortcut>

  <shortcut name="net_source" shortcut_type="string">
    <!-- Sets the source for net input 1 -->
  </shortcut>

  <shortcut name="net2_source" shortcut_type="string">
    <!-- Sets the source for net input 2 -->
  </shortcut>

  <!-- ************TODO : DOCUMENT ME************* -->
  <shortcut name="video_set_ip_source">
    <!-- Select a new ip source for the switcher IP source input button. -->
    <shortcut_dictionary>
      <entry key="index" type="int" />
      <entry key="source_name" type="string" />
    </shortcut_dictionary>
  </shortcut>

    <!-- ************TODO : DOCUMENT ME************* -->
  <shortcut name="audio_set_ip_source">
    <!-- Select a new ip source for the switcher IP source input button. -->
    <shortcut_dictionary>
      <entry key="index" type="int" />
      <entry key="source_name" type="string" />
    </shortcut_dictionary>
  </shortcut>

  <!-- ************TODO : DOCUMENT ME************* -->
  <shortcut name="force_low_bandwidth_input">
    <!-- Select a new ip source for the switcher IP source input button. -->
    <shortcut_dictionary>
      <entry key="index" type="int" />
      <entry key="value" type="bool" />
    </shortcut_dictionary>
  </shortcut>

  <!-- ************TODO : DOCUMENT ME************* -->
  <shortcut name="set_autodetect_psf_input">
    <shortcut_dictionary>
      <entry key="hw_index" type="int" />
      <entry key="value" type="bool" />
    </shortcut_dictionary>
  </shortcut>

  <shortcut name="send_to_service">\
    <!-- sends a message to a saved service -->
    <shortcut_dictionary>
      <entry key="destination" type="string" />
      <entry key="message" type="string" />
    </shortcut_dictionary>
  </shortcut>

  <shortcut name="me_pane_show" internal_only="true" shortcut_type="bool" supports_logging="false">
    <!-- Changes the visibility of the ME Pane to {value}. -->
  </shortcut>
  <shortcut name="me_pane_toggle" internal_only="true" shortcut_type="void" supports_logging="false">
    <!-- Toggles the visibility of the ME Pane. -->
  </shortcut>

  <shortcut name="switcher_toggle_livematte">
    <shortcut_dictionary>
      <entry key="input" type="string" />
      <entry key="is_enabled" type="bool" />
    </shortcut_dictionary>
    <state_dictionary>
      <entry key="input" type="string" />
      <entry key="is_enabled" type="bool" />
    </state_dictionary>
  </shortcut>
  <shortcut name="switcher_toggle_procamp">
    <shortcut_dictionary>
      <entry key="input" type="string" />
      <entry key="is_enabled" type="bool" />
    </shortcut_dictionary>
    <state_dictionary>
      <entry key="input" type="string" />
      <entry key="is_enabled" type="bool" />
    </state_dictionary>
  </shortcut>

  <group>
    <prefix name="input1" />
    <prefix name="input2" />
    <prefix name="input3" />
    <prefix name="input4" />
    <prefix name="input5" />
    <prefix name="input6" />
    <prefix name="input7" />
    <prefix name="input8" />
    <prefix name="input9" />
    <prefix name="input10" />
    <prefix name="input11" />
    <prefix name="input12" />
    <prefix name="input13" />
    <prefix name="input14" />
    <prefix name="input15" />
    <prefix name="input16" />
    <prefix name="input17" />
    <prefix name="input18" />
    <prefix name="input19" />
    <prefix name="input20" />
    <prefix name="input21" />
    <prefix name="input22" />
    <prefix name="input23" />
    <prefix name="input24" />
    <prefix name="input25" />
    <prefix name="input26" />
    <prefix name="input27" />
    <prefix name="input28" />
    <prefix name="input29" />
    <prefix name="input30" />
    <prefix name="input31" />
    <prefix name="input32" />
    <prefix name="input33" />
    <prefix name="input34" />
    <prefix name="input35" />
    <prefix name="input36" />
    <prefix name="input37" />
    <prefix name="input38" />
    <prefix name="input39" />
    <prefix name="input40" />
    <prefix name="input41" />
    <prefix name="input42" />
    <prefix name="input43" />
    <prefix name="input44" />
    <prefix name="net1" />
    <prefix name="net2" />
    <prefix name="ddr1" />
    <prefix name="ddr2" />
    <prefix name="ddr3" />
    <prefix name="ddr4" />
    <prefix name="gfx1" />
    <prefix name="gfx2" />
    <prefix name="v1" />
    <prefix name="v2" />
    <prefix name="v3" />
    <prefix name="v4" />
    <prefix name="v5" />
    <prefix name="v6" />
    <prefix name="v7" />
    <prefix name="v8" />
    <prefix name="previz" />
    <prefix name="bfr1" />
    <prefix name="bfr2" />
    <prefix name="bfr3" />
    <prefix name="bfr4" />
    <prefix name="bfr5" />
    <prefix name="bfr6" />
    <prefix name="bfr7" />
    <prefix name="bfr8" />
    <prefix name="bfr9" />
    <prefix name="bfr10" />
    <prefix name="bfr11" />
    <prefix name="bfr12" />
    <prefix name="bfr13" />
    <prefix name="bfr14" />
    <prefix name="bfr15" />
    <prefix name="ddr" />
    <!-- Legacy Alias for DDR1 -->
    <prefix name="stills" />
    <!-- Legacy Alias for GFX1 -->
    <prefix name="titles" />
    <!-- Legacy Alias for GFX2 -->
    <prefix name="net" />
    <!-- Legacy Alias for Net1 -->

    <suffix name="_long_name" shortcut_type="string" state_type="string" />
    <suffix name="_short_name" shortcut_type="string" state_type="string" />
    <suffix name="_audio_name" shortcut_type="string" state_type="string" />
    <suffix name="_comment" shortcut_type="string" state_type="string" />
    <suffix name="_toggle_livematte" shortcut_type="bool" state_type="bool" />
    <suffix name="_toggle_procamp" shortcut_type="bool" state_type="bool" />
  </group>

  <shortcut name="datalink_set" shortcuts_processing="threaded">
    <!-- Sets (or adds) a DataLink Key/Value pair. -->
    <shortcut_dictionary>
      <entry key="key" type="string" />
      <entry key="value" type="string" />
    </shortcut_dictionary>
  </shortcut>


  <!-- Macro(s) -->
  <!-- ***NEW*** These are not documented yet! -->
  <shortcut name="play_macro_byid" shortcut_type="dynamic" />
  <shortcut name="play_macro_byname" shortcut_type="dynamic" />
  <shortcut name="play_normalized_macro" shortcut_type="dynamic" undocumented="true" />


  <!-- stops all macros including the multistep macros -->
  <shortcut name="stop_all_macros" shortcut_type="void" />


  <!-- stops all macros with a given name -->
  <shortcut name="stop_macro_byname" shortcut_type="string" />


  <!-- stops all macros with a given id ( since id's should be unique, will only stop a single macro ) -->
  <shortcut name="stop_macro_byid" shortcut_type="string" />


  <!-- continues a multistep macro, from the last wait command -->
  <shortcut name="continue_pausedmacro" shortcut_type="void" />

  <!-- ***NEW*** Have TriCaster trigger a "Fire and Forget" HTTP GET request. This should only be used for sending commands to devices, the response is unavailable. -->
  <shortcut name="http_request" shortcut_type="void" />

  <!-- ***NEW*** The show tab shortcuts are now documented for Third Parties. But they are not recorded. -->

  <shortcut name="show_ddr1_tab" shortcut_type="void" supports_logging="false" />
  <shortcut name="show_ddr2_tab" shortcut_type="void" supports_logging="false" />
  <shortcut name="show_ddr3_tab" shortcut_type="void" supports_logging="false" />
  <shortcut name="show_ddr4_tab" shortcut_type="void" supports_logging="false" />
  <shortcut name="show_gfx1_tab" shortcut_type="void" supports_logging="false" />
  <shortcut name="show_gfx2_tab" shortcut_type="void" supports_logging="false" />
  <shortcut name="show_sound_tab" shortcut_type="void" supports_logging="false" />
  <shortcut name="show_ptz_tab" shortcut_type="void" supports_logging="false" />
  <shortcut name="show_buffers_tab" shortcut_type="void" supports_logging="false" />
  <shortcut name="show_audiomixer" shortcut_type="void" supports_logging="false" />
  <shortcut name="show_v1_tab" shortcut_type="void" supports_logging="false" />
  <shortcut name="show_v2_tab" shortcut_type="void" supports_logging="false" />
  <shortcut name="show_v3_tab" shortcut_type="void" supports_logging="false" />
  <shortcut name="show_v4_tab" shortcut_type="void" supports_logging="false" />
  <shortcut name="show_v5_tab" shortcut_type="void" supports_logging="false" />
  <shortcut name="show_v6_tab" shortcut_type="void" supports_logging="false" />
  <shortcut name="show_v7_tab" shortcut_type="void" supports_logging="false" />
  <shortcut name="show_v8_tab" shortcut_type="void" supports_logging="false" />
  <shortcut name="show_previz_tab" shortcut_type="void" supports_logging="false" />
  <shortcut name="show_external_audiomixer" shortcut_type="void" supports_logging="false" />
  <shortcut name="show_internal_audiomixer" shortcut_type="void" supports_logging="false" />

  <!-- NDI State info -->
  <shortcut name="ndi_sources" state_type="string" />
  <shortcut name="ndi_video_selected_sources" state_type="string" />
  <shortcut name="ndi_audio_selected_sources" state_type="string" />

  <!-- Raw Joystick Data For Brainstorm -->
  <shortcut name="joystickraw_x" state_type="string" />
  <shortcut name="joystickraw_y" state_type="string" />
  <shortcut name="joystickraw_z" state_type="string" />
  <shortcut name="joystickraw_button" state_type="bool" />

  <!-- ============== Mason-Dixon-Documentation Line, or MDD Line =============  -->
  <!-- ============== All shortcuts above this line are documented ============= -->
  <!-- ============== All shortcuts below this line are undocumented (internal use, surface specific) ============= -->

  <!-- Old Procamp and Livematte Handlers -->
  <shortcut name="switcher_toggle_livematte_flags" shortcut_type="int" state_type="int" undocumented="true">
    <!-- Sets a livematte state for all inputs at once using binary flags. -->
    <!-- Ex: {value} & 2^0 turns Input 1 livematte on/off.  -->
    <!-- {value} & 2^13 turns titles livematte on/off. -->
    <!-- {value} == 8193 (or 2^0 + 2^13) sets livematte on for Input 1 and Titles only.  -->
  </shortcut>
  <shortcut name="switcher_toggle_procamp_flags" shortcut_type="int" state_type="int" undocumented="true">
    <!-- Sets a procamp state for all inputs at once using binary flags. -->
    <!-- Ex: {value} & 2^0 turns Input 1 procamp on/off.  -->
    <!-- {value} & 2^13 turns titles procamp on/off. -->
    <!-- {value} == 8193 (or 2^0 + 2^13) sets procamp on for Input 1 and Titles only.  -->
  </shortcut>

  <!-- Euphonics Surface Shortcuts -->
  <shortcut name="track_selection_upper" shortcut_type="int" state_type="int" undocumented="true" />
  <shortcut name="track_selection_lower" shortcut_type="int" state_type="int" undocumented="true" />
  <shortcut name="preset_select_upper" shortcut_type="int" state_type="int" undocumented="true" />

  <!-- Launch Exe Shortcut -->
  <shortcut name="launch_and_log_exe" state_type="int" undocumented="true">
    <shortcut_dictionary>
      <entry key="file_path" type="string" />
      <entry key="command_line" type="string" />
    </shortcut_dictionary>
  </shortcut>

  <!-- Ext -->
  <shortcut name="ext" shortcut_type="dynamic" undocumented="true" />
  <shortcut name="gpi" shortcut_type="dynamic" undocumented="true" />
  <shortcut name="netpvw" shortcut_type="dynamic" undocumented="true" />
  <!-- "net1-net44 commands are added at runtime" -->

  <!-- Production "8 in 1" shortcuts -->
  <shortcut undocumented="true" name="inputs_change_connection_type" internal_only="true" shortcut_type="void" supports_logging="false" />
  <!-- Must be sent with keyboard shortcut -->
  <shortcut undocumented="true" name="audioinputs_change_mode" internal_only="true" shortcut_type="void" supports_logging="false" />
  <!-- Must be sent with keyboard shortcut -->

  <!-- Dsk Delegates -->
  <shortcut undocumented="true" name="main_dskrow_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="main_dskrow_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="virtualinputs_select_dskrow_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="virtualinputs_select_dskrow_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="v1_dskrow_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v1_dskrow_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="v2_dskrow_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v2_dskrow_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="v3_dskrow_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v3_dskrow_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="v4_dskrow_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v4_dskrow_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="v5_dskrow_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v5_dskrow_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="v6_dskrow_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v6_dskrow_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="v7_dskrow_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v7_dskrow_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="v8_dskrow_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v8_dskrow_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="previz_dskrow_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="previz_dskrow_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />

  <!-- RowToggle Delegates -->
  <shortcut undocumented="true" name="virtualinputs_select_rowtoggle_ac_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="virtualinputs_select_rowtoggle_ac_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="v1_rowtoggle_ac_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v1_rowtoggle_ac_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="v2_rowtoggle_ac_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v2_rowtoggle_ac_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="v3_rowtoggle_ac_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v3_rowtoggle_ac_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="v4_rowtoggle_ac_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v4_rowtoggle_ac_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="v5_rowtoggle_ac_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v5_rowtoggle_ac_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="v6_rowtoggle_ac_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v6_rowtoggle_ac_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="v7_rowtoggle_ac_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v7_rowtoggle_ac_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="v8_rowtoggle_ac_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v8_rowtoggle_ac_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="previz_rowtoggle_ac_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="previz_rowtoggle_ac_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />

  <!-- RowToggle Delegates -->
  <shortcut undocumented="true" name="virtualinputs_select_rowtoggle_bd_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="virtualinputs_select_rowtoggle_bd_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="v1_rowtoggle_bd_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v1_rowtoggle_bd_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="v2_rowtoggle_bd_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v2_rowtoggle_bd_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="v3_rowtoggle_bd_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v3_rowtoggle_bd_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="v4_rowtoggle_bd_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v4_rowtoggle_bd_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="v5_rowtoggle_bd_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v5_rowtoggle_bd_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="v6_rowtoggle_bd_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v6_rowtoggle_bd_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="v7_rowtoggle_bd_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v7_rowtoggle_bd_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="v8_rowtoggle_bd_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v8_rowtoggle_bd_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="previz_rowtoggle_bd_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="previz_rowtoggle_bd_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />

  <!-- Transition Delegates -->
  <shortcut undocumented="true" name="main_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="main_delegate_add_selection" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="main_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="virtualinputs_select_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="virtualinputs_select_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="v1_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v1_delegate_add_selection" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v1_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="v2_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v2_delegate_add_selection" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v2_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="v3_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v3_delegate_add_selection" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v3_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="v4_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v4_delegate_add_selection" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v4_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="v5_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v5_delegate_add_selection" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v5_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="v6_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v6_delegate_add_selection" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v6_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="v7_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v7_delegate_add_selection" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v7_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="v8_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v8_delegate_add_selection" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="v8_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="previz_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="previz_delegate_add_selection" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="previz_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />

  <!-- CS45 Switcher Delegates -->
  <shortcut undocumented="true" name="swit45_delegate" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="swit45_delegate_flags" shortcut_type="int" state_type="int" />

  <shortcut undocumented="true" name="swit45_toprow" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="swit45_a_row" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="swit45_b_row" shortcut_type="int" state_type="int" />

  <shortcut undocumented="true" name="swit45_toprow_named_input" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="swit45_a_row_named_input" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="swit45_b_row_named_input" shortcut_type="string" state_type="string" />

  <shortcut undocumented="true" name="swit45_take" shortcut_type="void" state_type="bool" />
  <shortcut undocumented="true" name="swit45_auto" shortcut_type="void" state_type="bool" />
  <shortcut undocumented="true" name="swit45_background_take" shortcut_type="void" state_type="bool" />
  <shortcut undocumented="true" name="swit45_dsk1_take" shortcut_type="void" state_type="bool" />
  <shortcut undocumented="true" name="swit45_dsk2_take" shortcut_type="void" state_type="bool" />
  <shortcut undocumented="true" name="swit45_ftb_take" shortcut_type="void" state_type="bool" />
  <shortcut undocumented="true" name="swit45_background_auto" shortcut_type="void" state_type="bool" />
  <shortcut undocumented="true" name="swit45_dsk1_auto" shortcut_type="void" state_type="bool" />
  <shortcut undocumented="true" name="swit45_dsk2_auto" shortcut_type="void" state_type="bool" />
  <shortcut undocumented="true" name="swit45_ftb_auto" shortcut_type="void" state_type="bool" />
  <shortcut undocumented="true" name="swit45_reversed_auto" shortcut_type="void" state_type="bool" />
  <shortcut undocumented="true" name="swit45_value" shortcut_type="double" state_type="double" />
  <shortcut undocumented="true" name="swit45_transition_delegate" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="swit45_transition_delegate_flags" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="swit45_switch_transition" shortcut_type="int" />
  <shortcut undocumented="true" name="swit45_adjust_speed" shortcut_type="double" state_type="double" />
  <shortcut undocumented="true" name="swit45_toggle_reverse" shortcut_type="bool" />
  <shortcut undocumented="true" name="swit45_speed_next_preset" shortcut_type="void" />


  <!-- Shatner Connected -->
  <shortcut undocumented="true" name="shatner_connected" internal_only="true" state_type="bool" supports_logging="false" />
  <!-- Shatner State -->

  <!-- Shatner Delegates -->
  <shortcut undocumented="true" name="shatner_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="shatner_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />

  <shortcut undocumented="true" name="shatner_playspeed" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="shatner_tbar" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="shatner_play" internal_only="true" shortcut_type="void" state_type="bool" />
  <shortcut undocumented="true" name="shatner_stop" internal_only="true" shortcut_type="void" state_type="bool" />
  <shortcut undocumented="true" name="shatner_back" internal_only="true" shortcut_type="void" />
  <shortcut undocumented="true" name="shatner_forward" internal_only="true" shortcut_type="void" />
  <shortcut undocumented="true" name="shatner_fastjog" internal_only="true" shortcut_type="void" />
  <shortcut undocumented="true" name="shatner_relative_frame" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="shatner_relative_frame_full" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="shatner_select_preset" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="shatner_loop_mode_toggle" internal_only="true" shortcut_type="void" state_type="bool" />
  <shortcut undocumented="true" name="shatner_single_mode_toggle" internal_only="true" shortcut_type="void" state_type="bool" />
  <shortcut undocumented="true" name="shatner_autoplay_mode_toggle" internal_only="true" shortcut_type="void" state_type="bool" />
  <shortcut undocumented="true" name="shatner_mark_in" internal_only="true" shortcut_type="void" />
  <shortcut undocumented="true" name="shatner_mark_out" internal_only="true" shortcut_type="void" />
  <shortcut undocumented="true" name="shatner_remove_currently_selected_clips" internal_only="true" shortcut_type="void" />
  <shortcut undocumented="true" name="shatner_copy_selected" internal_only="true" shortcut_type="void" />
  <shortcut undocumented="true" name="shatner_paste_selected" internal_only="true" shortcut_type="void" />
  <shortcut undocumented="true" name="shatner_record_reset" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="shatner_record_chop" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="shatner_both" internal_only="true" shortcut_type="void" state_type="bool" />
  <shortcut undocumented="true" name="shatner_esc" internal_only="true" shortcut_type="void" />
  <shortcut undocumented="true" name="shatner_scrub_to_time_from_end" internal_only="true" shortcut_type="double" />


  <!-- Timewarp Connected -->
  <shortcut undocumented="true" name="timewarp_connected" internal_only="true" state_type="bool" />
  <!-- Timewarp State -->

  <!-- Timewarp Delegates -->
  <shortcut undocumented="true" name="timewarp_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="timewarp_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />

  <shortcut undocumented="true" name="timewarp_playspeed" internal_only="true" shortcut_type="int" state_type="int" />
  <shortcut undocumented="true" name="timewarp_play" internal_only="true" shortcut_type="void" state_type="bool" />
  <shortcut undocumented="true" name="timewarp_stop" internal_only="true" shortcut_type="void" state_type="bool" />
  <shortcut undocumented="true" name="timewarp_back" internal_only="true" shortcut_type="void" />
  <shortcut undocumented="true" name="timewarp_forward" internal_only="true" shortcut_type="void" />
  <shortcut undocumented="true" name="timewarp_relative_time" internal_only="true" shortcut_type="double" />
  <shortcut undocumented="true" name="timewarp_relative_frame" internal_only="true" shortcut_type="long" />
  <shortcut undocumented="true" name="timewarp_relative_frame_full" internal_only="true" shortcut_type="long" />
  <shortcut undocumented="true" name="timewarp_single_mode_toggle" internal_only="true" shortcut_type="void" state_type="bool" />
  <shortcut undocumented="true" name="timewarp_shuttle" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="timewarp_scrub_to_time_from_beginning" internal_only="true" shortcut_type="double" />
  <shortcut undocumented="true" name="timewarp_scrub_to_time_from_end" internal_only="true" shortcut_type="double" />
  <shortcut undocumented="true" name="timewarp_reset" internal_only="true" shortcut_type="int" />
  <!-- always perform a record start/reset-->
  <shortcut undocumented="true" name="timewarp_chop" internal_only="true" shortcut_type="int" />
  <!-- always perform a record chop-->
  <shortcut undocumented="true" name="timewarp_remove_currently_selected_clips" internal_only="true" shortcut_type="void" />
  <shortcut undocumented="true" name="timewarp_autoplay_mode_toggle" internal_only="true" shortcut_type="void" state_type="bool" />
  <shortcut name="timewarp_mark_in" shortcut_type="double" internal_only="true" />
  <shortcut name="timewarp_mark_out" shortcut_type="double" internal_only="true" />

  <!-- Joystick Mode Delegates -->
  <shortcut undocumented="true" name="joystickmode_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="joystickmode_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />

  <shortcut undocumented="true" name="joystickmode_x" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joystickmode_x_fine" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joystickmode_y" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joystickmode_y_fine" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joystickmode_z" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joystickmode_z_fine" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joystickmode_x_alt" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joystickmode_x_alt_fine" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joystickmode_y_alt" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joystickmode_y_alt_fine" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joystickmode_reset" internal_only="true" shortcut_type="void" />
  <shortcut undocumented="true" name="joystick_reset_vectors" internal_only="true" shortcut_type="void" />
  <shortcut undocumented="true" name="joysticklc11_0_reset_vectors" internal_only="true" shortcut_type="void" />
  <shortcut undocumented="true" name="joysticklc11_1_reset_vectors" internal_only="true" shortcut_type="void" />

  <!-- Joystick Delegates -->
  <shortcut undocumented="true" name="joystick_delegate" internal_only="true" shortcut_type="string" state_type="string" />
  <shortcut undocumented="true" name="joystick_delegate_flags" internal_only="true" shortcut_type="int" state_type="int" />

  <shortcut undocumented="true" name="joystick_position_x" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joystick_position_y" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joystick_position_z" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joystick_rotation_x" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joystick_rotation_y" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joystick_rotation_z" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joystick_crop_x" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joystick_crop_y" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joystick_crop_z" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joystick_crop_x_alt" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joystick_crop_y_alt" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joystick_crop_z_alt" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joystick_rotation_reset" internal_only="true" shortcut_type="void" />
  <shortcut undocumented="true" name="joystick_position_reset" internal_only="true" shortcut_type="void" />
  <shortcut undocumented="true" name="joystick_scale_reset" internal_only="true" shortcut_type="void" />
  <shortcut undocumented="true" name="joystick_crop_reset" internal_only="true" shortcut_type="void" />
  <shortcut undocumented="true" name="joystick_reset_positioning" internal_only="true" shortcut_type="void" />

  <!-- called to pass raw joystick data on -->
  <!-- added for brainstorm -->
  <shortcut undocumented="true" name="joystick_rotation_x_alt" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joystick_rotation_y_alt" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joystick_rotation_z_alt" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joystick_position_x_alt" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joystick_position_y_alt" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joystick_position_z_alt" internal_only="true" shortcut_type="int" />

  <!-- Product Surface Shortcuts -->
  <group>
    <prefix name="cs450_bank1" />
    <prefix name="cs450_bank2" />
    <prefix name="cs450_bank3" />
    <prefix name="cs850_bank1" />
    <prefix name="cs850_bank2" />
    <prefix name="cs850_bank3" />
    <prefix name="cs8000_bank1" />
    <prefix name="cs8000_bank2" />
    <prefix name="cs8000_bank3" />

    <suffix undocumented="true" name="_main_b_row" internal_only="true" shortcut_type="int" state_type="int" />
    <suffix undocumented="true" name="_main_a_row" internal_only="true" shortcut_type="int" state_type="int" />
    <suffix undocumented="true" name="_main_dskrow_select" internal_only="true" shortcut_type="int" state_type="int" />
    <suffix undocumented="true" name="_virtualinputs_dskrow_select" internal_only="true" shortcut_type="int" state_type="int" />
    <suffix undocumented="true" name="_virtualinputs_a_row" internal_only="true" shortcut_type="int" state_type="int" />
    <suffix undocumented="true" name="_virtualinputs_b_row" internal_only="true" shortcut_type="int" state_type="int" />
    <suffix undocumented="true" name="_virtualinputs_c_row" internal_only="true" shortcut_type="int" state_type="int" />
    <suffix undocumented="true" name="_virtualinputs_d_row" internal_only="true" shortcut_type="int" state_type="int" />
    <suffix undocumented="true" name="_virtualinputs_dsk1_select" internal_only="true" shortcut_type="int" state_type="int" />
    <suffix undocumented="true" name="_virtualinputs_dsk2_select" internal_only="true" shortcut_type="int" state_type="int" />
    <suffix undocumented="true" name="_virtualinputs_dsk3_select" internal_only="true" shortcut_type="int" state_type="int" />
    <suffix undocumented="true" name="_virtualinputs_dsk4_select" internal_only="true" shortcut_type="int" state_type="int" />
    <suffix undocumented="true" name="_virtualinputs_rowtoggle_ac_row" internal_only="true" shortcut_type="int" state_type="int" />
    <suffix undocumented="true" name="_virtualinputs_rowtoggle_bd_row" internal_only="true" shortcut_type="int" state_type="int" />
    <suffix undocumented="true" name="_toggle_livematte" internal_only="true" shortcut_type="int" state_type="int" />
    <suffix undocumented="true" name="_toggle_procamp" internal_only="true" shortcut_type="int" state_type="int" />
  </group>

  <!-- LC11 Joystick Shortcuts -->
  <shortcut undocumented="true" name="joysticklc11_position_0_x" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joysticklc11_position_0_y" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joysticklc11_position_0_z" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joysticklc11_scale_0_x" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joysticklc11_scale_0_y" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joysticklc11_position_1_x" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joysticklc11_position_1_y" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joysticklc11_position_1_z" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joysticklc11_scale_1_x" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joysticklc11_scale_1_y" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joysticklc11_0_virtual_zoom" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joysticklc11_1_virtual_zoom" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joysticklc11_0_virtual_zoom" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joysticklc11_1_virtual_zoom" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joysticklc11_1_panx" internal_only="true" shortcut_type="int" />
  <shortcut undocumented="true" name="joysticklc11_1_pany" internal_only="true" shortcut_type="int" />

  <!-- Shortcuts for LC11 Virtual Zoom -->
  <shortcut undocumented="true" name="switcher_virtual_input_pgm_zoom_speed_value" shortcut_type="double" />
  <shortcut undocumented="true" name="switcher_virtual_input_prev_zoom_speed_value" shortcut_type="double">
  </shortcut>


  <!-- Display workspace shortcuts -->
  <shortcut undocumented="true" name="select_workspace" shortcut_type="string" />

  <!-- Surface Interface Shortcuts -->
  <shortcut undocumented="true" name="surface_connected" internal_only="true" shortcut_type="string" supports_logging="false" />
  <shortcut undocumented="true" name="surface_disconnected" internal_only="true" shortcut_type="string" supports_logging="false" />
  <shortcut undocumented="true" name="network_surface_update" internal_only="true" shortcut_type="string" supports_logging="false" />

  <shortcut undocumented="true" name="tbar_light_top" internal_only="true" state_type="void" supports_logging="false" />
  <shortcut undocumented="true" name="tbar_light_bottom" internal_only="true" state_type="void" supports_logging="false" />
  <shortcut undocumented="true" name="blink_tbar_light_top" internal_only="true" state_type="void" supports_logging="false" />
  <shortcut undocumented="true" name="blink_tbar_light_bottom" internal_only="true" state_type="void" supports_logging="false" />

  <!-- Surface Brightness -->
  <shortcut undocumented="true" name="on_state_lighting" internal_only="true" state_type="int" supports_logging="false" />

  <!-- Tbar Colors -->
  <shortcut undocumented="true" name="tbar1_rgb" internal_only="true" state_type="string" supports_logging="false" />
  <shortcut undocumented="true" name="tbar1_red" internal_only="true" state_type="int" supports_logging="false" />
  <shortcut undocumented="true" name="tbar1_green" internal_only="true" state_type="int" supports_logging="false" />
  <shortcut undocumented="true" name="tbar1_blue" internal_only="true" state_type="int" supports_logging="false" />

  <shortcut undocumented="true" name="tbar2_rgb" internal_only="true" state_type="string" supports_logging="false" />
  <shortcut undocumented="true" name="tbar2_red" internal_only="true" state_type="int" supports_logging="false" />
  <shortcut undocumented="true" name="tbar2_green" internal_only="true" state_type="int" supports_logging="false" />
  <shortcut undocumented="true" name="tbar2_blue" internal_only="true" state_type="int" supports_logging="false" />

  <shortcut undocumented="true" name="dp_data">
    <shortcut_dictionary>
      <entry key="serialization_name" type="string" />
      <entry key="property_name" type="string" />
      <entry key="property_value" type="string" />
    </shortcut_dictionary>
  </shortcut>


  <shortcut undocumented="true" name="liveset_editor_zoom" shortcut_type="double" state_type="double" />

  <!-- Send ErrorFlash -->
  <shortcut undocumented="true" name="display_error" type="string" supports_logging="false">
    <!-- Display an error message to the Error Flash. -->
  </shortcut>
  <shortcut undocumented="true" name="display_message" type="string" supports_logging="false">
    <!-- Display a low priority message to the Error Flash. -->
  </shortcut>

  <shortcut undocumented="true" name="share_add">
    <shortcut_dictionary>
      <entry key="filename" type="string" />
      <!-- Required -->
      <entry key="title" type="string" />
      <!-- Title -->
      <entry key="comment" type="string" />
      <!-- Comment -->
      <entry key="inpoint" type="double" />
      <!-- In point in seconds -->
      <entry key="outpoint" type="double" />
      <!-- Out point in seconds -->
      <entry key="asstill" type="bool" />
      <!-- Set to true to send a still grab of the clip instead.   Default to false if empty -->
      <entry key="presets" type="string" />
      <!-- provides a pipe seperated collection of preset names to use as the default 'selected' values -->
    </shortcut_dictionary>
    <!-- Add a file to the Publishing Queue -->
  </shortcut>

  <shortcut undocumented="true" name="framebuffer_add" shortcuts_processing="threaded">
    <shortcut_dictionary>
      <entry key="index" type="int" />
      <!-- Required - Not zero indexed, valid values are 1 through number of framebuffers. -->
      <entry key="filename" type="string" />
      <!-- Required - Full path to file. -->
    </shortcut_dictionary>
    <!-- Add a file to a frame buffer -->
  </shortcut>

  <shortcut undocumented="true" name="framebuffer_clear" shortcuts_processing="threaded">
    <shortcut_dictionary>
      <entry key="index" type="int" />
      <!-- Required - Not zero indexed, valid values are 1 through number of framebuffers. -->
    </shortcut_dictionary>
    <!-- Unloads the current file in a framebuffer. Reduces memory usage. -->
  </shortcut>

  <shortcut undocumented="true" name="framebuffer_speed">
    <shortcut_dictionary>
      <entry key="index" type="int" />
      <!-- Required - Not zero indexed, valid values are 1 through number of framebuffers. -->
      <entry key="speed" type="double" />
      <!-- Required alternate - Valid values are 0.0 to 5.0 with 0.0 being pause, 1.0 being 1x speed, 5.0 being 5x speed.  -->
      <entry key="speed_name" type="string" />
      <!-- Required alternate - Valid values are "pause", "slow", "medium", "fast" or "p", "s", "m", "f" equating to 0.0x, 0.5x, 1.0x and 2.0x -->
    </shortcut_dictionary>
    <!-- Sets playback speed for animated files. Value is set but ignored for stills. -->
  </shortcut>

  <shortcut undocumented="true" name="framebuffer_preset_assign" shortcuts_processing="threaded">
    <shortcut_dictionary>
      <entry key="index" type="int" />
      <!-- Required - Not zero indexed, valid values are 1 through number of framebuffers, also -2 (selects either the first empty preset or 	overwrites the last preset if all are full -->
      <entry key="preset_index" type="int" />
      <!-- Required - Valid values are 1 through number of presets (currently 9) -->
      <entry key="filename" type="string" />
      <!-- Required - Full path to file. -->
      <entry key="select" type="bool" />
      <!-- Optional - Also select in framebuffer.  Defaults to false. -->
    </shortcut_dictionary>
    <!-- Assigns file presets to a framebuffer. -->
  </shortcut>

  <shortcut undocumented="true" name="framebuffer_preset_select" shortcuts_processing="threaded">
    <shortcut_dictionary>
      <entry key="index" type="int" />
      <!-- Required - Not zero indexed, valid values are 1 through number of framebuffers. -->
      <entry key="preset_index" type="int" />

      <!-- Required - Valid values are 1 through number of presets (currently 9) -->
    </shortcut_dictionary>
    <!-- Selects an existing framebuffer file preset. Very literal. It will clear output if the preset is empty. -->
  </shortcut>

  <shortcut undocumented="true" name="framebuffer_play">
    <shortcut_dictionary>
      <entry key="index" type="int" />
      <!-- Required - Not zero indexed, valid values are 1 through number of framebuffers. -->
    </shortcut_dictionary>
    <!-- Trigger play of the current framebuffer item from first frame.  Ignored if not a single play animation. -->
  </shortcut>

  <shortcut undocumented="true" name="framebuffer_stop">
    <shortcut_dictionary>
      <entry key="index" type="int" />
      <!-- Required - Not zero indexed, valid values are 1 through number of framebuffers. -->
    </shortcut_dictionary>
    <!-- Stop play of the current framebuffer item and rewind to first frame.  Ignored if not a single play animation. -->
  </shortcut>

  <!--Output Config-->
  <shortcut undocumented="true" name="set_output_config_video_source">
    <shortcut_dictionary>
      <entry key="output_index" type="int" />
      <entry key="source_index" type="int" />
      <entry key="source_id" type="string" />
    </shortcut_dictionary>
  </shortcut>

  <shortcut undocumented="true" name="set_output_config_audio_source">
    <shortcut_dictionary>
      <entry key="output_index" type="int" />
      <entry key="source_index" type="int" />
    </shortcut_dictionary>
  </shortcut>

  <shortcut undocumented="true" name="set_output_config_signal_type">
    <shortcut_dictionary>
      <entry key="output_index" type="int" />
      <entry key="source_index" type="int" />
    </shortcut_dictionary>
  </shortcut>

  <shortcut undocumented="true" name="set_output_config_analog_connection">
    <shortcut_dictionary>
      <entry key="output_index" type="int" />
      <entry key="source_index" type="int" />
    </shortcut_dictionary>
  </shortcut>

  <shortcut undocumented="true" name="set_output_config_settings">
    <shortcut_dictionary>
      <entry key="output_index" type="int" />
      <entry key="settings_name" type="string" />
      <entry key="settings_value" type="string" />
    </shortcut_dictionary>
  </shortcut>

  <shortcut name="input_connection">
    <shortcut_dictionary>
      <entry key="index" type="int" />
      <entry key="format" type="string" />
    </shortcut_dictionary>
  </shortcut>

  <!--PTZ-->
  <shortcut name="ptzs_delegate" shortcut_type="string" state_type="string" undocumented="true" />
  <shortcut name="ptzs_delegate_flags" shortcut_type="int" state_type="int" undocumented="true" />
  <shortcut name="ptzs_select_preset" shortcut_type="int" state_type="int" undocumented="true" />
  <shortcut name="ptzs_set_speed_delta_value" shortcut_type="double" undocumented="true" />
  <shortcut name="ptzs_save_preset" shortcut_type="double" undocumented="true" />
  <shortcut name="ptzs_x_value" shortcut_type="double" undocumented="true" />
  <shortcut name="ptzs_y_value" shortcut_type="double" undocumented="true" />
  <shortcut name="ptzs_z_value" shortcut_type="double" undocumented="true" />
  <shortcut name="ptzs_z_alt_value" shortcut_type="double" undocumented="true" />
  <shortcut name="cs_shift_changed" internal_only="true" shortcut_type="void" />
  <shortcut name="cs_alt_changed" internal_only="true" shortcut_type="void" />
  <shortcut name="cs_ctrl_changed" internal_only="true" shortcut_type="void" />
  <shortcut name="cs_macro_changed" internal_only="true" shortcut_type="void" />
  <group>
    <prefix name="ptz_input1" />
    <prefix name="ptz_input2" />
    <prefix name="ptz_input3" />
    <prefix name="ptz_input4" />
    <prefix name="ptz_input5" />
    <prefix name="ptz_input6" />
    <prefix name="ptz_input7" />
    <prefix name="ptz_input8" />

    <suffix name="_set_config_enabled" shortcut_type="bool" />
    <suffix name="_set_config_protocol" shortcut_type="string" />
    <suffix name="_set_config_connection_type" shortcut_type="int" />
    <suffix name="_set_config_serial_port" shortcut_type="string" />
    <suffix name="_set_config_serial_baudrate" shortcut_type="int" />
    <suffix name="_set_config_ip_address" shortcut_type="string" />
    <suffix name="_set_config_ip_port" shortcut_type="int" />
    <suffix name="_set_config_chain_index" shortcut_type="int" />
    <suffix name="_set_config_flipped" shortcut_type="bool" />
    <suffix name="_connect" shortcut_type="void" />
    <suffix name="_disconnect" shortcut_type="void" />

    <suffix name="_set_tilt_value" shortcut_type="double" />
    <suffix name="_set_pan_value" shortcut_type="double" />
    <suffix name="_set_pan_and_tilt_value">
      <shortcut_dictionary>
        <entry key="pan" type="double" />
        <entry key="tilt" type="double" />
      </shortcut_dictionary>
    </suffix>
    <suffix name="_set_zoom_value" shortcut_type="double" />
    <suffix name="_set_focus_value" shortcut_type="double" />
    <suffix name="_set_focus_delta" shortcut_type="double" />
    <suffix name="_set_auto_focus" shortcut_type="bool" />
    <suffix name="_toggle_auto_focus" shortcut_type="void" />
    <suffix name="_set_iris_value" shortcut_type="double" />
    <suffix name="_set_auto_iris" shortcut_type="bool" />
    <suffix name="_set_white_balance" shortcut_type="string" />
    <suffix name="_select_preset" shortcut_type="int" />
    <suffix name="_set_preset_changes_locked" shortcut_type="bool" />
    <suffix name="_set_speed_value" shortcut_type="double" />
    <suffix name="_set_speed_delta_value" shortcut_type="double" />
    <suffix name="_set_pan_speed" shortcut_type="double" />
    <suffix name="_set_tilt_speed" shortcut_type="double" />
    <suffix name="_set_zoom_speed" shortcut_type="double" />
    <suffix name="_reset_speeds" shortcut_type="void" />
    <suffix name="_save_preset" shortcut_type="void" />

    <!-- bundle ptz changes -->
    <suffix name="_set_ptz_value">
      <shortcut_dictionary>
        <entry key="pan" type="double" />
        <entry key="tilt" type="double" />
        <entry key="zoom" type="double" />
        <entry key="joystick" type="bool" />
      </shortcut_dictionary>
    </suffix>

  </group>

  <shortcut undocumented="true" name="surface_macro" internal_only="true" type="string" />

  <!-- does nothing, just allows you to type a comment into the value field -->
  <shortcut name="comment" shortcut_type="string" />

</shortcuts>

Leave a Reply

Your email address will not be published. Required fields are marked *