Per maintainer direction: Easy_Version was a one-line node that turned
an INT N into the string `vNNN` (zero-padded). The first trivial node
ever written for the pack, never used in production workflows. Removed
to keep the pack's surface focused on the higher-value nodes.
Anyone needing the exact behavior can either inline `f"v{N:03d}"`
downstream of an INT primitive in their workflow, or pull a more
general string-format node from KJ Nodes / ComfyUI-Custom-Scripts.
BREAKING for any saved workflow that references the `Easy_Version` ID
(node will fail to load on import). Same migration shape as the v0.1.5
__koolook_v1_0_1 cleanup.
Also rolls the [Unreleased] PR #39 LATENT-dict-wrap fix into [0.1.9]
so it ships in the same release.
Touched:
- Deleted: k_easy_version.py
- __init__.py: removed version_mappings / version_display imports + merges
- README.md: removed node-table row, Pipeline category list update,
Features bullet, Usage section, Node Code Overview line, install
category list — Easy Version no longer mentioned anywhere
- pyproject.toml: 0.1.8 -> 0.1.9
- CHANGELOG.md: [0.1.9] entry covering the removal + the carried-over
PR #39 fix
Net effect: pack drops from 8 nodes to 7. Koolook/Pipeline subfolder
now has only EasyAIPipeline.
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Three small UX fixes from the v0.1.7 post-release inspection:
1. Categories: the catch-all `Koolook/VFX` subfolder is replaced with
three more granular ones:
- Easy_Version, EasyAIPipeline -> Koolook/Pipeline
- easy_ImageBatch -> Koolook/Image (joins EasyResize)
- Easy_hdr_VAE_encode/decode -> Koolook/VAE
2. Easy_hdr_VAE_encode / Easy_hdr_VAE_decode display names: previously
the display equalled the node ID (`Easy_hdr_VAE_encode`) so the user
couldn't find them by typing `koolook` in the node-add search filter
— they were registered correctly but invisible to the filter. Now:
"Easy_hdr_VAE_encode" -> "Easy HDR VAE Encode (Koolook)"
"Easy_hdr_VAE_decode" -> "Easy HDR VAE Decode (Koolook)"
Matches the title-case " (Koolook)"-suffixed convention used by the
rest of the pack since v0.1.7.
3. README node tables + categories list updated to match.
Class IDs unchanged everywhere -- saved workflows that reference any of
these IDs continue to load and run unchanged. CATEGORY is purely a UI
hint and only affects the node-add menu hierarchy.
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Bundles two changes for v0.1.7:
1. PR #36 (already on main, just rolling [Unreleased] -> [0.1.7]):
suffix all node display names with " (Koolook)" so they group
together in ComfyUI's node-add search. Class IDs unchanged.
2. Docs reorg:
- git mv Glossary.md -> docs/reference/glossary.md
- git mv RELEASING.md -> docs/maintainers/releasing.md
- Three audience buckets under docs/: user_guide/ (end users),
reference/ (lookups), maintainers/ (project ops). Each gets a
short index README.md.
- Top-level docs/README.md as the navigation entry point.
- New: docs/maintainers/registry-api.md captures the Comfy Registry
undocumented version-management API (deprecate/yank/status enum,
auto-deprecation behavior, curl recipes, optional GH Actions
workflow YAML for codified mgmt without exposing the token).
- New: docs/maintainers/node-versioning.md codifies the rules from
the v0.1.5 PR-review discussion for changing INPUT_TYPES /
RETURN_TYPES / class names without breaking saved workflows.
- Imported the existing untracked docs/ images that the maintainer
started locally (node inventory screenshot, Easy Image Batch
helper image).
- Cross-references updated in README.md, CLAUDE.md, the issue
template, and .claude/skills/add-external-fork/SKILL.md.
Root drops from 6 -> 4 markdown files. The four that stay (README,
LICENSE, CHANGELOG, CLAUDE.md) are the ones that *must* live there for
GitHub / Comfy Registry / tooling / Claude Code reasons.
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Resolves the genuine `EasyResize` node-ID collision with
`ComfyUI-EasyFilePaths` (orange-triangle warning #8 in
ComfyUI-Manager). Both packs were registering the bare class name
`EasyResize` — load order determined which one a user actually got.
Changes:
- k_easy_resize.py:
- Add SPDX-License-Identifier: GPL-3.0-or-later header.
- Add proper attribution block crediting kijai/ComfyUI-KJNodes
(Resize Image V2, GPL-3.0) as the original interface inspiration,
with a per-feature list of how the Koolook implementation
materially extended the surface (aspect-ratio parser,
keep_proportion modes, mask + composed outputs, device selection,
target/original W/H reporting, color-panel passthrough).
- Register both `EasyResize_Koolook` (canonical, new) AND
`EasyResize` (deprecated alias) IDs pointing at the same class.
Saved workflows using the legacy `EasyResize` ID continue to load
and run; new workflows pick `EasyResize_Koolook` from the search
and avoid the conflict.
- Display name on legacy alias reads `Easy Resize (deprecated, use
'Easy Resize (Koolook)')` to nudge users to switch.
- forks/THIRD_PARTY.md: full attribution entry for KJ Nodes (was
missing — manifest had it as `license: "unknown"` /
`sync_state: "needs-upstream-reference"`). License verified as
GPL-3.0 against upstream `LICENSE` file (same as our pack — no
relicense pressure).
- forks/forks_manifest.yaml: KJ Nodes entry upgraded from
`license: "unknown"` to `license: "GPL-3.0"` +
`license_verified_at`, `status: "inspired_reimplementation"` (more
accurate than `modified`), and the two exposed_node_ids are now
recorded explicitly.
- README.md: node table, category list, "Easy Resize" section, and
Wan-related descriptions all updated to use the new canonical
`EasyResize_Koolook` ID and display name.
- pyproject.toml: 0.1.5 -> 0.1.6.
- CHANGELOG.md: [0.1.6] entry covering the rename + attribution work.
Follows the node-versioning rules from the `node-versioning` discussion
in PR review: rename via alias, never break saved workflows, document
the deprecation in CHANGELOG.
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
* chore: remove maintainer dev workspaces from git tracking + bump 0.1.4
ComfyUI-Manager was reporting "44 nodes / 13 conflicts" for this pack
because the Comfy Registry's static scanner walks every `*.py` in the
published archive and reads `NODE_CLASS_MAPPINGS` dicts — including
the ones inside vendored third-party clones sitting in two folders
that were never meant to be part of the package:
upscaler_FIX/github_repos/ComfyUI-SuperUltimateVaceTools/
upscaler_FIX/github_repos/ComfyUI-multigpu/
nuke_CAM_exporter/wrapper_FIX/wrapper_fun_camera_*-code/
nuke_CAM_exporter/_Utils-CAM-track/Github-Repos/...
These folders were the maintainer's local debugging / camera-tracking
scratchpads, accidentally committed in Dec 2025 commits ec6a5ff
("Update venv at bX") and 82792e9 ("SuperUltimateVaceTools - fixed
tilling, MultiGPU - fixed torch"). Root `__init__.py` never imported
from them, so ComfyUI runtime loading was unaffected — but the
registry/Manager view was polluted, and we were inadvertently
shipping ~3.7 MB of someone else's GPL/Apache code under our pack
name on every release.
Resolution:
- `git rm -r --cached upscaler_FIX nuke_CAM_exporter` — 70 files
untracked, still on local disk for the maintainer's reference.
- Added both paths to `.gitignore` so they cannot leak back in via
`git add .`.
- Bumped pyproject.toml to 0.1.4.
Same class of issue as the v0.1.2 GPL-3.0 relicense (vendored 3rd-party
in MAIN), but lower risk because none of this code was ever imported,
and removing it doesn't change runtime behavior.
Per CHANGELOG note: maintainer should back up the two folders before
pulling this commit into their main worktree, otherwise `git pull`
will apply the deletions to their working tree (history retains them
either way; recoverable via `git checkout HEAD~1 -- ...`).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* chore(forks): drop v1_0_1 fork entirely + bump 0.1.5
Per user direction (option M from the conversation), removes the entire
forks/radiance_koolook/versions/v1_0_1/ folder — ~5,200 lines, 26
namespaced nodes — that wrapped Radiance v1.0 classes nobody used.
The wrappers were vestigial:
- 22 of them were verbatim copies of upstream Radiance v1.0 classes
with no Koolook modifications (ImageToFloat32, Float32ColorCorrect,
HDRExpandDynamicRange, HDRToneMap, ColorSpaceConvert, etc).
- The 1 genuinely-modified wrapper (RadianceOCIOColorTransformV2 with
multiframe + alpha preservation) was a derivative the Koolook author
doesn't use.
- The 3 Koolook-original entries (LoadImageEXRSequence, RadianceVAEEncode,
RadianceVAEDecode) were either unused (LoadImageEXRSequence) or
superseded in v2_3_3 (the VAE pair → Easy_hdr_VAE_encode/decode).
After this release the package exposes 8 nodes (down from 34):
Easy_Version
EasyWan22Prompt
EasyResize
EasyAIPipeline
easy_ImageBatch
KoolookLoadCameraPosesAbsolute
Easy_hdr_VAE_encode
Easy_hdr_VAE_decode
This is BREAKING for anyone who saved workflows using the
__koolook_v1_0_1 namespaced IDs — none of those resolve anymore.
Migration: install upstream Radiance directly for the HDR/EXR/OCIO
functionality, and use Easy_hdr_VAE_encode/decode for VAE work.
Source code recoverable via git history.
Bundled into release/v0.1.4-prep (now v0.1.5) so PR #34 ships the
registry-hygiene fix AND the scope cleanup as one coherent release.
Touched:
- Deleted: forks/radiance_koolook/versions/v1_0_1/ (5 files)
- Updated: forks/radiance_koolook/__init__.py (no more v1_0_1 import)
- Updated: forks/forks_manifest.yaml (v1_0_1 entry marked removed)
- Updated: forks/THIRD_PARTY.md (v1_0_1 entry marked removed + GPL note)
- Updated: README.md (Radiance Koolook nodes section + version layout)
- Updated: CLAUDE.md (Radiance v1 policy → Radiance v2_3_3 policy)
- Updated: pyproject.toml (0.1.4 → 0.1.5)
- Updated: CHANGELOG.md ([0.1.5] entry, [0.1.4] marked superseded)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
* chore: relicense to GPL-3.0 and backfill upstream attribution
ComfyUI-Koolook v0.1.0 and v0.1.1 shipped under a claimed MIT license
while already incorporating GPL-3.0-derived code from
fxtdstudios/radiance under forks/radiance_koolook/. GPL-3.0 §5(c)
requires the entire combined work to be GPL-3.0 — relicensing the
whole package is the simplest honest fix and aligns with the dominant
license posture of the ComfyUI custom-node ecosystem.
Changes:
- Add full GPL-3.0 LICENSE text at repo root (pyproject.toml already
referenced LICENSE but the file did not exist).
- Update README.md "## License" section to declare GPL-3.0 and explain
the §5(c) implication for downstream users.
- Backfill forks/THIRD_PARTY.md with full attribution entries for the
Radiance v1.0.1 baseline (already in the repo) and the upcoming
Radiance v2.3.3 VAE subset (scaffolded in v0.1.2).
- Update forks/forks_manifest.yaml: set the existing entry's license
field to "GPL-3.0" (was "to_verify_at_source_ref"), add a
license_verified_at field, and pre-register the v2.3.3 VAE entry
with verified license metadata.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* feat(skills): add license-pre-check + port add-external-fork to .claude/skills/
Two skills to prevent the v0.1.0/v0.1.1 license-incompatibility class
of bug from happening again on future forks:
- license-pre-check: blocking compatibility audit run BEFORE any code
is copied or written based on upstream. Reads the upstream LICENSE,
compares against ours via an SPDX matrix, refuses to proceed on
incompatible combinations, and records the result for the manifest.
- add-external-fork: ports the existing .cursor/skills/add-external-fork
procedure to .claude/skills/ so Claude Code can run it directly. The
port adds a mandatory Phase 0 ("run license-pre-check first") and
expands Phase 3c to require GPL §5(a) modification headers on
derived files.
The .cursor/ copy is left in place for Cursor users; the two should be
kept in sync manually until a unifying mechanism is adopted.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* feat(forks): port v2.3 VAE Encode/Decode as slim video-friendly wrapper
Adds forks/radiance_koolook/versions/v2_3_3/ — a slim re-implementation
of RadianceVAEEncode / RadianceVAEDecode under the namespace suffix
__koolook_v2_3_3. Mirrors the input surface of upstream's
RadianceVAE4KEncode / RadianceVAE4KDecode (fxtdstudios/radiance v2.3.3,
GPL-3.0) but deliberately skips the 4K cosine-blend tile engine.
Why skip the tile engine: that pipeline errors with `size of tensor a
(192) must match the size of tensor b (132) at non-singleton dimension
4` when chained into Wan 2.2 video workflows, because the tiler's
spatial layout disagrees with the video VAE's internal temporal-aware
encoding. Modern video VAEs (Wan 2.2, Hunyuan, CogVideoX, LTX) handle
their own internal stitching, so the tiler is redundant and actively
breaks the chain.
What ships:
- forks/radiance_koolook/versions/v2_3_3/nodes_vae.py — RadianceVAEEncode
and RadianceVAEDecode classes (~330 lines), rank-agnostic, with a
STRING `debug_info` second return that mirrors the pattern from
v1's RadianceOCIOColorTransformV2.
- forks/radiance_koolook/versions/v2_3_3/__init__.py — applies
__koolook_v2_3_3 namespace suffix and " (Koolook v2.3.3)" display
suffix, mirroring the v1_0_1 wrapper layout.
- forks/radiance_koolook/versions/v2_3_3/UPSTREAM_PIN.yaml — pinned
upstream commit f262f47 + license metadata.
- forks/radiance_koolook/__init__.py — merges v1_0_1 + v2_3_3 mappings.
- pyproject.toml — version bumped to 0.1.2.
- CHANGELOG.md — full [0.1.2] entry covering the license relicense,
the new v2_3_3 fork, the two new skills, and the carry-over RELEASING.md
docs that landed on main since 0.1.1.
Existing __koolook_v1_0_1 nodes are unchanged and remain available for
backward compatibility with saved workflows.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* refactor(forks/v2_3_3): rename VAE nodes to Easy_hdr_VAE_encode/decode + bump 0.1.3
Per user direction, the new video-friendly VAE wrappers are now exposed
under clean Koolook-style IDs and display names — no more
`__koolook_v2_3_3` suffix in the ComfyUI node-add UI:
- `Easy_hdr_VAE_encode` (was `RadianceVAEEncode__koolook_v2_3_3`)
- `Easy_hdr_VAE_decode` (was `RadianceVAEDecode__koolook_v2_3_3`)
Why: when both upstream Radiance v2.3.3 and our pack are installed, both
expose `Radiance VAE Encode` in the search — the Koolook-suffixed
display name still buried "Koolook" at the end of a long line, so users
were likely to mis-pick. The new names lead with the Koolook brand and
the Easy_* family convention used elsewhere in this pack
(Easy_Version, EasyAIPipeline, EasyResize, etc.).
Mechanism: new `SKIP_VERSION_SUFFIX = {...}` set in
`versions/v2_3_3/__init__.py` opts specific IDs out of the auto-suffix.
The version is still tracked structurally (file path) and textually
(file header, UPSTREAM_PIN.yaml, forks/THIRD_PARTY.md). Future
Koolook-original nodes in this fork can opt out the same way; ports of
upstream-named classes still get the suffix by default for collision
safety.
0.1.2 was test-published to the registry with the previous IDs but
never tagged or formally released; bumping to 0.1.3 publishes the
renamed version cleanly. Old 0.1.2 entry retained in CHANGELOG with a
"superseded" note for transparency.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
The v0.1.1 release surfaced two latent gaps:
1. The v0.1.0 tag was on an orphaned merge commit (PR #26 was
re-merged), so `git describe --tags` failed and ComfyUI-Manager
showed the installed version as "unknown".
2. `[tool.comfy] PublisherId` was the placeholder "CristianP", which
does not exist on the Comfy Registry. Every `Publish to Comfy
registry` workflow run since at least Feb 2026 failed with the
misleading `400 "Failed to validate token"`.
Both were the consequence of cutting releases ad-hoc. RELEASING.md
codifies the procedure so future releases follow the same path:
- pre-release validation
- release branch + PR with version bump and CHANGELOG entry
- registry publish validated via workflow_dispatch BEFORE merge
(catches PublisherId / token / version-conflict errors in PR review)
- squash-merge (single commit per release prevents the orphan-tag class)
- annotated tag at the squash-merge SHA
- GitHub Release from the matching CHANGELOG section
- post-release verification (Manager UI + registry status)
Also updates the per-release issue template to mirror RELEASING.md,
and adds links from README and CLAUDE.md so both humans and agents
land on the canonical doc.
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Squash of 4 commits from docs/readme-sync-current-nodes. Out of scope (tracked in #28): de-vendor upstream copies under upscaler_FIX/ and nuke_CAM_exporter/.
Remove stale links to deleted docs, document forward tagging conventions for repo/fork/version namespaces, and keep release checklist aligned with current workflow.
Made-with: Cursor
Consolidate fork metadata into forks/, move Radiance custom code into versioned folders, and align external reference naming so upgrades and cross-machine parity are easier to manage.
Made-with: Cursor