Agent skill

ComfyUI Node Datatypes

by jtydhr88 in jtydhr88/comfyui-custom-node-skills

Lists ComfyUI node data types, from IMAGE, MASK and LATENT tensors to model types, with their V3 classes and formats.

MITAuto-check passedAI & LLM Engineering

Install ComfyUI Node Datatypes

skills CLI
$ npx skills add jtydhr88/comfyui-custom-node-skills --skill comfyui-node-datatypes -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install jtydhr88/comfyui-custom-node-skills comfyui-node-datatypes --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/jtydhr88/comfyui-custom-node-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/comfyui-custom-nodes/skills/comfyui-node-datatypes .claude/skills/comfyui-node-datatypes && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
comfyui-node-datatypes
GitHub stars
294
Token cost
~4.3k tokens
SKILL.md length
887 words
Files
1
Skills in repo
9
Repo updated
First seen
Licence
MIT

At a glance

Lists ComfyUI node data types, from IMAGE, MASK and LATENT tensors to model types, with their V3 classes and formats.

  • Choosing the right ComfyUI type for a custom node's input or output
  • SKILL.md covers Complete Type Reference, IMAGE Type, MASK Type and LATENT Type, plus 7 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md
  • Checking the tensor shape and value range of IMAGE, MASK or LATENT

What it does

Writing a ComfyUI custom node means choosing the right input and output types, and this reference lays them out. Its tables give each type's V3 class, such as `io.Image` and `io.Latent`, and the format behind it: IMAGE is a float32 `torch.Tensor` in batch, height, width, channel order with values from 0 to 1, MASK is a grayscale tensor, and LATENT is a dictionary holding a `samples` tensor.

Further tables cover audio, video, noise schedules, LoRA weights, motion tracking data and generic dict and list types, then model types such as MODEL, CLIP, VAE, CONTROL_NET and SAMPLER, which are opaque and usually passed straight through. The description adds widget types and custom types. It works as a lookup table to keep open while defining a node's inputs and outputs, not as a tutorial on building one.

When your agent uses it

  • Choosing the right ComfyUI type for a custom node's input or output
  • Checking the tensor shape and value range of IMAGE, MASK or LATENT
  • Defining a custom type or widget type in a ComfyUI node

Example prompts

  • “What shape and value range does a ComfyUI IMAGE tensor have?”
  • “Which io class should my node use to return a LATENT with a noise mask?”
  • “Declare the inputs for a node that takes MODEL, CLIP and a MASK.”

What it can do on your machine

Read from SKILL.md and the folder at commit 63a78dc. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are python).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

ComfyUI Node Datatypes loads about 4.3k tokens when it runs. Until then it costs about 60 tokens; SKILL.md has 887 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~60
When it runs · the whole SKILL.md, loaded when a task matches
~4.3k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from jtydhr88/comfyui-custom-node-skills at commit 63a78dc, republished under its MIT licence (© jtydhr88). 887 words, ~4,347 tokens.

