Background
My friend does compositing and wanted to find out whether AI image and video tools could fit into a Nuke workflow. An open-source plugin, ComfyUI-for-Nuke, makes that possible, but it needs a lot: ComfyUI itself, a PyTorch build that matches the graphics card, two ComfyUI nodes, the Nuke plugin, Python packages for Nuke's own Python and an edit to Nuke's menu.py.
My friend isn't technical, and their biggest fear was an update that stops old projects from opening. So the rules were clear: no typing commands, no changes to anything already on their computer, and updates only when they choose them, with a way back.
What I tried
- A written list of install steps: nine steps, a few of them in an administrator terminal. For someone who isn't technical, one wrong step and they are stuck.
- One bash script for Windows and Mac: it sounds neat, but a fresh Windows PC has no Git, so no Git Bash, so the very first step (install Git) can't run. In the end Windows uses the built-in PowerShell, Mac uses the built-in bash, and both read the same version list.
- Using the Python and Git already on the computer: it saves space, but any upgrade could break their other tools. Everything moved to private copies instead.
How it works
1. Everything in one folder
The script downloads private copies of Git, uv (a Python package manager) and Python into the install folder. The only thing written outside it is a tiny settings file that remembers where it was installed. No environment variables, no PATH changes.
2. Versions pinned in one list
ComfyUI, the nodes and the plugin are pinned to tested commits. PyTorch is picked for the graphics card: a newer driver gets the newer CUDA build, older cards get an older build, and without NVIDIA it falls back to CPU.
{
"repos": { "comfyui": { "ref": "v0.x.y", "commit": "<sha>", "risk": "Medium" } },
"torch": [ { "name": "cu130", "minDriver": 580, "minComputeCap": 7.5 },
{ "name": "cpu" } ]
}
3. Updates one by one, with a restore point first
"Check for updates" lists each item with its old and new version and a risk note (the Nuke plugin is marked "High: ComfyUI nodes in older .nk scripts may need to be refreshed"), and only what they pick gets updated. Before every install, update or rollback the script records each repo's commit, the Python package list and menu.py, so any earlier state can come back.
4. Only one marked block in menu.py
Nuke's settings file gets a single block with clear start and end markers, backed up before every change, and uninstall removes only that block.
5. Logs, a change list and "Doctor"
Every run writes a log and ends with a list of what was installed, updated or backed up. When something goes wrong, "Doctor" puts a zip of logs and settings (no images or projects) on the desktop that they can send me.
Things that bit me
-
uv tries to be helpful: when it installs Python it adds a shortcut to the PATH and registers it in the Windows registry. It takes
--no-binand--no-registryto really leave the system alone. - The user's PYTHONPATH: if the computer has PYTHONPATH or PYTHONHOME set, even a separate environment picks up old packages or fails to start. The script and the launcher clear those variables for their own process only.
-
PowerShell swallows output: running a program directly inside a function turns its output into the function's return value, so prompts and progress bars vanish.
Start-Process -NoNewWindow -Waitfixed it. - The Mac's bash is old: macOS ships bash 3.2, with no associative arrays, so the script reads JSON with the built-in plutil instead of extra tools.
What improved
| Before | After | |
|---|---|---|
| Install | Nine manual steps, admin rights | Double-click, choose 1, about fifteen minutes |
| Effect on the computer | Changes system Python and PATH | Everything in one folder |
| Updates | All at once, no way back | Picked one by one with a risk note, can roll back |
| When something breaks | Just "it won't open" | Logs, a change list and a Doctor zip |
Still to do: the Mac version hasn't run on a real Mac yet. That's next.
Let AI apply it for you
If you want to package an open-source tool for a friend who isn't technical, paste this into an AI coding assistant:
Write a one-click installer for <tool> for a non-technical user:
1. Self-contained: download private copies of every runtime (Git, Python via uv) into one install
folder. Never touch the system PATH, registry, environment variables or existing installs, and
ignore PYTHONPATH/PYTHONHOME for our own processes only.
2. Pinned: keep every version (repos by commit, packages, runtimes) in one manifest of tested versions.
Pick the GPU build from the detected driver.
3. Updates: list each item with old/new version and a plain-English risk, let the user pick by number,
and update tested versions together as a set.
4. Reversible: before every install/update/rollback, snapshot repo commits, the package list and any
config file we edit; offer rollback to any snapshot. Only edit config inside a marked block, after a backup.
5. Traceable: a log per run, a summary of what changed, and a "Doctor" option that zips logs and settings.
Windows uses the built-in PowerShell 5.1, macOS the built-in bash 3.2. Ask before anything destructive.
Cover: Free close socket toolbox image by Unknown, CC0 1.0.
Top comments (0)