create at the
speed of thought.

paste this into a TouchDesigner Textport to install — macOS or Windows

import requests, hashlib, tempfile, os; h = {'User-Agent': 'Embody-Install'}; mf = requests.get('https://github.com/dylanroscover/Embody/releases/latest/download/embody-release.json', headers=h, timeout=30).json(); b = requests.get('https://github.com/dylanroscover/Embody/releases/download/%s/%s' % (mf['tag'], mf['asset']), headers=h, timeout=120).content; assert hashlib.sha256(b).hexdigest() == mf['sha256'], 'checksum mismatch'; f = os.path.join(tempfile.gettempdir(), mf['asset']); open(f, 'wb').write(b); n = ui.panes.current; n = n if n.type == PaneType.NETWORKEDITOR else next(x for x in ui.panes if x.type == PaneType.NETWORKEDITOR); print('Embody', mf['version'], 'installed at', n.owner.loadTox(f).path)

v6.2.72 release notes · same as tox drag and drop

in practice

say it. watch it happen.

One conversation, one live TouchDesigner session. The frames are straight captures of the network’s output, and each one copies its own TDXN so you can paste the network into yours. The fourth turn is the real diff between the first frame and the third.

  1. A Kandinsky-style composition rendered in TouchDesigner: a large dark circle with a yellow rim, translucent colored discs, red wedges and thin black lines on pale paper.

    “Build me a Kandinsky-style composition. Circles, a few sharp wedges, thin black lines on paper.”

    01Build entire networks from a sentence

  2. The same composition rebuilt from rotated squares in a warm palette on ochre paper, with the cluster shifted to the right.

    “Actually, make it warmer. Squares instead of circles, and push the whole cluster off-center.”

    02Try a different approach in seconds

  3. The same warm square style re-scattered by a new seed: a large nested square upper-left, a fan of thin lines, red wedges and small squares on ochre paper.

    “Set the seed to 42.”

    03Set any parameter

  4. --- kandinsky.tdxn   frame 01
    +++ kandinsky.tdxn   frame 03
    @@ custom_pars: Kandinsky @@
       - name: Seed
         default: 7
    +    value: 42
       - name: Shape
         default: circle
    +    value: square
       - name: Warmth
    +    value: 1
       - name: Offset
    +    values: [0.22, -0.08]

    “Show me what changed between this and the first one.”

    04Compare attempts

  • Write extensions“Create an extension class that manages scene transitions.”
  • Debug errors“Why is my render chain producing a black output?”

the format underneath

meet TDXN.

TDXN, TouchDesigner eXternal Network, writes a network out as one human-readable YAML file: operators, parameters, connections, layout, annotations, DAT content. All of it in text, so every change is a diff, and every version is a file your agent, your team, and git can all read.

format: tdxn
version: '2.1'
generator: Embody/6.2.13
td_build: 099.2025.33070
source_file: Embody-6.316.toe
exported_at: '2026-09-05T15:47:23Z'
network_path: /embody/kandinsky
type: baseCOMP
custom_pars:
  Kandinsky:
  - name: Seed
    style: Int
    default: 7
  - name: Shape
    style: Menu
    default: circle
  - name: Lineweight
    style: Float
    default: 1.5
    value: 2.5
operators:
- name: glsl_kandinsky
  type: glslTOP
  parameters:
    outputresolution: custom
    resolutionw: 1500
    resolutionh: 1000
  sequences:
    vec:
    - name: uSeed
      valuex: =parent.Kandinsky.par.Seed
    - name: uLineWeight
      valuex: =parent.Kandinsky.par.Lineweight
- name: glsl_kandinsky_pixel
  type: textDAT
  dock: glsl_kandinsky
  dat_content: |
    uniform float uSeed;
    uniform float uLineWeight;
    // ... 124 more lines of GLSL
- name: out1
  type: outTOP
  position: [400, 0]
  inputs:
  - glsl_kandinsky
annotations:
- name: annotate1
  title: Kandinsky composition
  position: [-220, -190]
  size: [820, 450]
  • this is the file behind the frames above — the real export, trimmed to fit. The three frames are three versions of it.
  • non-default-only — only what you actually changed gets written.
  • type defaults hoisted — shared properties dedupe across operators.
  • expression shorthand — =parent.Kandinsky.par.Seed instead of a wrapper object.
  • round-trip safe — export → edit → import yields the same network.

get started

three steps to flow.

  1. 01

    install

    Open a Textport (alt+t) and paste the one-liner. Prefer a file? Grab the .tox from GitHub Releases and drop it into your project.

  2. 02

    run the Setup Wizard

    It opens the moment Embody finishes initializing: a few screens, one decision each, including which AI assistant to connect. Take the recommended option on each and click Set up Embody. Nothing changes until that click, and the Setup Wizard pulse on the Embody COMP re-runs it anytime.

  3. 03

    tag operators

    Double-tap lctrl on any operator to externalize it. Start building.

read the full Quickstart

Requires TouchDesigner 2025.33230 or later. Works on macOS and Windows.

why this exists

Everything is moving faster now. Everyone is shipping. We’re entering a brand new era of creativity, and Embody exists to help the TouchDesigner community build faster and better than ever — open source, no strings attached, nothing SaaSy.