Download SKILL.mdSave it as .claude/skills/comfyui-node-datatypes/SKILL.md (or your agent's skills folder).
name
comfyui-node-datatypes
description
ComfyUI data types - IMAGE, LATENT, MASK, CONDITIONING, MODEL, CLIP, VAE, AUDIO, VIDEO, 3D types, widget types, and custom types. Use when working with ComfyUI tensors, model types, or defining input/output data types.

ComfyUI Data Types

ComfyUI uses specific data types for node inputs and outputs. Understanding tensor shapes and data formats is essential.

Complete Type Reference

Tensor/Data Types
TypeV3 ClassFormatDescription
IMAGEio.Imagetorch.Tensor [B,H,W,C] float32 0-1Batch of RGB images
MASKio.Masktorch.Tensor [H,W] or [B,H,W] float32 0-1Grayscale masks
LATENTio.Latent{"samples": Tensor[B,C,H,W] or [B,C,T,H,W], "noise_mask"?: Tensor, "batch_index"?: list[int], "type"?: str}Latent space (4D image / 5D video)
CONDITIONINGio.Conditioninglist[tuple[Tensor, PooledDict]]Text conditioning with pooled outputs
AUDIOio.Audio{"waveform": Tensor[B,C,T], "sample_rate": int}Audio data
VIDEOio.VideoVideoInput ABCVideo data (abstract base class)
SIGMASio.Sigmastorch.Tensor 1D, length steps+1Noise schedule
NOISEio.NoiseObject with generate_noise()Noise generator
LORA_MODELio.LoraModeldict[str, torch.Tensor]LoRA weight deltas
LOSS_MAPio.LossMap{"loss": list[torch.Tensor]}Loss map
TRACKSio.Tracks{"track_path": Tensor, "track_visibility": Tensor}Motion tracking data
WAN_CAMERA_EMBEDDINGio.WanCameraEmbeddingtorch.TensorWAN camera embeddings
LATENT_OPERATIONio.LatentOperationCallable[[Tensor], Tensor]Latent transform function
TIMESTEPS_RANGEio.TimestepsRangetuple[int, int]Range 0.0-1.0
DICTio.DictdictGeneric dictionary
ARRAYio.ArraylistGeneric list/array
Model Types (opaque, typically pass-through)
TypeV3 ClassPython Type
MODELio.ModelModelPatcher
CLIPio.ClipCLIP
VAEio.VaeVAE
CONTROL_NETio.ControlNetControlNet
CLIP_VISIONio.ClipVisionClipVisionModel
CLIP_VISION_OUTPUTio.ClipVisionOutputClipVisionOutput
STYLE_MODELio.StyleModelStyleModel
GLIGENio.GligenModelPatcher (wrapping Gligen)
UPSCALE_MODELio.UpscaleModelImageModelDescriptor
BACKGROUND_REMOVALio.BackgroundRemovalBackgroundRemovalModel (e.g. BiRefNet)
LATENT_UPSCALE_MODELio.LatentUpscaleModelAny
SAMPLERio.SamplerSampler
GUIDERio.GuiderCFGGuider
HOOKSio.HooksHookGroup
HOOK_KEYFRAMESio.HookKeyframesHookKeyframeGroup
MODEL_PATCHio.ModelPatchAny
AUDIO_ENCODERio.AudioEncoderAny
AUDIO_ENCODER_OUTPUTio.AudioEncoderOutputAny
PHOTOMAKERio.PhotomakerAny
POINTio.PointAny
FACE_ANALYSISio.FaceAnalysisAny
BBOXio.BBOXAny
SEGSio.SEGSAny
3D Types
TypeV3 ClassPython TypeDescription
MESHio.MeshMESH(vertices, faces)3D mesh with vertices + faces tensors
VOXELio.VoxelVOXEL(data)Voxel data tensor
SPLATio.SplatSPLATGaussian splat data
FILE_3Dio.File3DAnyFile3DAny supported 3D format
FILE_3D_GLBio.File3DGLBFile3DBinary glTF
FILE_3D_GLTFio.File3DGLTFFile3DJSON-based glTF
FILE_3D_FBXio.File3DFBXFile3DFBX format
FILE_3D_OBJio.File3DOBJFile3DOBJ format
FILE_3D_STLio.File3DSTLFile3DSTL format (3D printing)
FILE_3D_USDZio.File3DUSDZFile3DApple AR format
FILE_3D_PLYio.File3DPLYFile3DPLY (point cloud / splat)
FILE_3D_SPLATio.File3DSPLATFile3D.splat gaussian splat file
FILE_3D_SPZio.File3DSPZFile3DCompressed splat (.spz)
FILE_3D_KSPLATio.File3DKSPLATFile3D.ksplat format
FILE_3D_SPLAT_ANYio.File3DSplatAnyFile3DAny splat format
FILE_3D_POINT_CLOUD_ANYio.File3DPointCloudAnyFile3DAny point cloud format
SVGio.SVGSVGScalable vector graphics
LOAD_3Dio.Load3DModel3DDict (see below)3D model with renders
LOAD_3D_ANIMATIONio.Load3DAnimationSame as Load3DAnimated 3D model
LOAD3D_CAMERAio.Load3DCameraCameraInfo (see below)3D camera info
LOAD3D_MODEL_INFOio.Load3DModelInfolist[Model3DTransform]Per-model transforms (position/quaternion/scale)

Load3D.Model3DDict: {"image": str, "mask": str, "normal": str, "camera_info": CameraInfo, "recording"?: str, "model_3d_info"?: list[Model3DTransform]}

Load3DCamera.CameraInfo (right-handed, Y-up, camera looks down -Z): required keys position, target, zoom, cameraType ('perspective' | 'orthographic'); optional keys quaternion (camera world rotation), fov (vertical, degrees, perspective only), aspect, near, far, frustum (orthographic only: {left, right, top, bottom}).

Load3DModelInfo.Model3DTransform: {"position": dict, "quaternion": dict, "scale": dict} in world space.

Widget Types (create UI controls)
TypeV3 ClassPython TypeDescription
INTio.IntintInteger with min/max/step
FLOATio.FloatfloatFloat with min/max/step/round
STRINGio.StringstrText (single/multi-line)
BOOLEANio.BooleanboolToggle with labels
COMBOio.CombostrDropdown selection
COMBO (multi)io.MultiCombolist[str]Multi-select dropdown
COLORio.Colorstr (hex)Color picker, default #ffffff
COLORSio.Colorslist[str] (hex)Color palette (list of colors)
BOUNDING_BOXio.BoundingBox{"x": int, "y": int, "width": int, "height": int}Rectangle region
BOUNDING_BOXESio.BoundingBoxeslist[{"x", "y", "width", "height", "metadata": dict}]Multiple labeled regions
CURVEio.Curvelist[tuple[float, float]]Spline curve points
RANGEio.RangeRangeInput (min/max + optional midpoint)Levels/range editor with gradient display
IMAGECOMPAREio.ImageComparedictImage comparison widget
WEBCAMio.WebcamstrWebcam capture widget
HISTOGRAMio.Histogramlist[int]Histogram bin counts
Show full SKILL.md (318 more words)Show less
Special Types
TypeV3 ClassDescription
* (ANY)io.AnyTypeMatches any type
COMFY_MULTITYPED_V3io.MultiTypeAccept multiple specific types on one input
COMFY_MATCHTYPE_V3io.MatchTypeGeneric type matching across inputs/outputs
COMFY_AUTOGROW_V3io.AutogrowDynamic growing inputs
COMFY_DYNAMICCOMBO_V3io.DynamicComboCombo that reveals sub-inputs per option
COMFY_DYNAMICSLOT_V3io.DynamicSlotConnection slot that reveals sub-inputs when connected (not yet used by core nodes)
FLOW_CONTROLio.FlowControlInternal testing only
ACCUMULATIONio.AccumulationInternal testing only

IMAGE Type

Images are torch.Tensor with shape [B, H, W, C]:

  • B = batch size (1 for single image)
  • H = height in pixels
  • W = width in pixels
  • C = channels (3 for RGB, values 0.0-1.0)
python
import torch
import numpy as np
from PIL import Image as PILImage

class ImageProcessor(io.ComfyNode):
    @classmethod
    def define_schema(cls):
        return io.Schema(
            node_id="ImageProcessor",
            display_name="Image Processor",
            category="image",
            inputs=[io.Image.Input("image")],
            outputs=[io.Image.Output("IMAGE")],
        )

    @classmethod
    def execute(cls, image):
        b, h, w, c = image.shape
        result = torch.clamp(image * 1.5, 0.0, 1.0)
        return io.NodeOutput(result)
Loading / Saving Images
python
from PIL import ImageOps

# Load from file → tensor
def load_image(path):
    img = PILImage.open(path)
    img = ImageOps.exif_transpose(img)   # fix rotation from camera EXIF
    if img.mode == "I":                  # handle 16-bit images
        img = img.point(lambda i: i * (1 / 255))
    img = img.convert("RGB")
    return torch.from_numpy(np.array(img).astype(np.float32) / 255.0).unsqueeze(0)

# Tensor → save to file
def save_image(tensor, path):
    if tensor.dim() == 4:
        tensor = tensor[0]
    PILImage.fromarray(np.clip(255.0 * tensor.cpu().numpy(), 0, 255).astype(np.uint8)).save(path)

# Batch operations
batch = torch.cat([img1, img2], dim=0)    # stack into batch
single = image[i]                          # extract from batch [H,W,C]
single_batch = image.unsqueeze(0)          # add batch dim [1,H,W,C]

MASK Type

torch.Tensor with shape [H, W] or [B, H, W], values 0.0-1.0.

python
# Invert mask
inverted = 1.0 - mask

# Mask ↔ Image conversion
alpha = mask.unsqueeze(0).unsqueeze(-1)                   # [1,H,W,1]
gray_mask = 0.299*img[:,:,:,0] + 0.587*img[:,:,:,1] + 0.114*img[:,:,:,2]
image_from_mask = mask.unsqueeze(-1).repeat(1, 1, 1, 3)  # [B,H,W,3]

# Ensure batch dim
if mask.dim() == 2:
    mask = mask.unsqueeze(0)  # [1, H, W]

LATENT Type

Dict with typed keys:

python
class LatentDict(TypedDict):
    samples: torch.Tensor       # [B, C, H, W] (image) or [B, C, T, H, W] (video) - required
    noise_mask: NotRequired[torch.Tensor]
    batch_index: NotRequired[list[int]]
    type: NotRequired[str]      # only for "audio", "hunyuan3dv2"

Image models (SD1.5, SDXL, SD3, Flux): 4D [B, C, H, W] — SD1.5/SDXL = 4 channels, SD3/Flux = 16 channels. Latent dimensions are 1/8 of pixel dims.

Video models (Hunyuan Video, Wan, Cosmos, LTX Video, Mochi): 5D [B, C, T, H, W] — T is the temporal (frame) dimension.

python
samples = latent["samples"]
# Check dimensionality:
if samples.ndim == 5:
    B, C, T, H, W = samples.shape   # video latent
else:
    B, C, H, W = samples.shape      # image latent

# Always preserve extra keys when modifying:
result = latent.copy()
result["samples"] = modified_samples

CONDITIONING Type

list[tuple[Tensor, PooledDict]] — a list of (cond_tensor, metadata_dict) pairs.

The PooledDict contains many optional keys for different models:

python
class PooledDict(TypedDict):
    pooled_output: torch.Tensor
    control: NotRequired[ControlNet]
    area: NotRequired[tuple[int, ...]]
    strength: NotRequired[float]           # default 1.0
    mask: NotRequired[torch.Tensor]
    start_percent: NotRequired[float]      # 0.0-1.0
    end_percent: NotRequired[float]        # 0.0-1.0
    guidance: NotRequired[float]           # Flux-like models
    hooks: NotRequired[HookGroup]
    # ... many more model-specific keys (SDXL, SVD, WAN, etc.)

Combine conditioning: result = cond_a + cond_b (list concatenation).

VIDEO Type

VideoInput is an abstract base class with methods:

python
class VideoInput(ABC):
    def get_components(self) -> VideoComponents    # images tensor + audio + frame_rate
    def save_to(self, path, format, codec, metadata, bit_depth=None)  # bit_depth: None keeps native depth (8 or 10)
    def as_trimmed(self, start_time=None, duration=None, strict_duration=False) -> VideoInput | None
    def get_stream_source(self) -> str | BytesIO
    def get_dimensions(self) -> tuple[int, int]     # (width, height)
    def get_duration(self) -> float                  # seconds
    def get_frame_count(self) -> int
    def get_frame_rate(self) -> Fraction
    def get_container_format(self) -> str
    def get_bit_depth(self) -> int                   # 8 or 10 (default implementation returns 8)

10-bit video is supported end-to-end: loaders report get_bit_depth(), and save nodes preserve depth (yuv420p10le for 10-bit h264).

Concrete implementations: VideoFromFile, VideoFromComponents (available via from comfy_api.latest import InputImpl).

3D Types

File3D
python
from comfy_api.latest import Types

# File3D wraps a 3D file (disk path or BytesIO stream)
file_3d = Types.File3D(source="/path/to/model.glb", file_format="glb")
file_3d.format              # "glb"
file_3d.is_disk_backed      # True
file_3d.get_data()          # BytesIO
file_3d.get_bytes()         # raw bytes
file_3d.save_to("/output/model.glb")
MESH, VOXEL and SPLAT
python
from comfy_api.latest import Types

mesh = Types.MESH(vertices=torch.tensor(...), faces=torch.tensor(...))
voxel = Types.VOXEL(data=torch.tensor(...))
splat = Types.SPLAT(...)   # gaussian splat data

Widget Types with Special Features

Color
python
io.Color.Input("color", default="#ff0000", socketless=True)
# Value is a hex string like "#ff0000"
Colors (palette)
python
io.Colors.Input("palette", default=["#ff0000", "#00ff00"], socketless=True)
# Value is list[str] of hex colors
BoundingBox
python
io.BoundingBox.Input("bbox",
    default={"x": 0, "y": 0, "width": 512, "height": 512},
    socketless=True,
    component="my_component",  # optional custom UI component
)
# Value is {"x": int, "y": int, "width": int, "height": int}
BoundingBoxes (multiple regions)
python
io.BoundingBoxes.Input("regions", default=[], socketless=True)
# Value is list of {"x": int, "y": int, "width": int, "height": int, "metadata": dict}
Curve
python
from comfy_api.input import CurveInput

io.Curve.Input("curve",
    default=[(0.0, 0.0), (1.0, 1.0)],  # linear
    socketless=True,
)
# In execute(), normalize the raw value first:
curve = CurveInput.from_raw(curve)
Range (levels editor)
python
from comfy_api.input import RangeInput

io.Range.Input("levels",
    default={"min": 0.0, "max": 1.0},
    display=None,                # widget visualization mode
    gradient_stops=None,         # gradient background for the slider
    show_midpoint=True,          # show gamma midpoint handle
    midpoint_scale=None,
    value_min=0.0, value_max=1.0,  # UI bounds
)
# In execute(), normalize with RangeInput.from_raw(value):
# .min_val, .max_val, .midpoint (gamma = -log2(midpoint), 0.5 = linear)
# .to_lut(size) generates a GIMP-style levels lookup table
MultiCombo
python
io.MultiCombo.Input("tags",
    options=["tag1", "tag2", "tag3"],
    default=["tag1"],
    placeholder="Select tags...",
    chip=True,  # show as chips
)
# Value is list[str]
Webcam
python
io.Webcam.Input("webcam_capture")
# Value is str (captured image data)
ImageCompare
python
io.ImageCompare.Input("comparison", socketless=True)
# Value is dict

Custom Types

python
# Simple: create inline custom type
MyData = io.Custom("MY_DATA_TYPE")

# Use in inputs/outputs
io.Schema(
    inputs=[MyData.Input("data")],
    outputs=[MyData.Output("MY_DATA")],
)
Advanced: @comfytype decorator

For custom types with type hints or custom Input/Output classes:

python
from comfy_api.latest._io import comfytype, ComfyTypeIO

@comfytype(io_type="MY_DATA_TYPE")
class MyData(ComfyTypeIO):
    Type = dict[str, Any]  # type hint for the data

AnyType / Wildcard

python
# Accept any single type (always a connection input, no widget)
io.AnyType.Input("anything")

# Accept specific multiple types
io.MultiType.Input("data", types=[io.Image, io.Mask, io.Latent])

# MultiType with widget override (shows widget for first type)
io.MultiType.Input(
    io.Float.Input("value", default=1.0),
    types=[io.Float, io.Int],
)

Imports from comfy_api.latest

python
from comfy_api.latest import (
    ComfyExtension,  # extension registration
    ComfyAPI,        # runtime API (progress, node replacement)
    io,              # all io types (io.Image, io.Schema, io.ComfyNode, etc.)
    ui,              # UI output helpers (ui.PreviewImage, ui.SavedImages, etc.)
    Input,           # Input.Image (ImageInput), Input.Audio, Input.Mask, Input.Latent, Input.Video
    InputImpl,       # InputImpl.VideoFromFile, InputImpl.VideoFromComponents
    Types,           # Types.MESH, Types.VOXEL, Types.File3D, Types.VideoCodec, etc.
)

Tensor Safety

When checking if a tensor exists, always use is not None instead of truthiness:

python
# CORRECT
if image is not None:
    process(image)

# WRONG — multi-element tensors don't support bool()
if image:       # raises RuntimeError
    process(image)

# For boolean conditions on tensors, use .all() or .any()
if (mask > 0.5).all():
    ...

Type Conversion Patterns

python
# IMAGE [B,H,W,C] → MASK [B,H,W]
mask = 0.299 * image[:,:,:,0] + 0.587 * image[:,:,:,1] + 0.114 * image[:,:,:,2]

# MASK [B,H,W] → IMAGE [B,H,W,C]
image = mask.unsqueeze(-1).repeat(1, 1, 1, 3)

# Resize image tensor
import torch.nn.functional as F
resized = F.interpolate(
    image.permute(0, 3, 1, 2),  # [B,C,H,W] for interpolate
    size=(new_h, new_w), mode='bilinear', align_corners=False
).permute(0, 2, 3, 1)  # back to [B,H,W,C]

See Also

  • comfyui-node-basics - Node class structure and registration
  • comfyui-node-inputs - Input configuration details (widget options)
  • comfyui-node-outputs - Output types and UI outputs
  • comfyui-node-advanced - MatchType, MultiType, Autogrow, DynamicCombo

© jtydhr88, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in plugins/comfyui-custom-nodes/skills/comfyui-node-datatypes of jtydhr88/comfyui-custom-node-skills.

Open the folder on GitHubat commit 63a78dc

Compare with similar skills

ComfyUI Node Datatypes next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

ComfyUI Node Datatypes compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
ComfyUI Node Datatypes this skilljtydhr88/comfyui-custom-node-skills294—~4.3kAutomated safety check: PassMIT
ComfyUI Custom Node BuilderConstantineB6/comfy-pilot230—~897Automated safety check: PassMIT
Setupguaardvark/guaardvark2511 repos~1.2kAutomated safety check: PassMIT
AI Toolkit Trainerartokun/comfyui-mcp793—~2.7kAutomated safety check: PassMIT
Add Comfyui NodeMooshieblob1/MooshieUI207—~936Automated safety check: PassAGPL-3.0
Edit Comfy Workflowpeteromallet/VibeComfy150—~2.2kAutomated safety check: PassMIT

Similar skills

  • ComfyUI Custom Node Builder

    ConstantineB6/comfy-pilot

    Helps an agent write ComfyUI custom nodes in Python, including wrapping an existing script, mapping data types and handling image batches.

    230 GitHub stars~897 tokensUpdated 7 mo ago
    AI & LLM EngineeringAuto-check passed
  • Setup

    guaardvark/guaardvark

    Connect this agent to a running Guaardvark (self-hosted AI studio) and check what it can do right now.

    251 GitHub starsUsed in 1 repo~1.2k tokens
    AI & LLM EngineeringAuto-check passed
  • AI Toolkit Trainer

    artokun/comfyui-mcp

    Train custom LoRAs with ostris AI-Toolkit. An agent skill from artokun/comfyui-mcp.

    793 GitHub stars~2.7k tokensUpdated 2 days ago
    AI & LLM EngineeringAuto-check passed
  • Add Comfyui Node

    Mooshieblob1/MooshieUI

    Adds a custom ComfyUI Python node to MooshieUI — Python class in mooshienodes.py, Rust required-class registration, and optional workflow template chain hookup.

    207 GitHub stars~936 tokensUpdated yesterday
    AI & LLM EngineeringAuto-check passed
  • Edit Comfy Workflow

    peteromallet/VibeComfy

    Edit an existing VibeComfy or ComfyUI workflow, ready template, recipe, scratchpad, or target graph.

    150 GitHub stars~2.2k tokensUpdated 6 days ago
    AI & LLM EngineeringAuto-check passed
  • Comfyui Launch Flags

    artokun/comfyui-mcp

    Pick the right ComfyUI startup flags for VRAM, attention, caching, and speed.

    793 GitHub stars~3.1k tokensUpdated 2 days ago
    AI & LLM EngineeringAuto-check passed

More from jtydhr88/comfyui-custom-node-skills

All 9 skills in this repo
  • ComfyUI Advanced Node Patterns

    jtydhr88/comfyui-custom-node-skills

    Reference for ComfyUI V3 node patterns such as MatchType, MultiType, Autogrow and DynamicCombo, used to build nodes with dynamic inputs and type matching.

    294 GitHub stars~3.3k tokensUpdated 2 mo ago
    Auto-check passed
  • ComfyUI Custom Node Basics

    jtydhr88/comfyui-custom-node-skills

    Explains the V3 API for ComfyUI custom nodes: node classes, schema, inputs and outputs, registration and how it differs from the legacy V1 style.

    294 GitHub stars~1.6k tokensUpdated 2 mo ago
    Auto-check passed
  • ComfyUI Frontend Extensions

    jtydhr88/comfyui-custom-node-skills

    Guide to writing JavaScript extensions for the ComfyUI frontend from custom nodes, covering lifecycle hooks, widgets, sidebar tabs, commands, settings, toasts and dialogs.

    294 GitHub stars~3.7k tokensUpdated 2 mo ago
    Auto-check passed
  • Comfyui Node Inputs

    jtydhr88/comfyui-custom-node-skills

    ComfyUI node input types - INT, FLOAT, STRING, BOOLEAN, COMBO widgets, hidden inputs, optional inputs, lazy inputs, forceinput.

    294 GitHub stars~3k tokensUpdated 2 mo ago
    Auto-check passed
  • Comfyui Node Lifecycle

    jtydhr88/comfyui-custom-node-skills

    ComfyUI node execution lifecycle - caching, fingerprintinputs/ISCHANGED, validateinputs/VALIDATEINPUTS, checklazystatus, execution order.

    294 GitHub stars~2.9k tokensUpdated 2 mo ago
    Auto-check passed
  • Comfyui Node Migration

    jtydhr88/comfyui-custom-node-skills

    ComfyUI V1 to V3 node migration - converting legacy nodes to the V3 API.

    294 GitHub stars~3.2k tokensUpdated 2 mo ago
    Auto-check passed

Works with

Questions about ComfyUI Node Datatypes

What does ComfyUI Node Datatypes do?

Lists ComfyUI node data types, from IMAGE, MASK and LATENT tensors to model types, with their V3 classes and formats. Writing a ComfyUI custom node means choosing the right input and output types, and this reference lays them out.Tensor` in batch, height, width, channel order with values from 0 to 1, MASK is a grayscale tensor, and LATENT is a dictionary holding a `samples` tensor.

When should I use ComfyUI Node Datatypes?

ComfyUI Node Datatypes fits situations like: choosing the right ComfyUI type for a custom node's input or output; checking the tensor shape and value range of IMAGE, MASK or LATENT; defining a custom type or widget type in a ComfyUI node.

How do I install ComfyUI Node Datatypes in Claude Code?

Run `npx skills add jtydhr88/comfyui-custom-node-skills --skill comfyui-node-datatypes -a claude-code`. Or copy the skill folder (plugins/comfyui-custom-nodes/skills/comfyui-node-datatypes in jtydhr88/comfyui-custom-node-skills) into .claude/skills/comfyui-node-datatypes in your project. Claude Code loads it when a task matches its description.

How do I install ComfyUI Node Datatypes in Codex?

Run `npx skills add jtydhr88/comfyui-custom-node-skills --skill comfyui-node-datatypes -a codex`. Or copy the skill folder (plugins/comfyui-custom-nodes/skills/comfyui-node-datatypes in jtydhr88/comfyui-custom-node-skills) into .agents/skills/comfyui-node-datatypes in your project. Codex loads it when a task matches its description.

Can I use ComfyUI Node Datatypes in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jtydhr88/comfyui-custom-node-skills --skill comfyui-node-datatypes -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/comfyui-node-datatypes, .gemini/skills/comfyui-node-datatypes, .github/skills/comfyui-node-datatypes and .opencode/skills/comfyui-node-datatypes in your project.

What does ComfyUI Node Datatypes need to run?

SKILL.md names no scripts, command-line tools or credentials: ComfyUI Node Datatypes is instructions for the agent only.

Does ComfyUI Node Datatypes access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is ComfyUI Node Datatypes safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does ComfyUI Node Datatypes use?

ComfyUI Node Datatypes is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does ComfyUI Node Datatypes use?

About 4.3k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to ComfyUI Node Datatypes?

Skills that share tags, products or a category with ComfyUI Node Datatypes: ComfyUI Custom Node Builder (ConstantineB6/comfy-pilot, 230 stars), Setup (guaardvark/guaardvark, 251 stars), AI Toolkit Trainer (artokun/comfyui-mcp, 793 stars) and Add Comfyui Node (Mooshieblob1/MooshieUI, 207 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains ComfyUI Node Datatypes?

jtydhr88 (a GitHub user) maintains it in jtydhr88/comfyui-custom-node-skills, which has 294 GitHub stars. The repository holds 9 skills in this directory. The repository was last updated on July 27, 2026.

Source: jtydhr88/comfyui-custom-node-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.