TouchDesigner Framework CLI scaffold tool for opinionated State Driven Command and Control/Code Driven project architecture
Project description
tdfw
TouchDesigner Framework CLI scaffold tool with an opinionated slant towards State Driven/Code Driven project architecture.
About
Hi, I'm Michael. I play guitar and write code. I was introduced to TouchDesigner by my friend Andrew Zolty, who's also known as BREAKFAST. He's an incredible kinetic artist.
Getting started with TouchDesigner as a GUI never really happened for me. I started a few YouTube courses on it but didn't have the time to follow through and learn how to use the interface.
But the concept of a network of nodes and subnodes made sense to my programmer/software engineer brain. I thought "there must be a purely code driven way to architect these TouchDesinger apps". So I looked on YouTube and found this video (read more about that in BACKGROUND.md). I was thrilled and what has resulted is essentially this tool which abstracts out all the boilerplate he gives.
How To Use
# 1. Install prerequisites
# Make sure Python is installed and matches the TouchDesigner distributions version and a package manager like uv is available globally.
# 2. Install tdfw globally
uv pip install --upgrade tdfw
# 3. Confirm installation and explore options
tdfw help
# 4. Doctor check (optional but recommended)
# Ensures uv/pip/conda and TouchDesigner paths are set up correctly.
tdfw doctor
# 5. Scaffold a new TouchDesigner App
tdfw start-app <MyFirstApp>
---
### Now hook in your TD project with this scaffolding
- **DAT/STARTUP/StartupExecute.py** is scaffolded automatically with the `onStart()` hook.
- **Echo message** nudges the user only to open TD and save the `.toe`.
This way, the scaffold is truly turnkey: once you save the `.toe`, the startup hook is already wired to your `StartupExt`.
Once this step is complete and the `.toe` file exists then you can open your project and code editor in one double-click on BAT/<app>.bat or BAT/<app>.bash files via your File Explorer
---
# 6. Open your app in your editor
cd <MyFirstApp>
code . # or cursor ., vim ., etc.
# 7. Create Python Extension stubs
# Run from your TouchDesigner Project Root (the dir with <MyFirstApp>.toe)
tdfw create-ext <MyFirstExt>
# 8. Manage environments
# Initialize a uv environment (falls back to pip if uv is missing)
tdfw init-env <MyAppEnv>
# Export reproducible requirements for TouchDesigner
tdfw export-env --manager uv --output requirements.txt
# Import environment from requirements.txt or environment.yml
tdfw import-env requirements.txt
Philosophy
Legibility first: Every scaffolded app reads like a table of contents. Extensions are explicit, declarative, and easy to debug.
Environment reproducibility: uv.lock for developers, requirements.txt or environment.yml for TouchDesigner. Both humans and TD can bootstrap consistently.
Cross‑platform ready: .bat for Windows, .bash for macOS/Linux, with override support for TouchDesigner executable paths.
Doctor mindset: Always check your system before scaffolding — tdfw doctor ensures you’re ready.
Iterative growth: Start simple (one app, one extension), then evolve into complex state‑machine architectures without spaghetti networks.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tdfw-0.1.4.tar.gz.
File metadata
- Download URL: tdfw-0.1.4.tar.gz
- Upload date:
- Size: 8.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c07e3168d5763a2e00548f90f69702f134b1690e418f1f97c96403dbcbd8c8c9
|
|
| MD5 |
0f849b3da6c3f6f7203b2803aec9af1c
|
|
| BLAKE2b-256 |
724d963a099e2c823e2263e1fdacb8ea6518f8492766851f10aa1033b8e17b98
|
Provenance
The following attestation bundles were made for tdfw-0.1.4.tar.gz:
Publisher:
publish.yaml on MichaelKramerGuitar/tdfw
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tdfw-0.1.4.tar.gz -
Subject digest:
c07e3168d5763a2e00548f90f69702f134b1690e418f1f97c96403dbcbd8c8c9 - Sigstore transparency entry: 2052483284
- Sigstore integration time:
-
Permalink:
MichaelKramerGuitar/tdfw@0dbfc6f32ad856f6772ac0382eb33a7505459f72 -
Branch / Tag:
refs/tags/v0.1.4 - Owner: https://github.com/MichaelKramerGuitar
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yaml@0dbfc6f32ad856f6772ac0382eb33a7505459f72 -
Trigger Event:
push
-
Statement type:
File details
Details for the file tdfw-0.1.4-py3-none-any.whl.
File metadata
- Download URL: tdfw-0.1.4-py3-none-any.whl
- Upload date:
- Size: 8.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c7e77e8422a183089f954fb79a64689c8278458fa0b283da92ab0a5b78b19dbc
|
|
| MD5 |
1c578d859f586285712b8ce630677562
|
|
| BLAKE2b-256 |
a4cbf541f54aebcfdb66db9131627f9c2fdbb2ead0a0d871bd7a07d21bcf9bea
|
Provenance
The following attestation bundles were made for tdfw-0.1.4-py3-none-any.whl:
Publisher:
publish.yaml on MichaelKramerGuitar/tdfw
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tdfw-0.1.4-py3-none-any.whl -
Subject digest:
c7e77e8422a183089f954fb79a64689c8278458fa0b283da92ab0a5b78b19dbc - Sigstore transparency entry: 2052483735
- Sigstore integration time:
-
Permalink:
MichaelKramerGuitar/tdfw@0dbfc6f32ad856f6772ac0382eb33a7505459f72 -
Branch / Tag:
refs/tags/v0.1.4 - Owner: https://github.com/MichaelKramerGuitar
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yaml@0dbfc6f32ad856f6772ac0382eb33a7505459f72 -
Trigger Event:
push
-
Statement type: