mirror of
https://github.com/Comfy-Org/comfyci-runpod-worker.git
synced 2026-11-04 23:47:32 +00:00
[PR #13] [MERGED] Exercise custom-node packs on real GPUs #11
Labels
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Comfy-Org/comfyci-runpod-worker#11
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/Comfy-Org/comfyci-runpod-worker/pull/13
Author: @marawan206
Created: 10/19/2026
Status: ✅ Merged
Merged: 10/19/2026
Merged by: @marawan206
Base:
main← Head:pack-workflows📝 Commits (5)
8718304Exercise custom-node packs on real GPUs4328639Add a synthetic input clip for the VideoHelperSuite workflow19bd941vhs_video_roundtrip: decode the synthetic clip instead of the frontend's test assetbd15cccEnable the four custom-node pack workflows on the cu130 lanef12ad97README: how to tell and flush stale workers after a repoint📊 Changes
28 files changed (+2185 additions, -62 deletions)
View changed files
📝
.github/workflows/build-image.yml(+3 -1)📝
.github/workflows/scripts-tests.yml(+4 -3)📝
Dockerfile(+26 -2)📝
README.md(+106 -7)📝
docker/extra_model_paths.yaml(+3 -0)➕
manifest/custom_nodes.json(+55 -0)➕
manifest/inputs/comfyci_clip.mp4(+0 -0)📝
manifest/workflows.json(+105 -0)➕
manifest/workflows/impact_sdxl_detailer_api.json(+107 -0)➕
manifest/workflows/kjnodes_sdxl_t2i_api.json(+102 -0)➕
manifest/workflows/manager_import_smoke_api.json(+18 -0)➕
manifest/workflows/vhs_video_roundtrip_api.json(+43 -0)📝
scripts/golden_baseline.py(+13 -2)📝
scripts/index_builder.py(+4 -0)📝
scripts/lanes.py(+73 -8)➕
scripts/packs.py(+90 -0)📝
scripts/run_regression.py(+20 -4)📝
scripts/submit_and_poll.py(+10 -4)➕
scripts/tests/test_custom_nodes_worker.py(+471 -0)📝
scripts/tests/test_golden_baseline.py(+22 -0)...and 8 more files
📄 Description
What
Custom-node packs exercised on real GPUs, bit-compared against goldens like every other regression workflow. This is the GPU counterpart of the frontend's custom-node gate: that gate runs ComfyUI with
--cpuon GitHub runners, so anything that only breaks with CUDA kernels, half-precision paths or GPU detectors is invisible to it. The stable-release bar names breaks in KJNodes / VideoHelperSuite / Manager as blockers; after this PR a core commit or a torch lane that breaks one of them shows up on ci.comfy.org within the hour, with a diff image.manifest/custom_nodes.json: the packs, keyed by theircustom_nodesdirectory name and pinned by full commit to what the frontend's gate tests (browser_tests/fixtures/data/customNodeManifest.core.json): KJNodese27a505b, VideoHelperSuite115de7a9, Impact-Pack429d0159; Impact-Subpack50c7b71a(it provides the Ultralytics detector); Manager tag 4.3f764cc0eas the pip package it now is, loaded with--enable-managerand an offline config. Pins are bumped by PR; a bump rebuilds the images and the pack goldens are re-blessed.lanes.jsonbake every pack's requirements at its pin under the lane's torch pins (plus registry pins for the two opencv variants), fetch the sources into a cache, and record the requirements hash per pack. sam2 (an Impact-Pack requirement) installs without build isolation and without its CUDA extension;libgl1is added for the non-headless opencv.src/custom_nodes.py): per job, installs exactly the packs the job asks for at their pinned sha (copy from the image cache, fetch if the pin moved, pip only when the requirements hash differs from the baked one), removes packs a previous job left behind, writes pack config files, merges pack server flags, then reads ComfyUI's "Import times for custom nodes" summary (colour codes and level tags stripped) from the server log. A requested pack that failed to import or is missing turns the run intocustom_node_error(verdictexecution_error) even when the workflow uses none of its nodes; a pack whose pin could not be fetched or installed iscustom_node_install_error(infra, retried once). A server that dies at startup is blamed on a pack only when the log proves pack loading was reached. Jobs without packs are unchanged byte for byte.laneslist per workflow, honoured byrun_regression.py,golden_baseline.pyandlanes.py's per-commit planning. The four pack workflows run onpy313-torch2.14.1-cu130only, since the legacy cu128 image is never rebuilt; the dashboard shows "not run" there and needs no change.kjnodes_sdxl_t2i: SDXL through ImageResizeKJv2, ImageConcanate and ColorMatchV2.vhs_video_roundtrip: VHS_LoadVideo on a small synthetic clip committed undermanifest/inputs/(the frontend'splain_video.mp4asset is an excerpt of a film, and the golden frames would have republished it on the results branch), frames saved as PNG (bit-compared) and recombined to a gif (encode path).impact_sdxl_detailer: SDXL portrait, UltralyticsDetectorProvider (bbox/face_yolov8m.pt) → BboxDetectorSEGS → DetailerForEach.manager_import_smoke: a trivial graph whose only purpose is to fail when Manager does not load.Verification
python -m pytest scripts/tests -q: 341 passed (253 before; the newtest_custom_nodes_worker.pyinstalls from a real local bare repo,test_packs.py, and the lint/lanes/run_regression/golden_baseline/submit_and_poll suites extended).python scripts/lanes.py validateclean.class_typeand input name of the four API prompts was checked against the pinned pack sources and ComfyUI core; the import-summary parser was checked against ComfyUI's current coloured log format.cu130-t2141-8718304built from this branch (details in the follow-up comment): all four pack workflows generated goldens with identical noise floors (r1 == r2), every pack imported from the image cache (source: cache, install under 0.1 s,import: ok, Manager loaded as a baked pip package), validation clean (no missing nodes, nothing stripped); exec times kjnodes 45 s, impact detailer 39 s, VHS 0.5 s, Manager smoke 0.5 s; outputs inspected (the detailer portrait has a clearly detectable face; the KJNodes concat shows the resized, colour-matched pair; the VHS frames are the synthetic clip). The nine core workflows were re-run on the same image and all nine still match their goldens, so the pack dependencies did not move anything the core workflows depend on.Notes
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.