mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2025-06-08 04:22:11 +08:00

* Add basic support for videos as types This PR adds support for VIDEO as first-class types. In order to avoid unnecessary costs, VIDEO outputs must implement the `VideoInput` ABC, but their implementation details can vary. Included are two implementations of this type which can be returned by other nodes: * `VideoFromFile` - Created with either a path on disk (as a string) or a `io.BytesIO` containing the contents of a file in a supported format (like .mp4). This implementation won't actually load the video unless necessary. It will also avoid re-encoding when saving if possible. * `VideoFromComponents` - Created from an image tensor and an optional audio tensor. Currently, only h264 encoded videos in .mp4 containers are supported for saving, but the plan is to add additional encodings/containers in the near future (particularly .webm). * Add optimization to avoid parsing entire video * Improve type declarations to reduce warnings * Make sure bytesIO objects can be read many times * Fix a potential issue when saving long videos * Fix incorrect type annotation * Add a `LoadVideo` node to make testing easier * Refactor new types out of the base comfy folder I've created a new `comfy_api` top-level module. The intention is that anything within this folder would be covered by semver-style versioning that would allow custom nodes to rely on them not introducing breaking changes. * Fix linting issue
Comfy Typing
Type hinting for ComfyUI Node development
This module provides type hinting and concrete convenience types for node developers. If cloned to the custom_nodes directory of ComfyUI, types can be imported using:
from comfy.comfy_types import IO, ComfyNodeABC, CheckLazyMixin
class ExampleNode(ComfyNodeABC):
@classmethod
def INPUT_TYPES(s) -> InputTypeDict:
return {"required": {}}
Full example is in examples/example_nodes.py.
Types
A few primary types are documented below. More complete information is available via the docstrings on each type.
IO
A string enum of built-in and a few custom data types. Includes the following special types and their requisite plumbing:
ANY
:"*"
NUMBER
:"FLOAT,INT"
PRIMITIVE
:"STRING,FLOAT,INT,BOOLEAN"
ComfyNodeABC
An abstract base class for nodes, offering type-hinting / autocomplete, and somewhat-alright docstrings.