Skip to content

Releases: ismail-bahloul/TouchDesigner-Linux

v1.8.3

Choose a tag to compare

@ismail-bahloul ismail-bahloul released this 12 Sep 17:08

Fixes

  • Versioned shortcuts are no longer labelled "unknown". When the version could not be read out of TouchDesigner.exe (missing or timed-out strings, a partially written file), detection fell back to the literal "unknown", so an entry named "TouchDesigner unknown" could appear in the application menu. The version is now also read from the install path (.../TouchDesigner <version>/), which always carries it.
  • No more silent shortcut collisions. Two installs that resolved to the same label produced the same .desktop filename, so one shortcut silently overwrote the other (which is why a single "unknown" entry could remain for two installs). Versioned shortcut file names and labels are now made unique.

v1.8.2

Choose a tag to compare

@ismail-bahloul ismail-bahloul released this 12 Sep 12:47

Fixes

  • Download integrity. download_file() now writes to <dest>.part and renames onto the final path only when complete, and a truncated urllib transfer (fewer bytes than Content-Length) is reported as a failure. An interrupted or truncated download can no longer leave a partial file that callers treat as "already downloaded".
  • Real checksum verification. The Soda, DXVK and winetricks SHA-256 constants were read from the environment with an empty default, and verify_checksum() returns True for an empty hash, so nothing was ever verified. They are now pinned to the actual release-asset hashes; winetricks is pinned to a tag and its checksum is now checked too.
  • Container mode no longer drops --no-patch. The launcher parsed and shifted its flags before the distrobox re-exec, so the re-entered container never saw them. The original arguments are now preserved for the re-exec.
  • Removed the --fast option, which was accepted and documented but never read.

Changed

  • TouchDesigner pinned to 2025.33230 (_td_ver in the AUR PKGBUILD, regenerated .SRCINFO, and added to FALLBACK_VERSIONS).

v1.8.1

Choose a tag to compare

@ismail-bahloul ismail-bahloul released this 12 Sep 10:51

Fixes

  • Lucida Console mono font in the Wine prefix. TouchDesigner uses "Lucida Console" as its default mono font (parameter value fields, OP name fields, DAT tables, Textport). It ships with Windows but is not part of corefonts, so prefixes built by this tool could not resolve it: TD logged Error Loading Default Mono Font ... Substituted with Verdana and rendered mono text blank. Install and --update now install a mono lucon.ttf whose family is "Lucida Console" (generated from DejaVu Sans Mono, shipped in Assets/) into drive_c/windows/Fonts and register it. This fixes the error and the blank mono text, independently of the wine_ui_fixes.tox pass. The AUR package ships it too (injected into the pre-made prefix at build time, plus an idempotent launcher step for existing user prefixes).

TouchDesigner-Linux v1.8

Choose a tag to compare

@ismail-bahloul ismail-bahloul released this 27 Aug 17:15

What's new

  • Container mode (Distrobox / Podman) - td-install --container <action> runs the whole install inside an isolated container: no sudo, no 32-bit repository setup, works on immutable distros and SteamOS. First run creates a touchdesigner-linux container (Ubuntu 24.04, NVIDIA auto-detected), and the launcher, desktop shortcuts and .toe associations re-enter the container from the host. TD_CONTAINER_NAME / TD_CONTAINER_IMAGE override the defaults. Verified with Ubuntu 24.04 and Fedora 40 containers.
  • touchdesigner terminal command - works from any terminal with -h, -v, --list, --no-patch and --verbose flags.
  • CodeMeter runtime install and remove - td-install --codemeter install <path> installs the Wibu runtime without msiexec (native extraction, Inno and WiX/MSI bundles), and --codemeter remove cleans it up. Strictly opt-in: the runtime is never installed automatically.
  • DXVK now actually installs - the "already installed" check confused Wine's builtin wined3d DLLs with DXVK, so many installs silently ran on wined3d. Detection is fixed, DLL overrides are always registered, and DXVK is bumped to 2.7.1. This makes the Syphon/Spout Out TOP work (shared-texture path).

Bug fixes

  • One-liner (curl | bash) works in minimal environments without git (tarball fallback) and never serves a stale cached installer
  • First container run auto-accepts the image pull instead of failing non-interactively
  • --container install (bare action word) parses correctly
  • Launcher --exe <path> parsing fixed (a stray ] broke it at runtime)
  • Banner shows the short version (v1.8) instead of the full 1.8.0

Documentation & CI

  • New container mode guide, CodeMeter guide updates (status, opt-in guarantee, uninstall), compatibility matrix updated (Syphon/Spout, DXVK)
  • Roadmap updated with the pending CodeMeter Wine 10/11 test

