Delay Value (before passthrough) node

I am finding multiple instances where it would be really beneficial to have a node that receives an input of some type (list, image, fire, or other value like rotational or positional data), holds onto the value and delays passing it through the composition until after a set period of time has lapsed.

One of the main instances is when I want to create a staggered domino type effect for multiple elements (not exact duplicates of each other). I’m currently trying to use Measure Time>Is Greater Than>Became True along with a Hold Value node to get this type of effect and have found my composition becoming huge, sluggish and messy and I’m still not quite achieving the effect I’m aiming for. This particular composition would become very close to about 1/2 the size if a node like “Delay Value” existed and I know it would streamline a few other ideas I had as well.

Is it a big task to create a node that can cache a value for a set interval before passing it downstream like I just described?

@cwilms-loyalist, my Team-Vuo-mates and I started talking about this and realized we didn’t understand what you meant by a “staggered domino type effect”. When we’re figuring out how exactly a node and its ports should work, we’ve found it’s really helpful necessary to have some concrete examples in mind of how people are going to use the node.

When you say “staggered domino type effect”, are you imagining something like the following scenarios?

  1. You have several side-by-side screens, and you want to display a series of images with each image first appearing on the leftmost screen for 1 second, then the next screen for 1 second, etc.
  2. You have several side-by-side screens, and you want to do something similar to (1) but with a twist — instead of displaying the same image in each screen, you want to display the original image on the leftmost screen, a warped image in the next screen, the image dimension on the next screen, etc. — basically, putting the image through a pipeline of different conversions.

If that’s basically what you had in mind, would the attached compositions (scenario 1 = dominoscreens-enqueue.vuo, scenario 2 = dominoscreens-enqueuedifferenttypes.vuo) work for you? In these compositions, instead of having each domino / pipeline stage deal with timing, the Fire Periodically node handles all the timing, and one or more Enqueue nodes control the flow of data through the pipeline / series of dominoes.

If that’s not what you’re going for, could you explain more about the scenario where you’d want to use a Delay Value node?

dominoscreens-enqueue.vuo (4.04 KB)

dominoscreens-enqueuedifferenttypes.vuo (6.22 KB)

OK, I’ve attached a sample composition that demonstrates a scenario where I could use a Delay Value node to create a “domino effect”. In this particular example I ended up finding a simple way to accomplish the effect I was looking for with an “Are Equal” node and the “Became True” node but there are other other scenarios where this solution wouldn’t work. A simple example would be two windows, both with a live video feed. In the one window the image is streamed live and in the other the frames are cached for say for 7 seconds before it begins to pass the frames to another Render Image to Window node. The effect would be that the Live action happens in the first window live and in the second window the same video appears but after a 7 seconds delay. This node could also be used to create audio echo etc.

Some what of a side note in the example composition I’ve attached demonstrates two other issues (I think they are bugs) I just discovered. Please let me know if it’s something I’ve overlooked or am not understanding.

Issue 1) The images in this composition are not retaining their proper aspect ratio. Even in the test Render Image to Window node called “Test Image Resolution Output” you can see the image is 240x240 going into the node but it is displaying it at a 240x200 resolution. I think it’s cropping it rather than stretching it because the image doesn’t appear distorted. However if you look at the Main Render Image to Window output the aspect ratio changes sometimes for the different images, sometimes displaying a correct 240x240 resolution but sometimes at other resolutions that are 240x???.

Issue 2) If you delete the Render Image to Window node called “Test Image Resolution Output” from this composition and Run the composition notice that the Vuo Editor stops being able to control the VuoCompositionLoader. The Stop button is disabled, The Run button can be used to start a second VuoCompositionLoader instance and there is no feedback on any of the nodes in the Editor. I have also copied and pasted the contents of the Editor into a new composition and it does the same thing. I believe the main Render Image to Window node is at fault as it seems to only do this when the Requested Frame port is set to Enqueue events. I haven’t been able to replicate this issue in other compositions.

Domino Type of Effect.vuo (117 KB)

OK, I’ve attached a sample composition that demonstrates a scenario where I could use a Delay Value node to create a “domino effect”.

Image flipping dominoes! Very cool!

OK, I see what you mean about using the Are Equal and Became True nodes. Your composition reminds me of the “Rotate on Cue” example composition.

We (Team Vuo) have been talking for a while about adding nodes to better support sequences of animations / cascading animations. As your composition illustrates, that’s definitely a pattern that comes up a lot. Maybe the Are Equal and Became True nodes could be replaced with a node that takes a list of times when you want to send events, and has a series of output ports that send events at the designated times.

A simple example would be two windows, both with a live video feed. In the one window the image is streamed live and in the other the frames are cached for say for 7 seconds before it begins to pass the frames to another Render Image to Window node. The effect would be that the Live action happens in the first window live and in the second window the same video appears but after a 7 seconds delay.

Like the attached composition? The Enqueue node (with surrounding nodes) stores up the images for 7 seconds and then starts letting them through. So, maybe the Delay Value node you’re suggesting could be something along those lines, where it would store up the values until it gets an event saying to let them through? Or maybe that’s something we could add to the Enqueue node, not sure yet.

Some what of a side note in the example composition I’ve attached demonstrates two other issues (I think they are bugs) I just discovered.

OK, I’ll look at those in a bit.

LiveVideoDelay.vuo (3.86 KB)

Issue 1) The images in this composition are not retaining their proper aspect ratio. Even in the test Render Image to Window node called “Test Image Resolution Output” you can see the image is 240x240 going into the node but it is displaying it at a 240x200 resolution.

I’m seeing output like this in “Test Image Resolution Output”:

letterboxed image.png

As you said, the image going into the node is 240x240. Yet it’s letterboxed so the interesting part of the image doesn’t take up that whole 240x240 area.

I pulled out the related nodes and put them into a smaller composition (attached) and started adding extra windows to see where that letterboxing is coming from. Looks like it’s from Resize Image if Larger. The image going into that is 3200x2000 (1.6 aspect ratio), and the image going out is 320x240 (1.333 aspect ratio). Since the node has “fit” as its sizing mode, and the input aspect ratio is wider than the output, the image doesn’t fill the entire height of the output.

Issue 2) If you delete the Render Image to Window node called “Test Image Resolution Output” from this composition and Run the composition notice that the Vuo Editor stops being able to control the VuoCompositionLoader.

Thanks for reporting that. Followed up on Large composition that fetches many images on startup sometimes loses contact with Vuo Editor (bug report).

ImageSizeTest.vuo (6.39 KB)

Ah… Fit and Fill!!! I can’t believe I missed seeing that port. That was it! Thank-you!

Maybe the Are Equal and Became True nodes could be replaced with a node that takes a list of times when you want to send events, and has a series of output ports that send events at the designated times.

Now that’s an interesting idea!

Based on the discussion here, I created a couple separate feature requests, which I think supersede the proposed Delay Value node —

i could need a delay between different DMX channels for move light effects out of sync ;) the node should save frames of Values in a memory and fire out the values with variable delay from 0.01 til 1 second. delay list node could be also the right solution for this :)