Docs

Scripting

The limits that stop an expression or a Python stage from freezing the application, and which interpreter runs it.

"Wrangle expressions are bounded by the step budget (or, with unlimited step budget on, the run-time timer) so a loop cannot freeze the app. Python packages install from a '#@requires' line in the script, not from this page."

That is the page's own summary, and it is the reason every setting below exists: Wrangle runs arbitrary expressions and, optionally, arbitrary Python, so this page is entirely about how it gets stopped if that code misbehaves.

Runtime

Setting What it does Default Range
Step budget per element How many instructions one vertex or triangle may run before its expression is abandoned - what stops a loop that never ends from freezing the app. Raise it if a legitimate loop reports that the expression did not finish; a high value only makes a node slow, never hangs it. Ignored while Unlimited step budget is on. derived automatically, not a fixed shipped number 4096 - 2000000000
Unlimited step budget Turns the step budget above off and uses the run-time limit below instead. off -
Unlimited run time limit (seconds) "How many seconds one evaluation may run once 'Unlimited step budget' above is on - the actual hang guard once the step budget is off. 0 means no time limit at all; see the warning below before leaving this at 0." Disabled unless Unlimited step budget is on. 300 0 - 86400 (0 = no limit)

"With no step limit and no time limit, an expression containing a loop that never ends will run for ever and the app will have to be closed from Task Manager. Set 'Unlimited run time limit (seconds)' to a non-zero value to keep a way out."

Python stage

Setting What it does
Enable embedded Python "A Wrangle node's Python stage runs with this application's full privileges and is not sandboxed - see the in-app node docs for the Python stage before turning this on. The same switch as the -mmpython/-mmpythonenable command-line flags. Also gates code completion in the Python editor: while this is on, 'mm.' and stdlib/package names complete with real signatures using the bundled jedi engine, on top of the always-on built-in name list."

It ships on. A fresh install with no scripting settings file behind it has the Python stage enabled, because nothing in Mesh Morpher ever runs a script by itself: opening a graph, pasting a node and importing a preset all deserialize without executing anything. The gate that matters is the explicit Run press on the Wrangle node, not this switch. Turn it off if you want the stage refused outright on this machine.

Interpreter

Setting What it does Default Range
(interpreter path) "Absolute path to a python.exe. Empty (default) runs this app's own bundled Python 3.11 in-process. A custom path runs THAT interpreter out-of-process instead - any version, your own environment and packages - and gets the hard-kill benefit below for free." empty -
Browse... "Choose a python.exe to run the Wrangle Python stage out-of-process (isolated)." Opens a dialog titled "Choose a Python interpreter". - -
Clear "Return to the built-in interpreter (in-process)." Disabled when the path is already empty. - -
Isolate built-in interpreter "Runs the built-in interpreter as a separate process - slower per Run, but a crashing package cannot take the app down. For a script that imports a native wheel you do not fully trust. Ignored while Python Interpreter Path above is set - a custom interpreter already runs isolated." off -
Python timeout (seconds) "How long a Wrangle node's Python stage may run before it is stopped and reported as timed out. In-process, this is a cooperative cancel serviced between Python bytecode instructions - a script blocked inside a C extension (a long numpy/scipy call, a socket read) is not interrupted until control returns to Python. For a guaranteed hard stop, turn on 'Isolate built-in interpreter' above: it runs out-of-process and is hard-killed on timeout. 0 means no timeout at all - see the warning below before leaving this at 0." 300 0 - 86400 (0 = no timeout)
Additional Python paths "Extra directories appended to sys.path before a Wrangle node's Python stage runs, after the managed packages folder that '#@requires' installs into. One path per line." Multi-line text box. empty -

A status line below the path box reads one of three ways, depending on what is set above:

  • Interpreter: <path> (isolated) - a custom interpreter path is set.
  • Interpreter: built-in 3.11 (isolated) - no custom path, but Isolate built-in interpreter is on.
  • Interpreter: built-in 3.11 (in-process) - no custom path, and not isolated.

"With no timeout, an in-process Python script that hangs (an infinite loop, a network call that never returns) will freeze the app until it is closed from Task Manager. Turn on 'Isolate built-in interpreter' (or set a custom interpreter path) above and a hang can still be cancelled from the progress dialog instead, since that run is a separate, hard-killable process. Set 'Python timeout (seconds)' to a non-zero value for a guaranteed way out either way."

A Reset to defaults button at the bottom-right puts every setting on this page back to the value the app ships with.