WildAi fcbfcce3a6 plan(P3): address review findings
Five review findings of the P3 phase, each fixed at its root:

1. (medium) The P3.7 metadata test imported `tomllib` at module level: the
   **3.10 CI job** (the declared `requires-python >=3.10` minimum) died
   during collection, so the registry-metadata assertions never ran on 3.10.
   The parser import is now guarded (`tomllib` -> `tomli`, the package the
   3.10 job installs); without any parser the module *skips* instead of
   dying. `pyproject.toml` gained the test extra
   `tomli>=2.0; python_version < '3.11'`.
   Proof: a 3.10 simulation (the stdlib `tomllib` refused for the test
   module, `tomli` on sys.path) -> 6 passed; the control without `tomli`
   -> 6 skipped (no collection error).

2. (medium) The P3.5 "primary-root-first multi-root" resolution was not
   wired into the production load path: `resolve_model_file` (the only
   `get_full_path_or_raise` caller) was used by tests only, so a weight in
   a secondary model root was downloaded into the primary root again.
   `src/keep_paths.py` now has `find_model_file()` (the multi-root lookup
   through `folder_paths.get_full_path_or_raise`) and `resolve_model_root()`
   (the root the weights really live in); `load_file_from_url_comfy()` - the
   production path of `src/keep_model_loader.py:107` - uses the lookup, and
   the facelib root follows the weights (the facelib helper builds its
   paths from a single root). New tests prove that the production path
   uses a weight of an extra model root and that the primary root wins.
   The `models_dir` grep guard is no longer a blanket exemption: only the
   registration in `src/keep_paths.py` may use the attribute.

3. (low) `[tool.comfy].Icon` was an empty string and the test only checked
   that the key exists. The preview asset **is** committed
   (`git cat-file -s HEAD:assets/keep-preview.png` -> 93279 bytes); only the
   working copy was missing (an uncommitted local deletion, restored from
   HEAD - no asset change is in this commit). The key now points at
   `assets/keep-preview.png` and the test asserts that the value is not
   empty and names a file that is really in the repository.

4. (low) `tests/test_package_entrypoint.py` hard-coded the V1 state and
   would have gone red (not xfail) when P4.4 flips the root `__init__.py`
   to `comfy_entrypoint`. The assertions now follow the entry point that is
   really there: exactly **one** mapping style (V1 XOR V3). The mocked
   smoke test of `tests/test_package_import.py` got the same treatment; the
   headless variant is P4.4's job (its test list names it).

5. (low) The plan's §3 rule ("`comfy.*` imports inside `src/` are lazy
   (function-level) so the pack imports without a ComfyUI server") was
   violated and unguarded. The `comfy` imports of `src/keep_model_loader.py`
   and `src/keep_processor.py` are function-level now; the vendored facelib
   helper (which imports `comfy` itself) is imported lazily through a module
   `__getattr__` (PEP 562), so `loader.FaceRestoreHelper` still resolves to
   the vendored class. Structure **guard (f)** (`tests/test_structure.py`)
   forbids a module-level `comfy`/`comfy_api` import in `src/**` (with the
   self-test the guards file demands), and the new
   `tests/test_lazy_imports.py` proves at runtime that the engines import
   while every `comfy` import is blocked.

Gate after the commit:
  python.exe -m pytest -q tests -m "unit or mock_integration"
    -> 153 passed, 1 skipped, 5 deselected, 3 xfailed
  COMFYUI_ROOT=C:/_Dev/ComfyUI_dev/ComfyUI-source/ComfyUI python.exe
    -m pytest -q tests -m "unit or mock_integration or headless"
    -> 158 passed, 1 skipped, 3 xfailed

Details: docs/2026-10-23-p3-review-findings.md
2026-10-23 20:34:51 +03:00
2025-07-03 12:55:38 +03:00
2026-10-23 20:34:51 +03:00
2026-10-23 20:34:51 +03:00
2026-10-23 16:34:37 +03:00
2025-05-21 23:40:55 +03:00
2025-07-03 12:55:38 +03:00

ComfyUI-KEEP

Kalman-Inspired Feature Propagation for Video Face Super-Resolution in ComfyUI

ComfyUI-KEEP Workflow Example

