» Remote (VVVV)
This site relies heavily on Javascript. You should enable it if you want the full experience. Learn more.

Remote (VVVV)

Downloads

The Remote (VVVV) module was recently reviewed for debugging and has not yet been tested excessively enough to recommended it for any other use but research on the module itself.

Current Version:

v3 2008-07-09 12:15
bug fixed in XML creation subpatchhttp://vvvv.org/tiki-download_file.php?fileId=1710"style="color:#006699;Remote (VVVV) Quick Demo </a>

Older Versions:

v2 2008-06-17 16:54
uses XML instead of CSV files
Remote (VVVV) Quick Demo
Remote (VVVV Remote)
Interface (VVVV GUI)

v1 2008-04-02 15:44
initial public release
Remote (VVVV) Quick Demo
Remote (VVVV Remote)
Interface (VVVV GUI)

Remote (VVVV)

What?

Remote (VVVV) is a module that lets you remote-control your IOBoxes (Value Advanced) - meaning: change (and retreive) their values without any explicit link to the box. To get a quick idea of what this is about, check the following patch before diving into the explanation of how this is done:

Remote (VVVV) Quick Demo

What Exactly?

The Remote (VVVV) node keeps a list of the IOBoxes you registered with it. This list - called Remote List - contains the relative (to the location of the list file) path to the patch the IOBox is located in, a unique ID, the original descriptive name of the IOBox, and the current value. This data is then used to change the IOBoxes values via the PatchAlias, GetPatch, XPath and SetPatch nodes of VVVV. To do this effectively, the Remote (VVVV) node has an Interface Pin which receives commands from any Interface that speaks the very simple protocoll. This setup has two main purposes:

  • it allows for the quick & easy exposition of critical parameters inside complex patches without hardwiring through the entire hierarchy
  • it can be controlled by any Interface, wether it is
    • operated on a local machine
    • a HTTP Server / Client solution
    • any external program that has access to the Remote List file

Although the Remote (VVVV) node is encapsulated & simplified as much as possible, there are some things to know about operating it which might cause confusion if you are unfamiliar with them; you are kindly urged to read the following manual to make the most out of your new Remote (VVVV).

Operation Instructions

A Word on Loading / Saving

The Remote (VVVV) node saves all the data necessary to identify registered IOBoxes in the Remote List. Keeping the list in the buffer eats some resources; to save these the list is closed on Startup, and can also be closed manually or by an Interface. Be aware:

  • The List can be closed without being saved!
  • The List can be re-loaded without being saved!
  • Registering an IOBox on an un-loaded list will start a new list and overwrite the old one!

See 'Overwriting existing lists' for the safety pin on this behavior.

Add / Remove Entries

IOBoxes can be registered and unregistered with the Remote List by selecting them and banging the 'Register Selection' pin on the Remote (VVVV). A quick way to do this is to open an Inspektor, attach it to the Remote (VVVV), select the IOBox in question and bang the pin directly on the Inspektor. The recommended more comfortable solution is connecting a Keyboard (System Global) Shortcut to the pin; Control + Alt + R is suggested. There are two important caveats to this:

  • Only IOBoxes whose values have changed at least once can be registered.
  • You must save the patch after registering your IOBoxes, otherwise the unique id (served by the Remote (VVVV) node and saved in the descriptive names of the IOBoxes) will be lost

Changing values without an Interface

The values of registered IOBoxes can be changed at any time since there are no hardwired link to their Inputs. But for the change to be reflected in the Remote List, the pin 'Listen for Changes' must be enabled. Any changes made to a registered IOBox while this pin is toggled on will be saved with the Remote List instantly.

Loading / Saving without an Interface

The pin 'Set List Values OnOpen' opens the Remote List on Startup, sets all registered IOBoxes to the values saved in the list and closes the list afterwards. This is the recommended mode when changing values by accessing the list file with an external program. To manually (re)load, save & close the Remote List or apply the values found in the list to the IOBoxes in the running patches, use the 'Manual' pins found on the Remove (VVVV).

Overwriting existing lists

If an existing Remote List is not loaded on startup and new IOBoxes are registered, the Remote (VVVV) node will assume that a new list should be started and overwrite the old one. When this happens unintentional, it is quite aggravating. If you don't want this to happen, enable the 'Keep Open (Safe Mode)' pin. It causes the Remote List to be opened on Startup and prevents it from being closed during runtime.

Interface Details

Supplied Interface

The Config (VVVV GUI) Interface supplied with the Remote (VVVV) makes exemplary use of the simple protocoll for communication. Connect it in the same way found in the Quick Demo found above. Control Keys are:

  • F12 to activate / toggle saving screen when already active
  • ESCAPE to abort at any time
  • ENTER to confirm selected option on saving screen
  • UP / DOWN Cursor Keys to select value / saving screen option
  • LEFT / RIGHT Cursor Keys to change value / cancel/confim in saving screen
  • hold CONTROL, SHIFT and ALT to alter value change increment

Protocoll Command Descriptions

