用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/dylanroscover/Embody --skill externalize-operator命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
MUST READ before first MCP tool call in a session. Complete Envoy tool catalog with parameters and usage.
Procedure for preparing version release commits -- changelog, README, templates, versioning
Merge or compare two divergent TouchDesigner .tox/.toe binaries that git cannot three-way-merge. Load when a merge/rebase conflicts on a .tox or .toe, when asked to merge, port, reconcile, or diff two versions of a TD component, or when comparing a component across branches, machines, or TD builds.
正在显示 SKILL.md
基于 SOC 职业分类
| name | externalize-operator |
| description | MUST READ before calling externalize_op or save_externalization. Required workflow steps. |
externalize_op tags the operator AND writes it to disk in one step (it calls Update() internally). No separate save is needed.
externalize_op on the operator (auto-detects type if omitted)get_externalization_status to confirm dirty state and file pathembody/ via file inspectionsave_externalization force re-exports an already-externalized operator. Use it after modifying an operator in TD when you need to update its file on disk.
When creating Python files (scripts, extensions, test files, callbacks):
create_op or in TD UI)set_dat_content)externalize_op) — Embody writes the .py file to diskNEVER manually set the file and syncfile parameters — Embody handles all file path management.
Export any COMP as a self-contained .tox with all Embody metadata stripped:
execute_python with op.Embody.ExportPortableTox(target=op('/path/to/comp'), save_path='/output/path.tox')The exported .tox works in any TD project with no missing file errors.
Release hooks: a TEXT DAT named pre_release that is a DIRECT child of the target runs on a STAGED COPY in /sys/quiet — the live comp is never touched, file-sync is disabled on the copy (no write-through to source files), extensions are NOT initialized there and par callbacks don't fire (shape via direct par/DAT/op edits, or use hook_mode='live' for extension logic). A raise aborts the export and keeps the copy as <name>_release_failed for same-session inspection (/sys is not saved; post_release skipped). A direct-child Text DAT named post_release runs on the ORIGINAL after the save whenever pre_release completed — even when the save failed. Both hook DATs are deleted from the copy, so hook code never ships in the artifact. args[0] = resolved save path; post_release also gets args[1] = success. Hooks run synchronously on the main thread — keep them fast, defer uploads. Nested exports from inside a hook run plain (no hooks, no second copy). hook_mode='live' restores in-place semantics (mutations persist, hooks ship dormant in the tox); run_hooks=False skips hooks and ships them as-is (the self-updater's backup uses it). Exports whose target is — or contains — the live Embody COMP are never copy-staged (Embody-self runs live-mode; hooks on a container holding Embody are skipped with a warning in copy mode). op.Embody.ReleaseAll(root=None, out_dir=None) (or the Release All pulse) batch-exports every component that is BOTH Embody-tracked AND hook-bearing — tracked-and-hooked is the opt-in (third-party comps ship with their authors' hook DATs and are never batch-released); per-component failures log and continue.
get_externalizations — list all externalized operators with statusget_externalization_status — get dirty state, build number, timestamp, file path for a specific operatorWhen exporting a TDN-strategy COMP whose network contains TD palette components (e.g. abletonLink, Widget components, anything under Samples/Palette/), Embody consults the Tdnpalettehandling par on the Embody COMP's TDN page:
comp.store('_tdn_palette_handling', ...) so repeated exports don't re-prompt."palette_clone": true, skip internal children. Correct for stock palette COMPs.Check and override programmatically: op.Embody.par.Tdnpalettehandling = 'blackbox' | 'fullexport' | 'ask', or force a specific COMP: op('/path/to/comp').store('_tdn_palette_handling', 'fullexport').