Update

  • 2025-07-03:
    • Standard ComfyUI Upscale Model inputs instead of a hardcoded Real-ESRGAN
    • Added final_upscale_factor for precise output scaling.
  • 2025-05-20: Initial commit

About ComfyUI-KEEP

This repository provides custom nodes for ComfyUI that implement the KEEP algorithm for face super-resolution. KEEP is designed for robust video face super-resolution, and these nodes adapt its capabilities for use within the ComfyUI framework.

You can enhance faces in:

  • Single images
  • Sequences of images (video frames)

The nodes leverage the core architecture and pre-trained models from the original KEEP project.

Features

  • High-Quality Face Restoration: Utilizes the core KEEP model for detailed face enhancement.
  • Flexible Upscaling Integration:
    • Connect any ComfyUI-compatible upscale model (from Upscale Model Loader) for both background and face upscaling.
    • Use different models for background and face enhancement within the same workflow.
    • Full control over the final output size with a final_upscale_factor.
  • Single Image & Sequence Processing: Enhance faces in individual images or entire video frame sequences.
  • Choice of Detection Models: Supports various face detection backbones (RetinaFace, YOLOv5).

Nodes

This package includes the following custom nodes:

1. Load KEEP Models

Loads the core KEEP model and face detection models. It now accepts UPSCALE_MODEL inputs, allowing you to connect any upscaler loaded via a standard Upscale Model Loader.

  • model: Choose between "KEEP" (general) or "Asian".
  • detection_model: Face detection model to use (e.g., retinaface_resnet50).
  • bg_upscale_model (optional): Connect an UPSCALE_MODEL here to enhance the background.
  • face_upscale_model (optional): Connect an UPSCALE_MODEL here to further enhance the quality of the restored face patch.

2. KEEP Single Image

Restores and enhances faces in a single input image.

  • image: The input image.
  • keep_model: The model pack from the Load KEEP Models node.
  • final_upscale_factor: The final scaling factor for the output image. For example, if your BG upscale model is 4x but you only want a 2x final output, set this to 2.0. If you want the original size, set this to 1.0.
  • has_aligned_face: Set to True if the input is an already aligned 512x512 face.
  • only_center_face: If multiple faces are detected, process only the one closest to the center.
  • draw_bounding_box: Draws a box around the detected face.

3. KEEP Image Sequence

Restores and enhances faces in a sequence of input images (e.g., frames from a video).

  • images: A batch of images representing video frames.
  • keep_model: The model pack from the Load KEEP Models node.
  • final_upscale_factor: The final scaling factor for the output frames.
  • max_clip_length: Maximum number of frames to process in one go by the KEEP network (for VRAM management).

Installation

  1. Clone this repository:

    git clone https://github.com/wildminder/ComfyUI-KEEP.git
    

    Place it into your ComfyUI/custom_nodes/ directory.

  2. Install Dependencies: The core KEEP model has several dependencies

    cd ComfyUI/custom_nodes/ComfyUI-KEEP
    pip install -r requirements.txt
    
  3. Download Pre-trained Models: The nodes will attempt to download the required models automatically during the first run. Models will be saved into standard ComfyUI model directories:

    • KEEP models (KEEP-b76feb75.pth): ComfyUI/models/keep_models/KEEP/
    • Face detection/parsing models (e.g., detection_Resnet50_Final.pth): ComfyUI/models/facedetection/
    • Upscale Models: Place any upscaler models (like Real-ESRGAN, SwinIR, etc.) in ComfyUI/models/upscale_models/.

    If automatic download fails for the KEEP or face models, you can manually download them from the original KEEP Releases V1.0.0 and place them in the corresponding ComfyUI subdirectories mentioned above.

  4. Restart ComfyUI.

Citation for Original KEEP

If you use the core KEEP algorithm or models in your research, please cite the original paper:

@InProceedings{feng2024keep,
      title     = {Kalman-Inspired FEaturE Propagation for Video Face Super-Resolution},
      author    = {Feng, Ruicheng and Li, Chongyi and Loy, Chen Change},
      booktitle = {European Conference on Computer Vision (ECCV)},
      year      = {2024}
}
S
Description
No description provided
Readme Apache-2.0
45 MiB
Languages
Python 95.4%
Cuda 2.8%
C++ 1.8%