1+ <?xml version =" 1.0" encoding =" utf-8" ?>
2+ <WorkflowBuilder Version =" 2.8.5"
3+ xmlns : xsi =" http://www.w3.org/2001/XMLSchema-instance"
4+ xmlns : rx =" clr-namespace:Bonsai.Reactive;assembly=Bonsai.Core"
5+ xmlns : p1 =" clr-namespace:AindTelekinesisDataSchema.Rig;assembly=Extensions"
6+ xmlns =" https://bonsai-rx.org/2018/workflow" >
7+ <Workflow >
8+ <Nodes >
9+ <Expression xsi : type =" SubscribeSubject" >
10+ <Name >TriggeredCameraController</Name >
11+ </Expression >
12+ <Expression xsi : type =" MemberSelector" >
13+ <Selector >Cameras</Selector >
14+ </Expression >
15+ <Expression xsi : type =" Combinator" >
16+ <Combinator xsi : type =" rx:Merge" />
17+ </Expression >
18+ <Expression xsi : type =" MemberSelector" >
19+ <Selector >Value.VideoWriter</Selector >
20+ </Expression >
21+ <Expression xsi : type =" IncludeWorkflow" Path =" AllenNeuralDynamics.Core:FilterNotNull.bonsai" />
22+ <Expression xsi : type =" p1:MatchVideoWriter" >
23+ <p1 : Type xsi : type =" TypeMapping" TypeArguments =" p1:VideoWriterFfmpeg" />
24+ </Expression >
25+ <Expression xsi : type =" MemberSelector" >
26+ <Selector >Key</Selector >
27+ </Expression >
28+ <Expression xsi : type =" Combinator" >
29+ <Combinator xsi : type =" rx:WithLatestFrom" />
30+ </Expression >
31+ <Expression xsi : type =" rx:CreateObservable" >
32+ <Name >FfmpegWriter</Name >
33+ <Workflow >
34+ <Nodes >
35+ <Expression xsi : type =" WorkflowInput" >
36+ <Name >Source1</Name >
37+ </Expression >
38+ <Expression xsi : type =" Combinator" >
39+ <Combinator xsi : type =" rx:Take" >
40+ <rx : Count >1</rx : Count >
41+ </Combinator >
42+ </Expression >
43+ <Expression xsi : type =" rx:AsyncSubject" >
44+ <Name >This</Name >
45+ </Expression >
46+ <Expression xsi : type =" SubscribeSubject" >
47+ <Name >This</Name >
48+ </Expression >
49+ <Expression xsi : type =" MemberSelector" >
50+ <Selector >Item2</Selector >
51+ </Expression >
52+ <Expression xsi : type =" rx:AsyncSubject" >
53+ <Name >ThisCameraName</Name >
54+ </Expression >
55+ <Expression xsi : type =" SubscribeSubject" >
56+ <Name >This</Name >
57+ </Expression >
58+ <Expression xsi : type =" MemberSelector" >
59+ <Selector >Item1</Selector >
60+ </Expression >
61+ <Expression xsi : type =" rx:AsyncSubject" >
62+ <Name >ThisWriter</Name >
63+ </Expression >
64+ <Expression xsi : type =" SubscribeSubject" >
65+ <Name >TriggeredCamerasStream</Name >
66+ </Expression >
67+ <Expression xsi : type =" rx:Condition" >
68+ <Workflow >
69+ <Nodes >
70+ <Expression xsi : type =" WorkflowInput" >
71+ <Name >Source1</Name >
72+ </Expression >
73+ <Expression xsi : type =" MemberSelector" >
74+ <Selector >Key</Selector >
75+ </Expression >
76+ <Expression xsi : type =" SubscribeSubject" >
77+ <Name >ThisCameraName</Name >
78+ </Expression >
79+ <Expression xsi : type =" Combinator" >
80+ <Combinator xsi : type =" rx:CombineLatest" />
81+ </Expression >
82+ <Expression xsi : type =" Equal" />
83+ <Expression xsi : type =" WorkflowOutput" />
84+ </Nodes >
85+ <Edges >
86+ <Edge From =" 0" To =" 1" Label =" Source1" />
87+ <Edge From =" 1" To =" 3" Label =" Source1" />
88+ <Edge From =" 2" To =" 3" Label =" Source2" />
89+ <Edge From =" 3" To =" 4" Label =" Source1" />
90+ <Edge From =" 4" To =" 5" Label =" Source1" />
91+ </Edges >
92+ </Workflow >
93+ </Expression >
94+ <Expression xsi : type =" Combinator" >
95+ <Combinator xsi : type =" rx:Take" >
96+ <rx : Count >1</rx : Count >
97+ </Combinator >
98+ </Expression >
99+ <Expression xsi : type =" Combinator" >
100+ <Combinator xsi : type =" rx:Merge" />
101+ </Expression >
102+ <Expression xsi : type =" SubscribeSubject" >
103+ <Name >ThisCameraName</Name >
104+ </Expression >
105+ <Expression xsi : type =" PropertyMapping" >
106+ <PropertyMappings >
107+ <Property Name =" LogName" />
108+ </PropertyMappings >
109+ </Expression >
110+ <Expression xsi : type =" SubscribeSubject" >
111+ <Name >ThisWriter</Name >
112+ </Expression >
113+ <Expression xsi : type =" MemberSelector" >
114+ <Selector >ContainerExtension</Selector >
115+ </Expression >
116+ <Expression xsi : type =" PropertyMapping" >
117+ <PropertyMappings >
118+ <Property Name =" VideoExtension" />
119+ </PropertyMappings >
120+ </Expression >
121+ <Expression xsi : type =" SubscribeSubject" >
122+ <Name >Modality</Name >
123+ </Expression >
124+ <Expression xsi : type =" PropertyMapping" >
125+ <PropertyMappings >
126+ <Property Name =" Modality" />
127+ </PropertyMappings >
128+ </Expression >
129+ <Expression xsi : type =" SubscribeSubject" >
130+ <Name >ThisWriter</Name >
131+ </Expression >
132+ <Expression xsi : type =" PropertyMapping" >
133+ <PropertyMappings >
134+ <Property Name =" OutputArguments" Selector =" OutputArguments" />
135+ <Property Name =" InputArguments" Selector =" InputArguments" />
136+ <Property Name =" FrameRate" Selector =" FrameRate" />
137+ </PropertyMappings >
138+ </Expression >
139+ <Expression xsi : type =" IncludeWorkflow" Path =" AllenNeuralDynamics.Core:LogSpinnakerFfmpeg.bonsai" >
140+ <Modality >BehaviorVideos</Modality >
141+ <LogName >FaceCamera</LogName >
142+ <VideoExtension >mp4</VideoExtension >
143+ <OutputArguments >-vf "scale=out_color_matrix=bt709:out_range=full" -c:v h264_nvenc -pix_fmt nv12 -color_range full -colorspace bt709 -color_trc linear -tune hq -preset p4 -rc vbr -cq 12 -b:v 0M -maxrate 700M -bufsize 350M</OutputArguments >
144+ <InputArguments >-colorspace rgb -color_primaries bt709 -color_trc linear</InputArguments >
145+ <Verbosity >Verbose</Verbosity >
146+ <FrameRate >0</FrameRate >
147+ </Expression >
148+ </Nodes >
149+ <Edges >
150+ <Edge From =" 0" To =" 1" Label =" Source1" />
151+ <Edge From =" 1" To =" 2" Label =" Source1" />
152+ <Edge From =" 3" To =" 4" Label =" Source1" />
153+ <Edge From =" 4" To =" 5" Label =" Source1" />
154+ <Edge From =" 6" To =" 7" Label =" Source1" />
155+ <Edge From =" 7" To =" 8" Label =" Source1" />
156+ <Edge From =" 9" To =" 10" Label =" Source1" />
157+ <Edge From =" 10" To =" 11" Label =" Source1" />
158+ <Edge From =" 11" To =" 12" Label =" Source1" />
159+ <Edge From =" 12" To =" 22" Label =" Source1" />
160+ <Edge From =" 13" To =" 14" Label =" Source1" />
161+ <Edge From =" 14" To =" 22" Label =" Source2" />
162+ <Edge From =" 15" To =" 16" Label =" Source1" />
163+ <Edge From =" 16" To =" 17" Label =" Source1" />
164+ <Edge From =" 17" To =" 22" Label =" Source3" />
165+ <Edge From =" 18" To =" 19" Label =" Source1" />
166+ <Edge From =" 19" To =" 22" Label =" Source4" />
167+ <Edge From =" 20" To =" 21" Label =" Source1" />
168+ <Edge From =" 21" To =" 22" Label =" Source5" />
169+ </Edges >
170+ </Workflow >
171+ </Expression >
172+ <Expression xsi : type =" Combinator" >
173+ <Combinator xsi : type =" rx:Merge" />
174+ </Expression >
175+ <Expression xsi : type =" SubscribeSubject" >
176+ <Name >TriggeredCameraController</Name >
177+ </Expression >
178+ <Expression xsi : type =" MemberSelector" >
179+ <Selector >Cameras</Selector >
180+ </Expression >
181+ <Expression xsi : type =" Combinator" >
182+ <Combinator xsi : type =" rx:Merge" />
183+ </Expression >
184+ <Expression xsi : type =" MemberSelector" >
185+ <Selector >Value.VideoWriter</Selector >
186+ </Expression >
187+ <Expression xsi : type =" IncludeWorkflow" Path =" AllenNeuralDynamics.Core:FilterNotNull.bonsai" />
188+ <Expression xsi : type =" p1:MatchVideoWriter" >
189+ <p1 : Type xsi : type =" TypeMapping" TypeArguments =" p1:VideoWriterOpenCv" />
190+ </Expression >
191+ <Expression xsi : type =" MemberSelector" >
192+ <Selector >Key</Selector >
193+ </Expression >
194+ <Expression xsi : type =" Combinator" >
195+ <Combinator xsi : type =" rx:WithLatestFrom" />
196+ </Expression >
197+ <Expression xsi : type =" rx:CreateObservable" >
198+ <Name >OpenCvWriter</Name >
199+ <Workflow >
200+ <Nodes >
201+ <Expression xsi : type =" WorkflowInput" >
202+ <Name >Source1</Name >
203+ </Expression >
204+ <Expression xsi : type =" Combinator" >
205+ <Combinator xsi : type =" rx:Take" >
206+ <rx : Count >1</rx : Count >
207+ </Combinator >
208+ </Expression >
209+ <Expression xsi : type =" rx:AsyncSubject" >
210+ <Name >This</Name >
211+ </Expression >
212+ <Expression xsi : type =" SubscribeSubject" >
213+ <Name >This</Name >
214+ </Expression >
215+ <Expression xsi : type =" MemberSelector" >
216+ <Selector >Item2</Selector >
217+ </Expression >
218+ <Expression xsi : type =" rx:AsyncSubject" >
219+ <Name >ThisCameraName</Name >
220+ </Expression >
221+ <Expression xsi : type =" SubscribeSubject" >
222+ <Name >This</Name >
223+ </Expression >
224+ <Expression xsi : type =" MemberSelector" >
225+ <Selector >Item1</Selector >
226+ </Expression >
227+ <Expression xsi : type =" rx:AsyncSubject" >
228+ <Name >ThisWriter</Name >
229+ </Expression >
230+ <Expression xsi : type =" SubscribeSubject" >
231+ <Name >TriggeredCamerasStream</Name >
232+ </Expression >
233+ <Expression xsi : type =" rx:Condition" >
234+ <Workflow >
235+ <Nodes >
236+ <Expression xsi : type =" WorkflowInput" >
237+ <Name >Source1</Name >
238+ </Expression >
239+ <Expression xsi : type =" MemberSelector" >
240+ <Selector >Key</Selector >
241+ </Expression >
242+ <Expression xsi : type =" SubscribeSubject" >
243+ <Name >ThisCameraName</Name >
244+ </Expression >
245+ <Expression xsi : type =" Combinator" >
246+ <Combinator xsi : type =" rx:CombineLatest" />
247+ </Expression >
248+ <Expression xsi : type =" Equal" />
249+ <Expression xsi : type =" WorkflowOutput" />
250+ </Nodes >
251+ <Edges >
252+ <Edge From =" 0" To =" 1" Label =" Source1" />
253+ <Edge From =" 1" To =" 3" Label =" Source1" />
254+ <Edge From =" 2" To =" 3" Label =" Source2" />
255+ <Edge From =" 3" To =" 4" Label =" Source1" />
256+ <Edge From =" 4" To =" 5" Label =" Source1" />
257+ </Edges >
258+ </Workflow >
259+ </Expression >
260+ <Expression xsi : type =" Combinator" >
261+ <Combinator xsi : type =" rx:Take" >
262+ <rx : Count >1</rx : Count >
263+ </Combinator >
264+ </Expression >
265+ <Expression xsi : type =" Combinator" >
266+ <Combinator xsi : type =" rx:Merge" />
267+ </Expression >
268+ <Expression xsi : type =" SubscribeSubject" >
269+ <Name >ThisCameraName</Name >
270+ </Expression >
271+ <Expression xsi : type =" PropertyMapping" >
272+ <PropertyMappings >
273+ <Property Name =" LogName" />
274+ </PropertyMappings >
275+ </Expression >
276+ <Expression xsi : type =" SubscribeSubject" >
277+ <Name >ThisWriter</Name >
278+ </Expression >
279+ <Expression xsi : type =" MemberSelector" >
280+ <Selector >ContainerExtension</Selector >
281+ </Expression >
282+ <Expression xsi : type =" PropertyMapping" >
283+ <PropertyMappings >
284+ <Property Name =" VideoExtension" />
285+ </PropertyMappings >
286+ </Expression >
287+ <Expression xsi : type =" SubscribeSubject" >
288+ <Name >Modality</Name >
289+ </Expression >
290+ <Expression xsi : type =" PropertyMapping" >
291+ <PropertyMappings >
292+ <Property Name =" Modality" />
293+ </PropertyMappings >
294+ </Expression >
295+ <Expression xsi : type =" SubscribeSubject" >
296+ <Name >ThisWriter</Name >
297+ </Expression >
298+ <Expression xsi : type =" PropertyMapping" >
299+ <PropertyMappings >
300+ <Property Name =" FrameRate" Selector =" FrameRate" />
301+ <Property Name =" FourCC" Selector =" FourCc" />
302+ </PropertyMappings >
303+ </Expression >
304+ <Expression xsi : type =" IncludeWorkflow" Path =" AllenNeuralDynamics.Core:LogSpinnakerOpenCv.bonsai" >
305+ <Modality >BehaviorVideos</Modality >
306+ <LogName >FaceCamera</LogName >
307+ <VideoExtension >mp4</VideoExtension >
308+ <FrameRate >30</FrameRate >
309+ <FourCC >FMP4</FourCC >
310+ </Expression >
311+ </Nodes >
312+ <Edges >
313+ <Edge From =" 0" To =" 1" Label =" Source1" />
314+ <Edge From =" 1" To =" 2" Label =" Source1" />
315+ <Edge From =" 3" To =" 4" Label =" Source1" />
316+ <Edge From =" 4" To =" 5" Label =" Source1" />
317+ <Edge From =" 6" To =" 7" Label =" Source1" />
318+ <Edge From =" 7" To =" 8" Label =" Source1" />
319+ <Edge From =" 9" To =" 10" Label =" Source1" />
320+ <Edge From =" 10" To =" 11" Label =" Source1" />
321+ <Edge From =" 11" To =" 12" Label =" Source1" />
322+ <Edge From =" 12" To =" 22" Label =" Source1" />
323+ <Edge From =" 13" To =" 14" Label =" Source1" />
324+ <Edge From =" 14" To =" 22" Label =" Source2" />
325+ <Edge From =" 15" To =" 16" Label =" Source1" />
326+ <Edge From =" 16" To =" 17" Label =" Source1" />
327+ <Edge From =" 17" To =" 22" Label =" Source3" />
328+ <Edge From =" 18" To =" 19" Label =" Source1" />
329+ <Edge From =" 19" To =" 22" Label =" Source4" />
330+ <Edge From =" 20" To =" 21" Label =" Source1" />
331+ <Edge From =" 21" To =" 22" Label =" Source5" />
332+ </Edges >
333+ </Workflow >
334+ </Expression >
335+ <Expression xsi : type =" Combinator" >
336+ <Combinator xsi : type =" rx:Merge" />
337+ </Expression >
338+ </Nodes >
339+ <Edges >
340+ <Edge From =" 0" To =" 1" Label =" Source1" />
341+ <Edge From =" 1" To =" 2" Label =" Source1" />
342+ <Edge From =" 2" To =" 3" Label =" Source1" />
343+ <Edge From =" 2" To =" 6" Label =" Source1" />
344+ <Edge From =" 3" To =" 4" Label =" Source1" />
345+ <Edge From =" 4" To =" 5" Label =" Source1" />
346+ <Edge From =" 5" To =" 7" Label =" Source1" />
347+ <Edge From =" 6" To =" 7" Label =" Source2" />
348+ <Edge From =" 7" To =" 8" Label =" Source1" />
349+ <Edge From =" 8" To =" 9" Label =" Source1" />
350+ <Edge From =" 10" To =" 11" Label =" Source1" />
351+ <Edge From =" 11" To =" 12" Label =" Source1" />
352+ <Edge From =" 12" To =" 13" Label =" Source1" />
353+ <Edge From =" 12" To =" 16" Label =" Source1" />
354+ <Edge From =" 13" To =" 14" Label =" Source1" />
355+ <Edge From =" 14" To =" 15" Label =" Source1" />
356+ <Edge From =" 15" To =" 17" Label =" Source1" />
357+ <Edge From =" 16" To =" 17" Label =" Source2" />
358+ <Edge From =" 17" To =" 18" Label =" Source1" />
359+ <Edge From =" 18" To =" 19" Label =" Source1" />
360+ </Edges >
361+ </Workflow >
362+ </WorkflowBuilder >
0 commit comments