keep actors values in and out synced (data array)
-
Hello community,
I would like to ask you, how you handle this issue.
In general if you have nested user actors, the inputs of the lowest level never gets updated. Therefor the connected controls does not reflect the true state. How do one keep these in sync with the real status of the connected actor in the deeper user actor levels. One way would be to connect an user output to the input on the deepest level, down to the lowest and connect it to the controller a second time. But I have the feeling, this could create a closed feedback loop in certain situations.
Then there is one special case regarding the data array actor. If the data is recalled, the inputs stay the same, while the outputs and the loaded data change. If write is hit, all data is overwritten, with the still standing inputs, even if there should be one value changed only.
What would be the best way to keep the input values in sync with the output values. I used to loop the outputs to the inputs using a user actor with only user inputs and outputs 'piping' the data. Another approach would be maybe to use two different data array actors. One only to read, the other to write and have all the values between them connected. But in both cases I experienced issues, which where difficult to solve. Like wrongly updatet data.
Does anyone have advices or some kind of best way to go? What would I need to consider here? -
Hi,
When you imply ‘deeply nested’ how many layers of user actor are there?
Is it an option to bring the Data Array out of the depths and route the outputs to the deeper layers?
You say,
“ If the data is recalled, the inputs stay the same, while the outputs and the loaded data change. If write is hit, all data is overwritten, with the still standing inputs, even if there should be one value changed only.“
However this sounds like expected behaviour of the Data Array. When we recall a line of the data, the corresponding data set is sent to the outputs. In my experience the recall leave the inputs unchanged, as you suggest. When data is appended through the ‘write’ trigger a corresponding complete line of data is replaced based on the values at the inputs. Therefore, if an input value remains unchanged it is still being overwritten with the same value as represented at the input.
Best wishes
Russell
-
Hello @bonemap,
thank you for your answers.
I generaly like to put things into user actors for several reasons. Main one is, to be able to easily update everything, as I often have multiple instances of the same functions (or in a lot of scenes). On the other hand, this issue is not limited to the data array actor. Therefor I would need have every actor I need to change the value, to stay on the main level, contradicting the user actor intention.
You are right about the data arrays behaviour beeing expected. My question however is, how to work around it in the most save way. In two of my projects I have more then 15 of those actors with 10 or more values each. If I want to change only one value for an index, I need to update all other values, as those might be on a state of a different index.In both cases changes of the outputs doesn't reflect to the controllers, connected to the inputs.
-
Hi,
I understand, I think, and it does sound annoying to have the Data Array in user actors that update saved changes from one instance to all other instances. It appears then that you need some kind of trigger that will reset the Data Array inputs - and I have had this issue before. I think tried to solve it by having a value loopback system from the Data Array outputs to the data array inputs, but I don't remember the exact patch and there must have been value delays and/or gates to separate updating the inputs from receiving new values.
Best Wishes
Russell
-
@DillTheKraut , perhaps that helps the screenshot shows a panel for an artist to fine tune position of projector surfaces. It isn't nested but the values are feed through.
best clemens
-
Good point, I wasn't realy aware of the fact, them getting updated every time you save changes of 'cloned' user actors. I most times don't use the internal save mode and try to have a function, which reads from txt files as often as needed. But I'll keep that in mind in future.
thank you for your example. I guess this is what I most times go with and what @bonemap meant with value loop.
This way another issue is solved, which is, that value changes are not directly reflected on the outputs.
Would it be a feature request worth, that would offer two new options?1. keep outputs updated with the inputs. If input is changed, it immidiately gets reflected on the output.
2. if using the recall value, not only the outputs are recalled, but the input values change to the loaded data. The index value would then still offer an edit of other indexes without changing the input data.
-
@dillthekraut said:
Would it be a feature request worth, that would offer two new options?
1. keep outputs updated with the inputs. If input is changed, it immidiately gets reflected on the output.
2. if using the recall value, not only the outputs are recalled, but the input values change to the loaded data. The index value would then still offer an edit of other indexes without changing the input data.#1 I don't think this makes sense, since the output should be providing data read from the Data array text file. When 'replace' is triggered the inputs are reflected in the outputs. This makes sense since now the text file contains these values. Any values entered as inputs are 'temporary values' until a Data Array operation (like replace) adds the values to the document.
Since the Inputs and Outputs are separate, it allows you to create feedback controls which show the current recorded values, the current input values, and compare them as required.#2 this would create a special case where Isadora doesn't work this way for any other actors, and I feel it might limit the flexibility of the Data Array in someway.
The demo file is great, it shows how you can logically break apart the inputs and outputs, thanks @m_theater :)
It might be a little more work but the separation really allows a lot of possibilities.We are considering some new data types (a table of data is one), this would likely come with Controls designed for viewing this data. The goal is to make it easier to deal with data sets, and to maintain the fastest possible processing of the data. I know Mark has been putting a lot of thought into this, but we can't offer any timeline just yet.
-
How did you reconnect the data array outputs to the inputs? Or didn't you?
To keep them in sync, I add an user actor which is only 'piping the data, as it is forbidden to reconnect output and input directly. At the same time it can be used for some extra logic to alter the data. You can see the highlighted connections in the first screenshot.
It is an example which is a surtitle text editor. There are three data array actor as I wanted to show the next and the previous title simultaniously and needed to see the previous and following title times (It was a timelined show).
This was the editor only. The player which played the texts (with up to three lines) had 15 separated surtitle player as there was 15 parallel projections. Therefor 15 seperated data arrays with up to 150 lines. -
Thank you for your opinion on this. I see your points, and saw them before as well, which is why I see these features as an option. Like a switch to choose how it works.
As you see in my previous post, the work around quickly at least tripples the editing time and makes it much more complex (I see, that this example is an extreme, anyway). Especialy if you have different data types (string, integer, etc.) you have to adjust all of them manualy. Let alone the naming of the in and outputs. -
in the example, the Value I/O connection is based around the control panel.
So i utilised the show linked value option in the x/y 2d slider. (and this is the feedback you asked for)
Using a "dummy" useractor to pipe through values to the beginning of the chain is something i did as well i other cases.But i am asking myself, if it would be better to filter the message for an change "kind of a feedback killer" attached is a screenshot what i mean.
-
@bonemap Hi Russell,
You indicate that there is a limit to the number of layers of user actors that may be nested and still updated. Have you an official number for this limitation?Thx
Aidan
-
Hi Aidan,
I don’t know the answer to that. Might need to get an official team member to fill in the blank.
Best wishes
Russell
-
@aidan said:
Have you an official number for this limitation?
I don't know.. I haven't hit it, but updates/saves can start to become slow once you have many large/deep user actors.
It's possible the number is 999 (as this is the limit on a few things internally) but I think @mark is the only person who can give you a definitive answer. -
@dillthekraut said:
the work around quickly at least tripples the editing time and makes it much more complex (I see, that this example is an extreme, anyway). Especialy if you have different data types (string, integer, etc.) you have to adjust all of them manualy. Let alone the naming of the in and outputs.
Unfortunately, this is kind of the only way I can think of, but you could use JSON Parser and JSON Bundler from the Add-Ons Page to make your life a bit easier (hopefully)
https://recordit.co/xRM4ojCDo8
Example file: wrapped-data-array.zip