Files
malkuthro-ComfyUI-Koolook/docs/user_guide
malkuthroandClaude Opus 4.7 4739dd4203 feat: Easy_Utility, Easy_LoadVideo, and preview fixes (#184)
* feat(nodes): add Easy_Utility — INT → padded STRING dispatcher

First mode `int_to_padded_string`: takes an INT widget (with up/down
arrows) and emits a zero-padded STRING (default `001`, no `v` prefix).
The downstream `koolook_versioning.resolve_version_token` prepends `v`
and re-pads, so wiring this into `EasyAIPipeline.version` /
`Easy_VideoCombine.version` yields the standard `vNNN` token at execution.

Designed for extension: the `mode` widget shipped from day one so adding
further conversions (string→int, formatting variants, etc.) doesn't
rewire saved workflows.

Note: the previously-attempted JS preview-resolver refactor that aimed
to fix the "preview shows stale version" bug was reverted in this
worktree before commit — it didn't actually fix the bug (the real cause
is the JS resolver not descending into ComfyUI subgraphs) and it broke
shot_name resolution in the process. The preview-resolver work is NOT
in this commit; only the Python node + tests.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(nodes): guard version widget against pysssss .replace crash

PR #180 added a STRING `version` widget to EasyAIPipeline and
Easy_VideoCombine. Three workflow states leave widget.value undefined
or non-string when graphToPrompt iterates widgets:

- Pre-#180 workflows replay an INT (e.g. `1`) into the new STRING slot.
- Widget-to-input conversion voids the value in newer LiteGraph.
- Easy_VideoCombine's dict-based widgets_values omits the new key
  entirely on workflows saved before #180.

With pysssss/ComfyUI-Custom-Scripts installed, presetText.js patches
every STRING TextWidget.serializeValue to run callbacks that do
`value.replace(...)` for `{variable}` substitution. Any of the states
above crashes graphToPrompt and turns Run into a no-op for the whole
workflow ("Cannot read properties of undefined (reading 'replace')").

Fix: trap `widget.value` reads/writes on the version widget via
`Object.defineProperty` so the property is always coerced to a string
regardless of caller. `configurable: true` so downstream code can
still override the descriptor if it needs to.

Tests: 231 passing; both JS files parse OK.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(ai-pipeline): resolve subgraph version preview

* feat(video): add path-aware load video node

* fix(ai-pipeline): preview connected text names

* fix(pr184): address review cleanup

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-29 15:59:27 +02:00
..

User Guide

End-user documentation for nodes shipped by ComfyUI-Koolook. Pages mirror the ComfyUI category each node lives under, so the structure here matches what you see when you type "koolook" in the node-add menu.

Each per-node page includes a Source block at the top that records whether the node is Koolook-native or imported from a fork — so fork attribution is visible without needing a fork-shaped directory tree.

Browse by category

ComfyUI menu Status Nodes
Koolook/Pipeline 🚧 page TBD EasyAIPipeline
Koolook/Image 🚧 EasyResize_Koolook page TBD · ✅ easy_ImageBatch EasyResize_Koolook, easy_ImageBatch
Koolook/Camera 🚧 page TBD KoolookLoadCameraPosesAbsolute
Koolook/Wan_Video 🚧 page TBD EasyWan22Prompt
Koolook/VAE ✅ nodes/radiance_koolook_v2_3_3/ Easy_hdr_VAE_encode, Easy_hdr_VAE_decode
Koolook/Testing 🚧 page TBD Easy_Pattern

Cross-cutting concepts

Pages here cover ideas that span more than one node:

  • Kforge Labs sidebar guide — visual onboarding for Snapshots, favorite nodes, saved workflows, reusable modules, tags, and recovery.
  • VAE encode/decode pairing — which encoder fields must match the decoder for a clean roundtrip, with worked examples for SDR / HDR / cinema-log / video workflows.
  • HDR modes deep dive — what Clip (SDR), Soft Clip, Compress (Log), and Passthrough actually do to your pixels before they hit the VAE, with per-pixel worked examples.

When to add a guide

A node deserves a page if it has any of:

  • Non-obvious input semantics (e.g. aspect-ratio strings, frame indexing conventions).
  • A workflow recipe more useful than the per-input tooltips.
  • A known limitation or compatibility caveat.
  • An encode/decode or input/output pairing relationship with other nodes.

Convention:

  • One markdown file per canonical node ID, named after the ID (easy_hdr_vae_encode.md, easy_image_batch.md).
  • Place it in the folder that matches the node's ComfyUI category.
  • Screenshots and helper images go in img/, named to match the page they're embedded in (e.g. easy_hdr_vae_encode_pairing.png).

Where to find the canonical node ID list

The repo README.md lists all currently-registered node IDs and display names. The historical inventory (including removed nodes) is in the CHANGELOG.md.