Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package comfyui for openSUSE:Factory checked in at 2026-08-22 21:35:37 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/comfyui (Old) and /work/SRC/openSUSE:Factory/.comfyui.new.1258 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "comfyui" Sat Aug 22 21:35:37 2026 rev:2 rq:1373109 version:0.33.3 Changes: -------- --- /work/SRC/openSUSE:Factory/comfyui/comfyui.changes 2026-08-21 17:02:06.920734691 +0200 +++ /work/SRC/openSUSE:Factory/.comfyui.new.1258/comfyui.changes 2026-08-22 21:37:45.447681427 +0200 @@ -1,0 +2,14 @@ +Sat Aug 22 14:58:16 UTC 2026 - Martin Pluskal <[email protected]> + +- Fix the very first start of comfyui aborting with a + FileNotFoundError instead of serving the web UI: add + comfyui-create-custom-nodes-directory.patch, which creates the + custom_nodes directory in the per-user base directory +- Load the custom nodes shipped with ComfyUI again: the per-user + base directory had hidden them, so SaveImageWebsocket, used by + the packaged websocket API example, was unavailable +- Do not create the per-user directory tree for comfyui --help +- Require python-comfyui-frontend-package 1.50.6 (XSS fixes + GHSA-2gr5-vw2p-2hcf, GHSA-j6xv-rx8r-mh6j, GHSA-8xxc-66vh-2pf3) + +------------------------------------------------------------------- New: ---- comfyui-create-custom-nodes-directory.patch comfyui-packaged-paths.yaml ----------(New B)---------- New: FileNotFoundError instead of serving the web UI: add comfyui-create-custom-nodes-directory.patch, which creates the custom_nodes directory in the per-user base directory ----------(New E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ comfyui.spec ++++++ --- /var/tmp/diff_new_pack.9AFxQy/_old 2026-08-22 21:37:46.129705807 +0200 +++ /var/tmp/diff_new_pack.9AFxQy/_new 2026-08-22 21:37:46.131705878 +0200 @@ -27,6 +27,9 @@ URL: https://github.com/Comfy-Org/ComfyUI Source0: https://github.com/Comfy-Org/ComfyUI/archive/refs/tags/v%{version}.tar.gz#/ComfyUI-%{version}.tar.gz Source1: comfyui.sh +Source2: comfyui-packaged-paths.yaml +# PATCH-FIX-UPSTREAM comfyui-create-custom-nodes-directory.patch gh#Comfy-Org/ComfyUI#8110 gh#Comfy-Org/ComfyUI#8434 [email protected] -- create custom_nodes under --base-directory, main.py lists it before the server starts +Patch0: comfyui-create-custom-nodes-directory.patch BuildRequires: %{python_module base} BuildRequires: fdupes BuildRequires: python-rpm-macros @@ -43,7 +46,7 @@ Requires: %{primary_python}-comfy-aimdo = 0.4.13 Requires: %{primary_python}-comfy-kitchen = 0.2.31 Requires: %{primary_python}-comfyui-embedded-docs >= 0.5.9 -Requires: %{primary_python}-comfyui-frontend-package = 1.49.6 +Requires: %{primary_python}-comfyui-frontend-package = 1.50.6 Requires: %{primary_python}-comfyui-workflow-templates = 0.11.44 Requires: %{primary_python}-einops Requires: %{primary_python}-filelock @@ -80,8 +83,9 @@ The packaged tree is read-only. Models, custom nodes, input, output, temp and user state live under the per-user --base-directory (default: -$XDG_DATA_HOME/comfyui or ~/.local/share/comfyui). ComfyUI-Manager is not -enabled. +$XDG_DATA_HOME/comfyui or ~/.local/share/comfyui); the custom nodes shipped +with ComfyUI itself are loaded from the package tree as well. +ComfyUI-Manager is not enabled. %prep %autosetup -p1 -n ComfyUI-%{version} @@ -126,6 +130,10 @@ -e 's|@@DATADIR@@|%{_datadir}/comfyui|g' \ %{SOURCE1} > %{buildroot}%{_bindir}/comfyui chmod 0755 %{buildroot}%{_bindir}/comfyui +# --base-directory moves the custom_nodes search path into the user profile; +# register the packaged one as an additional path so both are loaded. +sed -e 's|@@DATADIR@@|%{_datadir}/comfyui|g' \ + %{SOURCE2} > %{buildroot}%{_datadir}/comfyui/comfyui-packaged-paths.yaml %fdupes %{buildroot}%{_datadir}/comfyui %check @@ -135,6 +143,15 @@ # BuildRequires resolve in this project. sh -n %{buildroot}%{_bindir}/comfyui %python_expand $python %{buildroot}%{_datadir}/comfyui/main.py --help +# The launcher must not touch the filesystem for a query-only invocation. +xdg=$(mktemp -d) +XDG_DATA_HOME="$xdg" sh %{buildroot}%{_bindir}/comfyui --help >/dev/null 2>&1 || : +test -z "$(ls -A "$xdg")" +rm -rf "$xdg" +# The extra search path must resolve to the packaged custom nodes. +grep -q '^ custom_nodes: %{_datadir}/comfyui/custom_nodes$' \ + %{buildroot}%{_datadir}/comfyui/comfyui-packaged-paths.yaml +test -f %{buildroot}%{_datadir}/comfyui/custom_nodes/websocket_image_save.py %files %license LICENSE ++++++ comfyui-create-custom-nodes-directory.patch ++++++ From: Martin Pluskal <[email protected]> Subject: Create the custom_nodes directory of a fresh base directory --base-directory relocates custom_nodes onto a per-user path, but nothing creates it. main.py listdirs it before the server starts, so the very first run of a fresh profile dies with FileNotFoundError. Extend the existing input-directory bootstrap in folder_paths to cover custom_nodes too. Reported upstream as Comfy-Org/ComfyUI#8110 and Comfy-Org/ComfyUI#8434. Same fix as nixpkgs carries in use-writable-runtime-paths.patch. Index: ComfyUI-0.33.3/folder_paths.py =================================================================== --- ComfyUI-0.33.3.orig/folder_paths.py +++ ComfyUI-0.33.3/folder_paths.py @@ -42,7 +42,8 @@ folder_names_and_paths["upscale_models"] folder_names_and_paths["latent_upscale_models"] = ([os.path.join(models_dir, "latent_upscale_models")], supported_pt_extensions) -folder_names_and_paths["custom_nodes"] = ([os.path.join(base_path, "custom_nodes")], set()) +custom_nodes_directory = os.path.join(base_path, "custom_nodes") +folder_names_and_paths["custom_nodes"] = ([custom_nodes_directory], set()) folder_names_and_paths["datasets"] = ([os.path.join(base_path, "datasets")], set()) @@ -113,11 +114,12 @@ def map_legacy(folder_name: str) -> str: "clip": "text_encoders"} return legacy.get(folder_name, folder_name) -if not os.path.exists(input_directory): - try: - os.makedirs(input_directory) - except: - logging.error("Failed to create input directory") +for default_directory in (input_directory, custom_nodes_directory): + if not os.path.exists(default_directory): + try: + os.makedirs(default_directory) + except: + logging.error(f"Failed to create {default_directory}") def set_output_directory(output_dir: str) -> None: global output_directory ++++++ comfyui-packaged-paths.yaml ++++++ # Installed by the comfyui package; loaded by the comfyui launcher. # # The launcher passes --base-directory so that models, custom_nodes, input, # output, temp and user live in a writable per-user tree. That also moves the # custom_nodes search path off the read-only package tree, which would hide # the custom nodes shipped with ComfyUI itself. Register the packaged # directory as an additional search path. # # is_default keeps the packaged directory first in the search list. Custom # nodes are registered last-wins, so a user node of the same name still # overrides the packaged one. comfyui-packaged: is_default: true custom_nodes: @@DATADIR@@/custom_nodes ++++++ comfyui.sh ++++++ --- /var/tmp/diff_new_pack.9AFxQy/_old 2026-08-22 21:37:46.208708631 +0200 +++ /var/tmp/diff_new_pack.9AFxQy/_new 2026-08-22 21:37:46.214708845 +0200 @@ -8,6 +8,7 @@ has_base=0 has_db=0 +query_only=0 base="" prev="" for arg in "$@"; do @@ -28,10 +29,13 @@ --database-url|--database-url=*) has_db=1 ;; + -h|--help|--version|--list-feature-flags) + query_only=1 + ;; esac done -if [ "$has_base" -eq 0 ]; then +if [ -z "$base" ]; then if [ -n "${XDG_DATA_HOME:-}" ]; then base=$XDG_DATA_HOME/comfyui elif [ -n "${HOME:-}" ]; then @@ -39,23 +43,36 @@ else base=/tmp/comfyui fi - mkdir -p "$base" || exit 1 +fi + +# main.py exits inside argparse for the query-only flags, so the launcher +# must not create anything either. +if [ "$query_only" -eq 0 ]; then + if [ "$has_base" -eq 0 ]; then + mkdir -p "$base" || exit 1 + fi + if [ "$has_db" -eq 0 ]; then + mkdir -p "$base/user" || exit 1 + fi +fi + +if [ "$has_base" -eq 0 ]; then set -- --base-directory "$base" "$@" fi if [ "$has_db" -eq 0 ]; then - if [ -z "$base" ]; then - if [ -n "${XDG_DATA_HOME:-}" ]; then - base=$XDG_DATA_HOME/comfyui - elif [ -n "${HOME:-}" ]; then - base=$HOME/.local/share/comfyui - else - base=/tmp/comfyui - fi - fi - mkdir -p "$base/user" || exit 1 set -- --database-url "sqlite:///$base/user/comfyui.db" "$@" fi +# A base directory relocates custom_nodes into the per-user tree and hides +# the nodes shipped in the read-only package. Register the packaged +# directory as an additional search path so both are loaded. Appended +# rather than prepended: the option takes nargs='+' and would otherwise +# swallow a following bare argument. Removing the file disables the extra +# path instead of aborting the server. +if [ -f "$datadir/comfyui-packaged-paths.yaml" ]; then + set -- "$@" --extra-model-paths-config "$datadir/comfyui-packaged-paths.yaml" +fi + exec "$python" "$datadir/main.py" "$@"