Known issues / deferred

  • CodeMeter network client under Wine is still blocked: runtime 7.60d loads (the cpsrt.dll crash only affects 8.41a/9.10) but the service stalls under Wine 9.0. Next step is a newer Wine build. See docs/codemeter.md
  • DXVK 3.x crashes on the Spout node under Wine 9.0, so the project stays on 2.7.1
  • distrobox --nvidia init is slow on big systems (scans the whole host tree at each container start); TD_CONTAINER_NO_NVIDIA=1 skips it

Technical

  • TouchDesigner 2025.33070
  • Soda Wine 9.0-1
  • DXVK 2.7.1

TouchDesigner-Linux v1.7

Choose a tag to compare

@ismail-bahloul ismail-bahloul released this 20 Aug 12:13

What's new

CodeMeter licensing tooling (td-install --codemeter):

  • status / setup / start: detect the CodeMeter runtime in the Wine prefix and manage it
  • add-server / remove-server / servers: manage the client's Server Search List via Wibu's official cmu32 --add-server / cmu.exe tools, with a registry fallback
  • The launcher auto-starts CodeMeter.exe when the runtime is installed
  • Server side validated: a native Linux daemon or the official docker-codemeter image shares licenses over the LAN (UDP/TCP 22350)
  • Client side under Wine is currently blocked: the CodeMeter service will not start under the project's Wine runner (Wibu's protected cpsrt.dll fails to load). See docs/codemeter.md for test results and unblocking ideas. Software license keys (ins*.dat) are unaffected and work as before.

Also new from the unannounced v1.6.2 tag:

  • Version-aware font-fix re-patch + .toc dedup (already-patched projects get updated fixes without corruption)
  • NVIDIA driver guard: safe GPU auto-detect via nvidia-smi -L, no more forced offload (fixes black screens)
  • AUR launcher auto-patches .toe files
  • License-loss warning on full uninstall
  • safe_rm hardened against accidental system deletion

