Skip to content

ComfyUI Base 3.9.2

Choose a tag to compare

@github-actions github-actions released this 16 Oct 08:14
· 29 commits to main since this release
434f1f2

ComfyUI Base 3.9.2: fake_pod carries every ZIP_EXTRA path; testbed.sh stops only its own server; no full resolve for a Python torch has no wheels for (#15)

Three harness defects, 2026-10-16. Two came from porting
Soul-Craft/SoulCraft-Workflows#2 (Video Replacer 5.1.0) into
SoulCraft-Org; the third (defect B) from the Video Swapper's pod
install.

1. basetest.fake_pod leaves out shipped directories that are not

packs
It copied a package's top-level files and its node packs (directories
with an __init__.py), so the Video Replacer's app/ (listed in its
ZIP_EXTRA) never reached the fake machine. The Replacer's install test
copied it by hand. fake_pod now also copies every path the script's
ZIP_EXTRA lists, read by the new basetest.zip_extra() the same way
_build/package.py reads it (shlex). A listed file that is missing
raises an error; a file the list leaves out stays off the fake machine,
just as it is off the zip.

2. testbed.sh killed another checkout's ComfyUI

--server and --stop killed whatever was listening on $PORT (lsof).
On a Mac shared by several sessions, that was another checkout's server
on 8199. Now they stop only this checkout's server: the pid recorded in
.testbed-server.pid (now python's own pid), or that pid's child (the
layout of a pid file written by older versions), and only while its
command line is still a ComfyUI main.py. If another process holds the
port, --server exits 1, naming its pid and command and suggesting a
free TESTBED_PORT; --stop leaves it running and says so; --status
says whose server is answering.

3. The venv step tried CPython 3.15 before falling back (defect B)

uv lists 3.15 before torchaudio ships a cp315 wheel. The backend
pre-pick ran torch_pick.py for 3.15 (stepping down through every CUDA
build), then _base_python_pick ran the full derived-set resolve for
3.15, and only then did both fall back to 3.14. The new
_base_family_minors asks uv for the torch family alone (torch,
torchvision, torchaudio) for each minor, newest first, and drops every
minor newer than the first one that resolves; both picks iterate that
list. podctl.py is untouched.

Tests (unit tier)

  • test_unit_fake_pod_carries_every_file_zip_extra_ships

test_unit_testbed_stops_only_the_server_it_started_and_refuses_a_foreign_port:
fails against 3.9.1's testbed.sh (the foreign listener gets SIGTERM)

test_unit_a_minor_without_torch_family_wheels_costs_one_small_compile_and_nothing_else:
fails against 3.9.1's 30-venv.sh (3.15 reaches torch_pick and the
full resolve)

Hosts

Exercised on this Mac (macOS, /bin/bash 3.2.57) only:

  • the suite;
  • testbed.sh, live against another checkout's ComfyUI on 8199:
    refused, named and left running;
  • the family check, against the real uv 0.13.1 and index: 3.15 rejected
    in under a second, 3.14 accepted.

Not on a pod. The venv change is tested against a uv stand-in.

The workspace pin follows in SoulCraft-Org/workspace#15.

🤖 Generated with Claude Code

Co-authored-by: Claude Opus 5.5 noreply@anthropic.com

The zip is what a pod installs. Handbook: comfyui-base-handbook.md