The 'Interface Input' pin on the Remote (VVVV) acts on commands formatted as Strings. The following commands are implemented:

load

(Re)Loads the Remote List from file.

save

Saves the current content of the list buffer to the file.

set

Sets all registered IOBoxes found in the current list buffer to the values found in the current list buffer.

close

Empties the current list buffer.

RemoteId, "Values"

Sets the value(s) of the IOBox registered under the RemoteID to those found inside the "". To set spreads, simply separate the values within the "" with commas.

Lengthy Technical Specification

Specification

Remote (VVVV) registers & unregisters selected IOBoxes from the Remote List which contains the relative paths to the patches these IOBoxes can be found in, their Descriptive Names & Y Input Values. Remote (VVVV) can be told to listen for any manual value changes in registered IOBoxes and update the list accordingly. Remote (VVVV) outputs all the data in the Remote List so that any Interface can relate them to the user. Remote (VVVV) can be told to change specific values by any Interface that is capable of its small interfacing protocoll.

Function notice

Remote (VVVV) uses XML-nodes (PatchAlias, GetPatch, XPath, SetPatch) for its main functions; most of them involve some sort of search mechanism to sift through all running patches and find the registered IOBoxes to set / retreive their Y Input Values. It is vital for these functions that the Remote List is loaded (buffered) at the time of execution. Most importantly, if you want to register / unregister any Boxes to / from an existing list, make sure that is is currently loaded to prevent overwriting an existing file.

Pin Descriptions

Unregister All

Unregisters all IOBoxes and returns their Descriptive Names to normal. Needs a loaded Remote List to operate on.

Listen for Changes

Checks for changes to registered IOBoxes in the active patch and updates the Remote List if any are found.

Register Selection

Adds / Removes Entries to / from the Remote List. Only selected IOBoxes with Descriptive Names can be added to the list. Also, their Value must have changed at least once (otherwise it can't be found in the XML of the patch).

Interface Input

for communicating with an Interface. Allows for loading, setting or changing values from, saving and closing the Remote List. The specific protocoll can be found to the right.

Manual Load
Manual Save
Manual Set from List
Manual Close

Manual copies of operations on the Remote List usually performed by an Interface. Note that the Remote List gets saved automatically whenever an IOBox is (un)registered or changed while 'Listen for Changes' is turned on. For Operation without an Interface, if - for example - the Remote List file is changed by an external program, you can incorporate these changes by loading, setting from & closing the Remote List again. Be aware that loading takes 2 frames (1 to load, 2 to buffer), while setting takes 1 frame for each value to set (XPath isn't spreadable yet). There is a security mechanism that prevents closing before all XML operations a completed. The close command will be buffered, so there is no need to look after that on the users side.

Set List Values OnOpen

is equivalent to a Manual Load, Manual Set from List & Manual Close on startup. Recommended to initiate the patch properly even when the Interface is sleeping.

Keep Open (Safe Mode)

Registering and unregistering IOBoxes only works when the Remote List is loaded; registering any IOBox while no list is loaded will result in overwriting any previous list. Safe Mode prevents the list from being closed; neither the Interface nor the Manual Close can do anything about that.

List File

The file to write the Remote List to. The file MUST be supplied with an absolute path, and it MUST reside in the same directory as the root patch. All patches with registered IOBoxes inside of them must reside in the same or deeper hierarchy than the file because Remote (VVVV) saves their locations in relation to the list file.

Comments

Add a comment

GReat stuff! Really impressing... :]

i only stumbled over that you need to save the patch after changing selections.
it should be possible in the future to save a patch by xml command however i didn't try it yet. maybe that would be cool. however maybe you also don't want to save your patch everytime when changing selections (cause there is only one backup of your patch ~.xml...)

had some trouble to get it working with the newest private beta but now it looks good...

gregsn


thank you!
now that xpath is spreadable, there is some more work for me to do on this :)

diki

anonymous user login

Shoutbox

~1d ago

joreg: vvvvTv S0204 is out: Custom Widgets with Dear ImGui: https://youtube.com/live/nrXfpn5V9h0

~1d ago

joreg: New user registration is currently disabled as we're moving to a new login provider: https://visualprogramming.net/blog/2024/reclaiming-vvvv.org/

~9d ago

joreg: vvvvTv S02E03 is out: Logging: https://youtube.com/live/OpUrJjTXBxM

~11d ago

~12d ago

joreg: Follow TobyK on his Advent of Code: https://www.twitch.tv/tobyklight

~16d ago

joreg: vvvvTv S02E02 is out: Saving & Loading UI State: https://www.youtube.com/live/GJQGVxA1pIQ

~16d ago

joreg: We now have a presence on LinkedIn: https://www.linkedin.com/company/vvvv-group

~23d ago

joreg: vvvvTv S02E01 is out: Buttons & Sliders with Dear ImGui: https://www.youtube.com/live/PuuTilbqd9w

~30d ago

joreg: vvvvTv S02E00 is out: Sensors & Servos with Arduino: https://visualprogramming.net/blog/2024/vvvvtv-is-back-with-season-2/

~30d ago