Bug fixes

  • Launcher failures are logged and surfaced with a desktop notification (no more silent icon clicks)
  • SteamOS read-only root auto-disabled before pacman steps
  • openSUSE zypper repos refreshed before install
  • Headless wineboot in SSH/CI (fixes winetricks/vcrun when there is no display)
  • Interactive menu banner now shows the real version (was hardcoded to v1.4)
  • AUR: licenses are now preserved across paru -Syu / yay -Syu updates (the launcher's ProgramData refresh no longer touches Derivative/, and the license is backed up around wineboot; this addresses a report of a v1.6 to v1.6.2 update changing the System Code and consuming a second activation)

Documentation & CI

  • New CodeMeter guide, compatibility and how-it-works updates, runner test findings
  • Weekly smoke test runs under xvfb and verifies the TouchDesigner install
  • GitHub issue templates

Known issues / deferred

  • CodeMeter network client under Wine is blocked (see above); direct USB dongle passthrough is not supported

Technical

  • TouchDesigner 2025.33070
  • Soda Wine 9.0-1
  • DXVK 2.4

TouchDesigner-Linux v1.6

Choose a tag to compare

@ismail-bahloul ismail-bahloul released this 24 Jul 15:42

What's new

  • Dynamic font-fix detection -- wine_ui_fixes.tox no longer relies on a hardcoded table of ~23 specific paths that silently breaks whenever Derivative changes internal UI paths in a new TD version. It now scans /ui (TD's own interface) and the regular project tree dynamically, converting any Text TOP that isn't already rendering with the working display method
  • Fixes third-party palette components too -- the scan also covers the regular project tree, not just TD's own interface, so components dragged in from the Palette (e.g. kantanMapper) that render with missing letters (j/y/p/g -- anything with a descender) get fixed automatically, not just TD's own dialogs
  • Working "Fix Now" button -- the previous version's manual-trigger button was wired through a parameter expression that silently did nothing when clicked. Rewired as a proper Parameter Execute DAT, so it actually runs the fix on demand instead of requiring a full project restart
  • Verified on both Soda and GE-Proton, groundwork for a future GE-Proton default -- what counts as "broken" isn't identical between runners (Soda and GE-Proton disagree on which elements default to a working state), so the fix was checked against both instead of assuming one covers the other. This also doubles as prep work for eventually switching the default runner to GE-Proton, which renders more correctly overall but still has an open crash under the full launcher (GPU hybrid switching) that needs isolating first

Bug fixes

  • Infinite install loop in non-interactive mode -- td-install -n (and install.sh piped through curl | bash) never exited after a successful install: the loop's "pause and return to menu" step is skipped in non-interactive mode, but so was its only break, so it silently re-ran the entire install forever. Found by actually running the installer end-to-end from a fresh clone instead of only testing the existing dev setup by hand

Known issues / deferred

  • TD-as-Code (tdascode/) held back for v1.7 -- an experimental module for programmatic .toe editing (--expand/--collapse/--info) was built to develop and verify the font fix above, but it has two confirmed correctness bugs in its write path: a wrong assumption about the .text file's binary header size (truncates/corrupts DAT script content) and incorrect .toc regeneration when adding nodes. Read-only inspection works fine; writing does not yet. Not shipped this release -- code is preserved on the dev branch for v1.7

Technical

  • TouchDesigner 2025.33070
  • Soda Wine 9.0-1
  • DXVK 2.4

TouchDesigner-Linux v1.5

Choose a tag to compare

@ismail-bahloul ismail-bahloul released this 17 Jul 13:54

What's new

  • pip wrapper -- td-install --pip install <package> wraps wine64 python.exe -m pip install with proper Wine environment setup (torch KMP_AFFINITY fix included)
  • Native external editor -- Ctrl+E opens Text DATs in the user's default Linux editor via xdg-open instead of the Windows editor
  • Auto-detect LogPixels DPI -- reads Xft.dpi from the display server on first launch and applies the correct LogPixels value (96/120/144/192). Override with TD_DPI=96 touchdesigner. No more hardcoded 120 DPI
  • License preservation -- backs up ProgramData/Derivative/ before wineboot and restores it after. Also preserved during install/reinstall when commonappdata/ is copied over ProgramData. No more lost licenses
  • AUR PKGBUILD -- complete Arch Linux package with proper desktop entries, file associations, MIME types, icons, and post-install hooks
  • AUR launcher -- Python launcher replacing the bash heredoc wrapper, with full .toe patching support and drive symlink handling
  • System install path -- td-install now finds td_lib from /usr/share/touchdesigner-linux/ when installed as a system package (AUR)

Improvements

  • wineboot runs only on first launch (tracked by .td_initialized flag)
  • dosdevices symlinks (c:, z:) are properly created instead of crashing on fresh prefix
  • .toe patching handles timeouts without leaving corrupted state
  • Backup directory auto-cleanup for backups older than 30 days
  • Interactive menu uses raw terminal mode for reliable arrow key navigation
  • Non-interactive mode auto-detects headless/SSH sessions
  • Diagnose command checks AUR install paths for installed TouchDesigner versions

Bug fixes

  • License files no longer overwritten by commonappdata during install/reinstall
  • Missing import re added in update module
  • Winetricks log file read-after-delete race condition fixed
  • Empty version list no longer crashes the installer
  • --help flag works before Wine environment initialization
  • Uninstall back button correctly returns to main menu instead of looping
  • Bash launcher syntax errors fixed (heredoc expansion, subshell piping)

Documentation

Technical

  • TouchDesigner 2025.33070
  • Soda Wine 9.0-1
  • DXVK 2.4

TouchDesigner-Linux v1.4

Choose a tag to compare

@ismail-bahloul ismail-bahloul released this 26 Jun 15:22

What's new

  • Complete Python rewrite — replaced the 3340-line bash script with a modular Python codebase (td_lib/)
  • Multi-version support — install multiple TouchDesigner versions side-by-side (e.g. 2025 + 2023)
  • Interactive version picker — ↑/↓ arrow keys to select TouchDesigner version
  • Progress bars — clean download progress for Soda runner and TouchDesigner installers
  • Winetricks heartbeat — live progress display during Windows dependency installation
  • IDS Peak SDK patching — automatic detection and patching across all installed versions
  • .toe file patching — auto-patches NewProject.toe templates with wine_ui_fixes on install, update, and launch
  • Versioned shortcuts — separate desktop/application menu entries for each installed version
  • --diagnose — new health check command for troubleshooting
  • Comprehensive test suite — 171 static tests, multi-distro CI (Ubuntu, Fedora, Arch, openSUSE)
  • v1.3 curl one-liner preserved — curl -sSL ... | bash still works

Breaking changes

  • Old bash install.sh replaced by Python td-install. The install.sh wrapper still works as the entry point.
  • Install directories now versioned (TouchDesigner 2025.32820/ instead of TouchDesigner/)

TouchDesigner-Linux v1.3

Choose a tag to compare

@ismail-bahloul ismail-bahloul released this 14 Jun 19:48

This release reworks the TouchDesigner installation pipeline. No more 40-minute Wine GUI installer — the .exe is now extracted natively using 7z and innoextract, cutting installation time to ~2 minutes. It also unlocks full headless/SSH deployment and fixes long-standing winetricks compatibility issues.

New Features

  • Silent Native Extraction: The TouchDesigner installer is now extracted entirely on Linux using 7z + innoextract. No Wine, no GUI, no X11 dependency. The embedded Inno Setup archive is decompressed natively in ~90 seconds instead of the previous ~30 minutes through the Wine GUI.
  • Full Headless Support: Installation works over SSH, CI pipelines, or any environment without a graphical session. The new --headless / -H flag lets you deploy TouchDesigner remotely with a single command.
  • Automatic Dependency Resolution: innoextract and 7z are now installed automatically by the script across all supported package managers (pacman, apt, dnf, zypper). No manual setup required.

Stability & Bug Fixes

  • Winetricks Mono Crash Fixed: Removed the WINEDLLOVERRIDES=mscoree= override that was silently breaking vcrun2019 installation. corefonts, d3dx11_43, and vcrun2019 now install reliably without manual intervention.
  • Disk Space Guard: Temporary extraction directories are now placed under $TD_BASE_DIR/tmp/ instead of /tmp/ to avoid filling up tmpfs partitions during large decompressions.
  • Automatic Temp Cleanup: Leftover extraction artifacts from previous runs are automatically purged at the start of each installation.

Reliability & Polish

  • Desktop Integration Now Automatic: Shortcuts, MIME associations, and .toe/.tox file type registration happen automatically without prompting — no more "Y/n" pauses during installation.
  • Progress Heartbeats: Added visible progress indicators for the 7z and innoextract extraction steps, so you know the installer is actively working.
  • Verbose Error Logging: Winetricks failures now dump the full log instead of relying on fragile grep filters, making debugging dramatically easier.
  • Version Bump: v1.3

Notes

  • The silent method requires innoextract and 7z (installed automatically). If a system lacks both, the script will exit with a clear error message.
  • Existing TouchDesigner installations are unaffected — the new extraction method is a drop-in replacement for the old Wine GUI installer.
  • First launch still takes 1–2 minutes as the Wine prefix initializes. This is normal.

# Standard install
curl -sSL https://raw.githubusercontent.com/iswad-lab/TouchDesigner-Linux/main/install.sh | bash
# Headless install (SSH, no display)
curl -sSL https://raw.githubusercontent.com/iswad-lab/TouchDesigner-Linux/main/install.sh | bash -s -- -H

Cheers,
Iswad

TouchDesigner-Linux v1.2.0

Choose a tag to compare

@ismail-bahloul ismail-bahloul released this 30 May 18:45

This is a major and long-awaited release that brings full automation, enhanced desktop environment integration, and critical stability fixes for modern Linux compositors.

This release introduces native, automatic .toe project patching (eliminating the need to drag the UI fix manually), custom-designed high-fidelity SVG icons for all core file types, a dedicated component update system, and deep pipeline fixes for Wayland (KDE Plasma 6).

New Features

  • Universal Auto-Patching Pipeline: When you double-click a .toe file or open one via CLI, the launcher automatically checks if wine_ui_fixes is missing and injects it on the fly using toeexpand/toecollapse.
  • Scalable Icons (SVG): Complete overhaul of file associations. The project now bundles 3 distinct custom SVG icons to give a native Windows-like feel to your desktop environment:
    • Application Desktop Launcher
    • .toe Project Files
    • .tox Component Files
  • Option 3 – Dedicated Update Mode: Added a robust maintenance option in the install.sh menu. It instantly regenerates your launcher, pulls the latest winetricks, refreshes DXVK core links, and updates wine_ui_fixes.tox without requiring a heavy 300+ MiB download of TouchDesigner or the Wine runner.
  • Smart Bulletproof Backups: Before any automated patch, the original file is copied to a centralized directory ($TD_BASE_DIR/backups/).
    • Anti-collision: Backup filenames are uniquely generated based on their absolute Linux paths (slashes replaced by underscores). Two projects named project.toe in different directories will never overwrite each other.
    • Auto-cleanup: An embedded automated garbage collector purges backups untouched for more than 30 days to keep your storage clean.

Wayland & Graphics Fixes

  • Compositor Crash Guard: Injected export WAYLAND_DISPLAY="" and export __GL_YIELD="USLEEP" directly into the launcher pipeline. This completely mitigates intermittent GLXBadDrawable / X_GLXMakeCurrent timing issues on hybrid GPU layouts under Wayland.
  • Hardware Profile Persistence: The Update engine now securely parses and preserves your custom USE_NVIDIA_DGPU variable configuration across script regenerations.

Reliability & Polish

  • Zero-Zombie Execution: The launcher script now boots Wine using exec instead of an asynchronous background job (&). The shell cleanly exits, and closing TouchDesigner immediately kills its PID, saving ~100 MiB of ghost RAM.
  • Atomic Uninstall: The uninstaller has been rewritten to clean out the new centralized backup cache and purge all XDG MIME-type icons.
  • Documentation & Framework: Updated the README.md to map out the new update and backup lifecycles. Removing the manual install guide since you don't need it anymore :)

Your feedback is highly valued for this release! 🙏
Enjoy the new improved workflow.

Cheers,
Iswad

curl -sSL https://raw.githubusercontent.com/iswad-lab/TouchDesigner-Linux/main/install.sh | bash