Tensor Info
What shape, dtype, and device is that thing, actually
- value
- shape
- dtype
- device
Every ComfyUI graph is secretly full of tensors - latents, images, masks, conditioning - and none of it tells you anything when you're staring at a wire wondering why the next node just threw a shape mismatch. JN_TensorInfo is the node you drop in to actually look. Plug anything into it and it hands back the shape, dtype, and device of the underlying tensor, no debugger required.
Why you'd reach for it
Most ComfyUI errors involving tensors are shape or device mismatches - a LATENT that's the wrong batch size, an IMAGE tensor still sitting on CPU when a node expected CUDA, a mask with an extra channel dimension you didn't notice. Normally the only way to find that out is to read a stack trace and guess, or wire in a print statement if you're comfortable editing custom node code. This node exists so you don't have to do either - wire the suspect output into it, run the graph up to that point, and read the answer directly off the node.
How it works
It's a pure inspection node - it doesn't touch or transform the value at all, just reads metadata off it. That's why the input type is the wildcard *: this node is one of several in the pack that lean on JNComfy's "easy generic inputs" patch, which finishes wiring up the * any-type that ComfyUI's underlying graph library (LiteGraph) already supports. So you can hand it a latent, an image tensor, a mask - anything with a .shape, .dtype, and .device - and it'll read all three off without complaint.
The inputs and outputs that matter
There's exactly one input, value (type *) - whatever you want inspected. Three outputs come back:
shape(ARRAY) - the tensor's dimensions, e.g. batch/channel/height/width for a latent.dtype(DTYPE) - the tensor's data type (float16, float32, and so on).device(DEVICE) - where it actually lives, CPU or a specific CUDA device.
None of these feed back into normal image/latent pipelines - they're diagnostic outputs, meant to be read off the node UI or wired into something like a Dump/print node if you want it logged.
How to install it
Via ComfyUI Manager: search "JNComfy", install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/jn-jairo/jn_comfyui
then restart ComfyUI. This is a personal-toolbox pack from a single author with no real community footprint we could find - no reddit threads, no entry in our knowledge base - so it's more "useful grab-bag" than "everyone has this installed." Worth keeping around for exactly this kind of debugging even if you don't touch most of the rest of the pack.
Common issues & troubleshooting
It errors on the input. If whatever you connected doesn't actually have .shape/.dtype/.device - a plain Python string or number rather than a tensor, for instance - this node has nothing to report and will fail. It's built for tensor-shaped data (LATENT, IMAGE, MASK-style outputs), not primitives.
dtype/device look "wrong." This is diagnostic output, not something the node controls - if device says CPU when you expected GPU, that's telling you something real about an earlier node in your graph (a .cpu() call somewhere upstream, or a node that never moved its output to the GPU), not a bug in JN_TensorInfo itself. Trace backward from here rather than assuming this node miscounted.
You want this logged to console, not just shown on the node. Pair it with JN_DumpOutput - wire any of the three outputs into value there and it'll print to the console when the graph runs, which is handy if you're debugging a batch run where you can't watch the canvas.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| value | * | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| shape | ARRAY | — |
| dtype | DTYPE | — |
| device | DEVICE | — |