1format: tdn
2version: '2.0'
3build: null
4generator: Embody/6.0.15
5td_build: 099.2025.32820
6source_file: Embody-6.15.toe
7exported_at: '2026-06-11T03:24:07Z'
8network_path: /specimen_lab/reaction_diffusion
9options:
10 include_dat_content: true
11 include_storage: true
12type_defaults:
13 annotateCOMP:
14 parameters:
15 order: =me.digits or 0
16 layerzone: =0 if hasattr(me, 'EncloseOPs') and me.EncloseOPs else 1
17 flags:
18 - display
19 color: [0.45, 0.45, 0.45]
20 glslTOP:
21 flags:
22 - viewer
23 size: [130, 90]
24 color: [0.67, 0.67, 0.67]
25 infoDAT:
26 flags:
27 - viewer
28 size: [130, 90]
29 color: [0.67, 0.67, 0.67]
30 textDAT:
31 parameters:
32 language: glsl
33 flags:
34 - viewer
35 size: [130, 90]
36 color: [0.67, 0.67, 0.67]
37par_templates:
38 about:
39 - default: '1.0'
40 help: Annotate COMP default setup version.
41 name: Version
42 readOnly: true
43 startSection: true
44 style: Str
45 - help: Click to open help page.
46 name: Help
47 style: Pulse
48 text:
49 - default: Annotate
50 help: Text in the title bar.
51 label: Title Text
52 name: Titletext
53 startSection: true
54 style: Str
55 - clampMin: true
56 default: 30
57 help: Height of the title bar. Title font height adjusts automatically to fill.
58 label: Title Height
59 name: Titleheight
60 normMax: 100.0
61 normMin: 5.0
62 style: Int
63 - default: left
64 help: Alignment of title text.
65 label: Title Align
66 menuLabels:
67 - Left
68 - Center
69 - Right
70 menuNames:
71 - left
72 - center
73 - right
74 name: Titlealign
75 style: Menu
76 - help: Text in the body area. Use an expression for newlines etc.
77 label: Body Text
78 name: Bodytext
79 startSection: true
80 style: Str
81 - clampMin: true
82 default: 10
83 help: Size of text in the body area.
84 label: Body Font Size
85 name: Bodyfontsize
86 normMax: 100.0
87 normMin: 8.0
88 style: Int
89 - help: Limit the width of the text area.
90 label: Limit Body Text Width
91 name: Bodylimitwidth
92 style: Toggle
93 - clampMin: true
94 default: 1000
95 help: Width limit that will cause wraparound or cut-off. Measured in Panel units.
96 label: Max Body Text Width
97 name: Bodymaxwidth
98 normMax: 2000.0
99 normMin: 100.0
100 style: Int
101 settings:
102 - default: comment
103 help: 'Switch between Comment, Network Box, and Annotate Modes. '
104 menuLabels:
105 - Comment
106 - Network Box
107 - Annotate
108 menuNames:
109 - comment
110 - networkbox
111 - annotate
112 name: Mode
113 style: Menu
114 - help: Converts quotes, ellipsis, and dashes to more typographically nice unicode versions.
115 label: Smart Quote
116 name: Smartquote
117 startSection: true
118 style: Toggle
119 - default: true
120 help: Wrap body text when it extends past right bound.
121 label: Body Word Wrap
122 name: Bodywordwrap
123 style: Toggle
124 - default: 1
125 help: Background color base.
126 label: Back Color
127 name: Backcolorr
128 startSection: true
129 style: RGBA
130 - clampMax: true
131 clampMin: true
132 default: 1
133 help: Back color alpha.
134 label: Back Color Alpha
135 name: Backcoloralpha
136 style: Float
137 - clampMax: true
138 clampMin: true
139 default: 1
140 help: Opacity of the entire Annotate.
141 label: Annotate Opacity
142 name: Opacity
143 style: Float
144 op_viewer:
145 - help: Turn the visibility of the viewer specified in the OP parameter below on or off.
146 label: Viewer Display
147 name: Opviewerdisplay
148 style: Toggle
149 - help: The operator whose viewer is displayed in the Annotate.
150 label: OP
151 name: Opviewer
152 style: OP
153 - help: Allow interaction with the OP viewer.
154 label: OP Viewer Interactive
155 name: Opviewerinteractive
156 style: Toggle
157 - default: 'False'
158 help: Use the Size/Aspect Override to control viewer's size in the background.
159 label: Size/Aspect Override
160 menuLabels:
161 - Natural
162 - Specify
163 - Auto-Fit
164 menuNames:
165 - natural
166 - specify
167 - autofit
168 name: Opvieweroversize
169 startSection: true
170 style: Menu
171 - clampMin: true
172 default: 800
173 help: Diplay viewer as-if it were being displayed at this resolution. This is particularly useful for zooming into operators that don't have a built-in resolution, like CHOPs, SOPs, and DATs.
174 label: Size/Aspect
175 name: Opviewersize
176 normMax: 1000.0
177 normMin: 1.0
178 style: WH
179 - default: 1
180 help: Scale the viewer by this factor.
181 label: Scale
182 name: Opviewerscale
183 normMax: 2.0
184 startSection: true
185 style: Float
186 - help: Move the border of the viewer towards left edge of Annotate when negative or towards right edge when positive.
187 label: Justify X
188 name: Opviewerjustifyx
189 normMin: -1.0
190 style: Float
191 - label: Justify Y
192 name: Opviewerjustifyy
193 normMin: -1.0
194 style: Float
195 - help: When True, allow viewer to display in the Annotate title area as well as body.
196 label: Cover Body and Title
197 name: Opviewerfillbodytitle
198 style: Toggle
199 - clampMin: true
200 default: 1
201 help: Zoom the viewer by this scale factor without increasing the size of its display area in the Annotate.
202 label: OP Viewer Zoom
203 min: 0.001
204 name: Opviewerzoom
205 normMax: 5.0
206 normMin: 1.0
207 startSection: true
208 style: Float
209 - help: Offsets the displayed area within the viewer. Combined with OP Viewer Zoom, this lets you display a specific area of a viewer, such as a CHOP channel or table cell.
210 label: OP Viewer Offset
211 name: Opvieweroffsetx
212 style: XYZW
213 - clampMax: true
214 clampMin: true
215 default: 1
216 help: Alpha value of the background area in the OP Viewer.
217 label: Fill Alpha
218 name: Opviewerfillalpha
219 startSection: true
220 style: Float
221type: baseCOMP
222color: [0.67, 0.67, 0.67]
223operators:
224- name: out1
225 type: outTOP
226 parameters:
227 label: =me.name
228 position: [2750, 0]
229 size: [130, 90]
230 color: [0.67, 0.67, 0.67]
231 inputs:
232 - glsl_colorize
233- name: annotate1
234 type: annotateCOMP
235 sequences:
236 ext:
237 - object: op.TDAnnotate.mod.AnnotateExt.AnnotateExt(me)
238 promote: true
239 custom_pars:
240 Text:
241 $t: text
242 Titletext: Seed
243 Bodytext: Initial conditions. A=1 everywhere; B=1 in a jittered grid of spots, setting where the reaction begins.
244 Settings:
245 $t: settings
246 Mode: annotate
247 Backcolorr: [0.12, 0.19, 0.16]
248 Opacity: 0.3
249 OP Viewer:
250 $t: op_viewer
251 Opvieweroversize: natural
252 About:
253 $t: about
254 position: [-220, -190]
255 size: [570, 450]
256 palette_clone: true
257- name: annotate2
258 type: annotateCOMP
259 sequences:
260 ext:
261 - object: op.TDAnnotate.mod.AnnotateExt.AnnotateExt(me)
262 promote: true
263 custom_pars:
264 Text:
265 $t: text
266 Titletext: Reaction-Diffusion Loop
267 Bodytext: 'The Gray-Scott core: chemical state is held between frames and updated by diffusion + reaction each frame. Feed/kill rates choose the pattern regime. Cooks every frame when the output is demanded.'
268 Settings:
269 $t: settings
270 Mode: annotate
271 Backcolorr: [0.1, 0.18, 0.26]
272 Opacity: 0.3
273 OP Viewer:
274 $t: op_viewer
275 Opvieweroversize: natural
276 About:
277 $t: about
278 position: [830, -190]
279 size: [720, 450]
280 palette_clone: true
281- name: annotate3
282 type: annotateCOMP
283 sequences:
284 ext:
285 - object: op.TDAnnotate.mod.AnnotateExt.AnnotateExt(me)
286 promote: true
287 custom_pars:
288 Text:
289 $t: text
290 Titletext: Colorize & Output
291 Bodytext: Maps B concentration to a deep-navy -> teal -> cream palette with a soft vignette, terminating in the output Null.
292 Settings:
293 $t: settings
294 Mode: annotate
295 Backcolorr: [0.2, 0.16, 0.21]
296 Opacity: 0.3
297 OP Viewer:
298 $t: op_viewer
299 Opvieweroversize: natural
300 About:
301 $t: about
302 position: [2030, -190]
303 size: [920, 450]
304 palette_clone: true
305- name: glsl_seed
306 type: glslTOP
307 parameters:
308 pixeldat: glsl_seed_pixel
309 computedat: seed_compute
310 outputresolution: custom
311 resolutionw: 512
312 resolutionh: 512
313 format: rgba32float
314- name: glsl_rd_step
315 type: glslTOP
316 parameters:
317 pixeldat: glsl_rd_step_pixel
318 computedat: rd_step_compute
319 outputresolution: custom
320 resolutionw: 512
321 resolutionh: 512
322 format: rgba32float
323 position: [1200, 0]
324 inputs:
325 - feedback_state
326- name: glsl_colorize
327 type: glslTOP
328 parameters:
329 pixeldat: glsl_colorize_pixel
330 computedat: colorize_compute
331 position: [2250, 0]
332 inputs:
333 - glsl_rd_step
334- name: feedback_state
335 type: feedbackTOP
336 parameters:
337 top: glsl_rd_step
338 format: rgba32float
339 flags:
340 - viewer
341 position: [900, 0]
342 size: [130, 90]
343 color: [0.67, 0.67, 0.67]
344 inputs:
345 - glsl_seed
346- name: glsl_seed_info
347 type: infoDAT
348 parameters:
349 op: glsl_seed
350 position: [0, -120]
351 dock: glsl_seed
352 dat_read_only: true
353- name: glsl_seed_pixel
354 type: textDAT
355 parameters:
356 extension: frag
357 position: [150, -120]
358 dock: glsl_seed
359 dat_content: |-
360 out vec4 fragColor;
361 float h(vec2 p){ return fract(sin(dot(p, vec2(127.1,311.7)))*43758.5453); }
362 void main(){
363 vec2 uv = vUV.st;
364 float a = 1.0; float b = 0.0;
365 vec2 g = uv * 7.0;
366 vec2 cell = floor(g);
367 vec2 f = fract(g);
368 vec2 jit = vec2(h(cell), h(cell+3.7))*0.6 + 0.2;
369 if(distance(f, jit) < 0.13) b = 1.0;
370 fragColor = vec4(a, b, 0.0, 1.0);
371 }
372 dat_content_format: text
373- name: glsl_rd_step_info
374 type: infoDAT
375 parameters:
376 op: glsl_rd_step
377 position: [1200, -120]
378 dock: glsl_rd_step
379 dat_read_only: true
380- name: glsl_seed_compute
381 type: textDAT
382 position: [-150, -120]
383 dock: glsl_seed
384- name: glsl_colorize_info
385 type: infoDAT
386 parameters:
387 op: glsl_colorize
388 position: [2250, -120]
389 dock: glsl_colorize
390 dat_read_only: true
391- name: glsl_rd_step_pixel
392 type: textDAT
393 parameters:
394 extension: frag
395 position: [1350, -120]
396 dock: glsl_rd_step
397 dat_content: |-
398 out vec4 fragColor;
399 const float feed = 0.055;
400 const float kill = 0.062;
401 const float da = 1.0;
402 const float db = 0.5;
403 void main(){
404 vec2 texel = uTD2DInfos[0].res.xy;
405 vec2 uv = vUV.st;
406 vec2 s = texture(sTD2DInputs[0], uv).rg;
407 float a = s.r; float b = s.g;
408 vec2 lap = vec2(0.0);
409 lap += texture(sTD2DInputs[0], uv + texel*vec2(-1.0,-1.0)).rg * 0.05;
410 lap += texture(sTD2DInputs[0], uv + texel*vec2( 0.0,-1.0)).rg * 0.20;
411 lap += texture(sTD2DInputs[0], uv + texel*vec2( 1.0,-1.0)).rg * 0.05;
412 lap += texture(sTD2DInputs[0], uv + texel*vec2(-1.0, 0.0)).rg * 0.20;
413 lap += s * -1.0;
414 lap += texture(sTD2DInputs[0], uv + texel*vec2( 1.0, 0.0)).rg * 0.20;
415 lap += texture(sTD2DInputs[0], uv + texel*vec2(-1.0, 1.0)).rg * 0.05;
416 lap += texture(sTD2DInputs[0], uv + texel*vec2( 0.0, 1.0)).rg * 0.20;
417 lap += texture(sTD2DInputs[0], uv + texel*vec2( 1.0, 1.0)).rg * 0.05;
418 float reaction = a*b*b;
419 float na = a + (da*lap.r - reaction + feed*(1.0-a));
420 float nb = b + (db*lap.g + reaction - (kill+feed)*b);
421 fragColor = vec4(clamp(na,0.0,1.0), clamp(nb,0.0,1.0), 0.0, 1.0);
422 }
423 dat_content_format: text
424- name: glsl_colorize_pixel
425 type: textDAT
426 parameters:
427 extension: frag
428 position: [2400, -120]
429 dock: glsl_colorize
430 dat_content: |-
431 out vec4 fragColor;
432 void main(){
433 vec2 uv = vUV.st;
434 vec2 s = texture(sTD2DInputs[0], uv).rg;
435 float b = s.g;
436 vec3 c0 = vec3(0.03, 0.04, 0.09);
437 vec3 c1 = vec3(0.10, 0.42, 0.55);
438 vec3 c2 = vec3(0.98, 0.90, 0.70);
439 vec3 col = mix(c0, c1, smoothstep(0.0, 0.35, b));
440 col = mix(col, c2, smoothstep(0.35, 0.55, b));
441 float d = distance(uv, vec2(0.5));
442 col *= mix(1.0, 0.55, smoothstep(0.40, 0.95, d));
443 fragColor = vec4(col, 1.0);
444 }
445 dat_content_format: text
446- name: glsl_rd_step_compute
447 type: textDAT
448 position: [1050, -120]
449 dock: glsl_rd_step
450- name: glsl_colorize_compute
451 type: textDAT
452 position: [2100, -120]
453 dock: glsl_colorize
454annotations:
455- name: annotate1
456 mode: annotate
457 title: Seed
458 text: Initial conditions. A=1 everywhere; B=1 in a jittered grid of spots, setting where the reaction begins.
459 position: [-220, -190]
460 size: [570, 450]
461 color: [0.12, 0.19, 0.16]
462 opacity: 0.3
463- name: annotate2
464 mode: annotate
465 title: Reaction-Diffusion Loop
466 text: 'The Gray-Scott core: chemical state is held between frames and updated by diffusion + reaction each frame. Feed/kill rates choose the pattern regime. Cooks every frame when the output is demanded.'
467 position: [830, -190]
468 size: [720, 450]
469 color: [0.1, 0.18, 0.26]
470 opacity: 0.3
471- name: annotate3
472 mode: annotate
473 title: Colorize & Output
474 text: Maps B concentration to a deep-navy -> teal -> cream palette with a soft vignette, terminating in the output Null.
475 position: [2030, -190]
476 size: [920, 450]
477 color: [0.2, 0.16, 0.21]
478 opacity: 0.3