Adds a Koolook subclass of VHS VideoCombine that bypasses ComfyUI's output-directory sandbox when filename_prefix is an absolute path — the VFX-pipeline missing piece for writing renders into a project tree (e.g. E:/projects/shot01/v003) instead of ComfyUI/output/. Implementation: - k_video_combine.py: ~60 LoC subclass + a pure _resolve_abs_target helper. Scoped-patches folder_paths.get_save_image_path for the duration of one combine_video() call so upstream's encoder, audio mux, batch manager, and progress bar run unchanged. No VHS code copied. Self-skips registration when VHS isn't importable (clean one-line stderr notice). - Discriminator: os.path.isabs(filename_prefix). No new input pin; pattern borrowed from spacepxl/ComfyUI-HQ-Image-Save's SaveEXR. - Optional create_path_if_missing BOOLEAN (default False) so typos surface as FileNotFoundError instead of spawning stray dirs. License audit (2026-05-16): - VHS upstream: GPL-3.0 (verified via raw LICENSE fetch). - HQ-Image-Save pattern source: MIT, copyright 2023 spacepxl. - Koolook: already GPL-3.0; both upstreams are compatible. - No source code from either upstream is incorporated. Verification: 18 pytest cases green (12 existing + 6 new covering relative passthrough, absolute resolution, create-on/off branches, trailing-separator normalization, and empty-basename rejection). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.1 KiB
GitHub Copilot — repo orientation
Thin pointer. The canonical agent context lives in CLAUDE.md
at the repo root — read that first for source-of-truth conventions, dev-sync
rules, release rules, fork policy, and trigger phrases. This file only carries
the high-stability orientation that helps Copilot place a request before it
follows links.
What this repo is
ComfyUI-Koolook is a custom-node pack for ComfyUI. Two shipped surfaces:
-
Kforge Labs sidebar — the main user-facing experience. A ComfyUI sidebar tab that saves favorite nodes, workflows (with subdirectories + archive + tags + reusable modules), and full-state snapshots to a configurable on-disk library.
- Front-end entry:
web/koolook_sidebar.js; module bodies underweb/sidebar/. - Back-end snapshot/preset routes:
koolook_routes.py(registers/koolook/presets/*aiohttp routes on ComfyUI's PromptServer). - Bundled visual onboarding guide:
web/guide/index.html(also opened in-app via the sidebar's Tools-row Help button).
- Front-end entry:
-
Koolook custom nodes — Python node classes at the repo root, each exposing the standard ComfyUI node contract (
INPUT_TYPES,RETURN_TYPES,RETURN_NAMES,FUNCTION,CATEGORY):k_easy_wan22_prompt.py→EasyWan22Prompt(readsconfig.jsonat import time — edits toconfig.jsonneed a ComfyUI restart).k_easy_resize.py→EasyResize_Koolook(deprecated aliasEasyResizestill registered for back-compat).k_ai_pipeline.py→EasyAIPipeline(paired with front-end widgets inweb/ai_pipeline.js).k_easy_image_batch.py→easy_ImageBatch.k_easy_track.py→KoolookLoadCameraPosesAbsolute.k_video_combine.py→Easy_VideoCombine(runtime subclass of VHSVideoCombine; self-skips if VHS not installed).- Radiance VAE wrappers under
forks/radiance_koolook/versions/v2_3_3/→Easy_hdr_VAE_encode,Easy_hdr_VAE_decode.
__init__.py imports each module's NODE_CLASS_MAPPINGS /
NODE_DISPLAY_NAME_MAPPINGS and exposes the merged set plus WEB_DIRECTORY.
Things that bite if you don't know them
- Node IDs in saved workflows are stable. Never rename a registered node
ID without a back-compat alias — see
docs/maintainers/node-versioning.md. - Third-party code stays out of MAIN. Modified fork code lives under
forks/<name>/versions/<vX_Y_Z>/; raw upstream checkouts live in../ComfyUI-Forks/. Seeforks/README.mdandforks/THIRD_PARTY.md. dev-syncis user-triggered only. Never run it automatically (e.g. after a commit, after a merge, on session end). The maintainer runs parallel worktrees and an unsolicited sync overwrites whatever they're reviewing in their live ComfyUI. Wait for the explicit phrase. Full rules inCLAUDE.md.- UI work needs visual QA. See
AGENTS.md— open the changed page in a browser, take a screenshot, verify before claiming done. - Three independent version axes (pack version / fork wrapper version /
upstream pinned commit) — see
docs/reference/versioning.mdbefore any version bump.
Where to look next
CLAUDE.md— full project conventions and protocolsdocs/maintainers/— release procedure, dev-sync loop, registry API, sidebar starter preset, workflows-sidebar referencedocs/reference/— glossary, versioning modeldocs/user_guide/— per-node end-user docsREADME.md— public landing page + installCHANGELOG.md— what changed, in detail