nilor-nodes

nilor-nodes
★ 6

列表操作批量处理文件名处理高级I/O
为ComfyUI提供一组实用节点,专注列表操作、文件名与图像批处理及高级I/O,便于构建定制化工作流
💡 用于图像批次、文件名和自定义列表的复杂处理工作流
🍴 2 Forks💻 Python🔄 2026-03-16
📦
网盘下载
复制链接后前往夸克网盘下载
https://pan.quark.cn/s/af9fbf81e746
📦 requirements.txt
aiobotocore==2.24.2
aiofiles>=23.2.1
aiohttp==3.12.14
boto3==1.40.15
fastapi==0.110.0
huggingface_hub==0.34.0
imageio==2.37.0
imageio-ffmpeg==0.6.0
numpy>=1.26.4
opencv-python>=4.6.0.66
openexr==3.3.4
Pillow==10.4.0
python-dotenv==1.0.1
python-multipart==0.0.9
requests==2.31.0
uvicorn==0.27.1
websockets==11.0.3
--prefer-binary
📄 README

Nilor Nodes Documentation 👺

A collection of utility nodes for ComfyUI focusing on list manipulation, batch operations, and advanced I/O functionality.

Prerequisites

  • comfyui-kjnodes custom_nodes repo
  • 🏭 Generators

    Interpolated Float List

    Generates a list of interpolated float values based on sections.

    | Input | Type | Description |

    |——-|——|————-|

    | number_of_floats | INT | Total number of float values to generate |

    | number_of_sections | INT | Number of sections to divide into |

    | section_number | INT | Current section being processed |

    | interpolation_type | [“slinear”, “quadratic”, “cubic”] | Type of interpolation |

    | Output | Type | Description |

    |——–|——|————-|

    | floats | FLOAT | List of interpolated float values |

    Notes: Creates smooth transitions between values using scipy’s interpolation.

    One Minus Float List

    Creates an inverted list of float values (1 – x).

    | Input | Type | Description |

    |——-|——|————-|

    | list_of_floats | FLOAT | Input float list |

    | Output | Type | Description |

    |——–|——|————-|

    | floats | FLOAT | Inverted float values |

    Notes: Simple inversion operation, useful for creating complementary values.

    Remap Float List

    Remaps a list of float values from one range to another.

    | Input | Type | Description |

    |——-|——|————-|

    | list_of_floats | FLOAT | Input float list |

    | min_input | FLOAT | Minimum input value (default: 0.0) |

    | max_input | FLOAT | Maximum input value (default: 1.0) |

    | min_output | FLOAT | Minimum output value (default: 0.0) |

    | max_output | FLOAT | Maximum output value (default: 1.0) |

    | Output | Type | Description |

    |——–|——|————-|

    | remapped_floats | FLOAT | Remapped float values |

    Notes: Useful for scaling values between different ranges while preserving relationships.

    Inverse Map Float List

    Creates a mirror mapping of float values around their midpoint.

    | Input | Type | Description |

    |——-|——|————-|

    | list_of_floats | FLOAT | Input float list |

    | Output | Type | Description |

    |——–|——|————-|

    | floats | FLOAT | Inverse mapped values |

    Notes: Automatically determines min/max from input list.

    🛠️ Utilities

    Int To List Of Bools

    Converts an integer into a list of boolean values.

    | Input | Type | Description |

    |——-|——|————-|

    | number_of_images | INT | Number to convert |

    | Output | Type | Description |

    |——–|——|————-|

    | booleans | BOOLEAN | List of boolean values |

    Notes: Creates a list where first N values are True, rest are False.

    List of Ints

    Generates a sequential or shuffled list of integers.

    | Input | Type | Description |

    |——-|——|————-|

    | min | INT | Starting integer (default: 0) |

    | max | INT | Ending integer (default: 9) |

    | shuffle | BOOLEAN | Whether to randomize order |

    | Output | Type | Description |

    |——–|——|————-|

    | ints | INT | List of integers |

    Notes: Output is always a list, even for single values.

    Select Index From List

    Extracts a single item from a list at the specified index.

    | Input | Type | Description |

    |——-|——|————-|

    | list_of_any | any | Input list of any type |

    | index | INT | Index to select (default: 0) |

    | Output | Type | Description |

    |——–|——|————-|

    | any | any | Selected item |

    Notes: Uses custom AnyType to accept any input type. Handles tensor unpacking automatically.

    Shuffle Image Batch

    Randomly reorders images in a batch.

    | Input | Type | Description |

    |——-|——|————-|

    | images | IMAGE | Batch of images |

    | seed | INT | Random seed for shuffling |

    | Output | Type | Description |

    |——–|——|————-|

    | images | IMAGE | Shuffled image batch |

    Notes: Maintains batch dimensions while randomizing order.

    💾 I/O Operations

    Save Image To HF Dataset

    Uploads images to a HuggingFace dataset.

    | Input | Type | Description |

    |——-|——|————-|

    | image | IMAGE | Image to upload |

    | repository_id | STRING | HuggingFace dataset repository |

    | hf_auth_token | STRING | HuggingFace authentication token |

    | filename_prefix | STRING | Prefix for saved files |

    Notes: Requires HuggingFace authentication token and repository access.

    Save EXR Arbitrary

    Saves multi-channel data as an OpenEXR file.

    | Input | Type | Description |

    |——-|——|————-|

    | channels | any | List of tensor channels |

    | filename_prefix | STRING | Output filename prefix |

    Notes: Supports arbitrary number of channels. Each channel must have same dimensions.

    Save Video To HF Dataset

    Uploads video files to a HuggingFace dataset.

    | Input | Type | Description |

    |——-|——|————-|

    | filenames | VHS_FILENAMES | List of video files |

    | repository_id | STRING | HuggingFace dataset repository |

    | hf_auth_token | STRING | HuggingFace authentication token |

    | filename_prefix | STRING | Prefix for saved files |

    Notes: Handles batch upload of multiple video files.

    📡 Core Nilor Services

    Worker Consumer Service

    The worker_consumer.py script is a background service that runs on each ComfyUI worker. It is responsible for pulling jobs from the central ElasticMQ jobs_to_process queue and submitting them to its local ComfyUI instance for processing. This service is essential for the distributed architecture of the system.

    Key Responsibilities:

  • Continuously polls the jobs_to_process queue for new jobs using long polling.
  • When a job is received, it extracts the workflow data and submits it to the local ComfyUI server.
  • Normalizes OS-sensitive path formatting in the ComfyUI prompt graph (e.g. converts Flux1/ae.safetensorsFlux1\ae.safetensors) so workflows authored on Linux/Windows run on the current worker OS.
  • Deletes the job message from the queue upon successful submission to prevent reprocessing.
  • If submission fails, the message remains on the queue to be picked up by another worker.
  • Workflow normalization toggle:

  • Set NILOR_WORKFLOW_OS_NORMALIZATION_ENABLED=false (via environment or config/config.json5) to disable this behavior (default: enabled).
  • ⚙️ Configuration and Runtime Model

    The sidecar uses a small, typed configuration loader with JSON5 defaults and optional environment overrides.

  • Precedence: environment variables > config/config.json5 (controlled by allow_env_override: true).
  • No hot‑reload: configuration is loaded once at process start and passed to components.
  • Paths/keys: JSON5 at ComfyUI/custom_nodes/nilor-nodes/config/config.json5 with NILOR_* keys (e.g., NILOR_COMFYUI_API_URL, NILOR_SQS_ENDPOINT_URL). Secrets (AWS secret) must be set via .env.
  • Typed object: loader returns a NilorNodesConfig with comfy, worker, and hygiene sections.
  • Pseudocode usage:

    cfg = load_nilor_nodes_config()
    # Comfy endpoints
    http_url = cfg.comfy.api_url + "/prompt"
    ws_url = cfg.comfy.ws_url + "/ws"
    # SQS client params
    endpoint = cfg.worker.sqs_endpoint_url
    region = cfg.worker.aws_region
    access_key = cfg.worker.aws_access_key_id
    secret_key = cfg.worker.aws_secret_access_key
    client_id = cfg.worker.worker_client_id

    Current integrations:

  • worker_consumer.py: loads config at startup, reuses a single HTTP session, and uses cfg.comfy/cfg.worker exclusively.
  • media_stream.py: uses cfg.worker for SQS completion notifications.
  • Environment Variables

    The nilor-nodes require a .env file to be present in the ComfyUI directory to configure the connection to the core services (MinIO, ElasticMQ, and the Brain API). To set it up, create a file named .env in the root of your ComfyUI directory by copying the .env.example template.

    Instructions:

  • Create a new file named .env in the ComfyUI directory.
  • Copy the contents of the .env.example file into your new .env file.
  • Replace the placeholder values with your actual credentials and endpoint URLs for your local or production environment.