Files
malkuthro-ComfyUI-Koolook/forks
malkuthroandClaude Opus 4.7 a40117c8c2 feat(video): add Easy_VideoCombine with absolute-path support
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>
2026-05-16 20:19:07 +02:00
..

Forks Workflow

This folder is the single source for all fork tracking metadata inside MAIN.

Purpose

  • Keep modified forked code in MAIN under versioned paths (for GitHub tracking).
  • Keep raw external checkouts outside MAIN under ../ComfyUI-Forks (for upstream reference/sync).
  • Keep all fork metadata in one place:
    • forks/forks_manifest.yaml
    • forks/THIRD_PARTY.md

Folder Layout in MAIN

  • forks/radiance_koolook/__init__.py -> package entrypoint used by root __init__.py
  • forks/radiance_koolook/versions/v2_3_3/ -> local modified node sources (currently the only active version)
  • forks/radiance_koolook/versions/<version>/UPSTREAM_PIN.yaml -> exact upstream parity pin

The earlier v1_0_1 fork was removed in v0.1.5 — see THIRD_PARTY.md for the rationale and recovery instructions.

External Folder Naming (outside MAIN)

Root: ../ComfyUI-Forks

  • Pinned baseline checkout:
    • radiance-v2.3.3-koolook
  • Rolling upstream checkout:
    • radiance-main-upstream

These names are referenced from forks/forks_manifest.yaml.

Referencing System

For each fork entry in forks/forks_manifest.yaml:

  • source_repo = canonical upstream URL
  • source_ref = release/tag (or baseline descriptor)
  • pinned_commit = exact reproducible commit hash
  • external_checkout.relative_path_from_forks_root = pinned raw reference folder
  • external_checkout.upstream_tracking_path_from_forks_root = rolling upstream folder
  • local_paths = files tracked in MAIN

Tagging Policy (from now on)

  • MAIN repo tags use SemVer: vMAJOR.MINOR.PATCH.
  • Local fork version folders use underscore variant of the same version:
    • v2_3_3, v2_4_0, etc.
  • Node mapping namespace suffixes must match folder versions:
    • __koolook_v2_3_3, __koolook_v2_4_0, etc.
  • Some node IDs opt out of the suffix via SKIP_VERSION_SUFFIX (see forks/radiance_koolook/versions/v2_3_3/__init__.py) to keep stable user-facing IDs across upgrades.
  • Keep source_ref + pinned_commit in forks/forks_manifest.yaml and UPSTREAM_PIN.yaml.

Upgrade Flow Example (Radiance)

Hypothetical bump from the current v2_3_3 to a future v2_4_0:

  1. Compare current local version (forks/radiance_koolook/versions/v2_3_3) with pinned raw baseline (../ComfyUI-Forks/radiance-v2.3.3-koolook).
  2. Pull latest upstream in ../ComfyUI-Forks/radiance-main-upstream.
  3. Create a new local version folder in MAIN, e.g. forks/radiance_koolook/versions/v2_4_0.
  4. Port/validate modifications.
  5. Namespace node IDs for that version (or keep them stable via SKIP_VERSION_SUFFIX when upstream IDs are unchanged).
  6. Add new entry/update metadata in forks/forks_manifest.yaml.

For the underlying mental model — three independent version axes (pack version / fork wrapper version / upstream pinned commit) — see docs/reference/versioning.md.

Rule of Thumb

  • If it is modified production code -> keep in MAIN under forks/.../versions/...
  • If it is raw upstream reference -> keep outside MAIN under ../ComfyUI-Forks