Skip to content

Examples

Complete Example

A realistic .tdn file demonstrating all major features:

format: tdn
version: '2.0'
build: 3
generator: Embody/6.0.4
td_build: '2025.32050'
exported_at: '2026-02-19T14:30:00Z'
network_path: /
options:
  include_dat_content: true
type_defaults:
  baseCOMP:
    parameters:
      resizecomp: =me
      repocomp: =me
par_templates:
  about:
    - {name: Build, style: Int, label: Build Number, readOnly: true}
    - {name: Version, style: Str, label: Version, readOnly: true}
operators:
  - name: controller
    type: baseCOMP
    color: [0.2, 0.4, 0.8]
    comment: Main controller
    tags: [core]
    custom_pars:
      Controls:
        - name: Speed
          style: Float
          default: 1
          max: 10
          clampMin: true
          normMax: 5
          value: 2.5
        - name: Mode
          style: Menu
          menuNames: [linear, ease, bounce]
          menuLabels: [Linear, Ease In/Out, Bounce]
          value: 1
        - name: Color
          style: RGB
          clampMin: true
          clampMax: true
          values: [1, 0.5, 0]
      About:
        $t: about
        Build: 3
        Version: 1.0.0
    flags: [viewer]
    comp_inputs: [renderer]
    children:
      - name: noise1
        type: noiseTOP
        parameters:
          type: sparse
          amp: 0.8
          period: 2
          monochrome: true
          resolutionw: 1920
          resolutionh: 1080
      - name: level1
        type: levelTOP
        position: [300, 0]
        parameters:
          opacity: =parent().par.Speed / 10
        inputs: [noise1]
        flags: [display]
      - name: config
        type: tableDAT
        position: [0, -200]
        dat_content:
          - [key, value]
          - [resolution, 1920x1080]
          - [fps, '60']
        dat_content_format: table
        flags: [lock]
      - name: script1
        type: textDAT
        position: [300, -200]
        dat_content: |
          # Initialize
          print('Controller ready')
        dat_content_format: text
  - name: renderer
    type: baseCOMP
    position: [500, 0]
    size: [300, 150]
    custom_pars:
      About:
        $t: about
        Build: 1
        Version: 0.9.0

Key Observations

Type Defaults

Both baseCOMPs share resizecomp and repocomp expressions, so those are hoisted into type_defaults instead of being repeated on each operator.

Parameter Templates

The "About" page definition (Build + Version parameters) is shared between controller and renderer, so the structure is defined once in par_templates and each operator references it with $t and provides its own values.

Expression Shorthand

"=parent().par.Speed / 10" — expressions are prefixed with = instead of wrapped in an object like {"expr": "..."}.

Flags as Arrays

[viewer], [display], [lock] — compact array format instead of viewer: true.

Simplified Connections

[noise1] — just the source operator name. Array position equals input index.

Optional Position

noise1 at [0, 0] omits position entirely. Only operators not at the origin include their position.

Compact Formatting

Short numeric vectors like [300, 0] and [0.2, 0.4, 0.8] are inlined with YAML flow style; longer or non-numeric sequences use block style.

Multi-line scripts

dat_content is a plain string rendered as a YAML literal block scalar (|), so a textDAT's code reads top-to-bottom with no escaped newlines and diffs line-by-line.

Minimal Example

The simplest possible .tdn file — a single operator with no custom settings:

format: tdn
version: '2.0'
generator: Embody/6.0.4
td_build: '2025.32280'
exported_at: '2026-03-01T12:00:00Z'
network_path: /project1
options:
  include_dat_content: false
operators:
  - name: noise1
    type: noiseTOP

Annotation Example

A network with annotations grouping related operators:

format: tdn
version: '2.0'
generator: Embody/6.0.4
td_build: '2025.32280'
exported_at: '2026-03-01T12:00:00Z'
network_path: /project1/main
options:
  include_dat_content: true
operators:
  - name: noise1
    type: noiseTOP
  - name: level1
    type: levelTOP
    position: [300, 0]
    inputs: [noise1]
  - name: config
    type: tableDAT
    position: [0, -400]
    dat_content:
      - [key, value]
      - [fps, '60']
    dat_content_format: table
annotations:
  - name: annot_visuals
    mode: annotate
    title: Visual Processing
    text: Noise generation and level adjustment
    position: [-70, -170]
    size: [670, 440]
  - name: annot_config
    mode: annotate
    title: Configuration
    text: Project settings
    position: [-70, -570]
    size: [370, 340]