Pivot docs/automations/ from "one folder per model" to "one folder per
automation module" so the same diffusion model can host several
independent tasks side by side. Replace the parallel docs/investigations/
tree with a fork of WhatDreamsCost-ComfyUI under forks/.
Automation modules (new layout)
- docs/automations/LTX-2.3/base-1step/ the existing single-stage
automation, moved from
docs/automations/LTX-2.3/
with its README, findings,
and handoff-checklist
rescoped to the task. The
4k-transitions backstory
that produced the module
moves here as
backstory/4k-transitions.md.
The earlier
docs/investigations/experiments/
card PNGs/HTML land in
example-cards/.
- docs/automations/LTX-2.3/audio-lipsync/ the audio-file lip-sync
module previously living
under docs/investigations/01_…/.
README, handoff, findings
stub, backstory/, and
runs/{LOOP,log}.md, all
referencing the new fork.
- docs/automations/README.md + CHEATSHEET.md updated to describe the
module-per-task pivot and
the new tree shape.
- docs/automations/CONVENTIONS.md unchanged (cross-cutting
loop contract still holds).
WhatDreamsCost Koolook fork (new)
- forks/whatdreamscost_koolook/versions/v1_3_2/
UPSTREAM_PIN.yaml pinned to upstream e81223a
(v1.3.2), GPL-3.0
verified 2026-05-28.
ltx_director.py MODIFIED — adds the
relay_overrides multiline
JSON widget on LTXDirector.
Moved from
docs/investigations/01_…/patches/.
prompt_relay.py MODIFIED — per-segment σ per
the Prompt-Relay paper
formula σ = (L − w_eff) /
(2 · √ln(1/ε)). Moved from
docs/investigations/01_…/patches/.
patches.py UNMODIFIED — vendored
verbatim from upstream
because ltx_director.py
imports detect_model_type
and apply_patches from it
(same precedent as
radiance_koolook's
color_helpers.py).
- Registered as LTXDirector__koolook_v1_3_2 ("LTX Director (Koolook v1.3.2)")
so it coexists with an installed copy of upstream WhatDreamsCost-ComfyUI.
Wired into the root __init__.py NODE_CLASS_MAPPINGS merge.
- forks/forks_manifest.yaml + forks/THIRD_PARTY.md updated with the new
entry (attribution, change log, license verified date, exposed node IDs).
Removed
- docs/investigations/ entire tree retired; its
contents either moved to
automation modules or to
forks/.
- scripts/sync_investigation_patches.py no longer needed — fork
code lives in the Koolook
tree and is synced via the
standard dev-sync flow.
- KOLOOK_WHATDREAMSCOST_PATH in .env.example same reason.
- docs/investigations in pyproject.toml's ruff
extend-exclude added in 96bf8ad to silence
lint on vendored patches;
no longer needed now that
vendored code is under
forks/ (already excluded).
Docs
- docs/reference/glossary.md Investigation folder,
Investigation patches,
JSON file folder, and the
sync_investigation_patches.py
entries replaced by
Automation module, Backstory,
Working folder, and Card.
Loop and Run rewritten to
point at the new structure.
- CHANGELOG.md [Unreleased] describes the restructure +
the new fork.
Verification
- ruff check . → all checks passed
- tools/preflight_release.py --skip manager-meta → 42 files parsed; 11
unique node IDs collected including LTXDirector; VAE dispatch branches
all OK; fixture workflows still reference all registered Koolook IDs.
- pytest → 173 passed, 0 failed.
Workflow JSON heads-up
The active audio-lipsync workflow LTX-23-audio_tests_v01.json continues to
reference the upstream LTXDirector ID. To pick up the new fork's behaviour,
swap that node to "LTX Director (Koolook v1.3.2)" (registered ID
LTXDirector__koolook_v1_3_2) — sockets and wiring are preserved. The
relay_overrides widget appears at the bottom of the new node. Documented
in the audio-lipsync README's "Workflow JSON — Koolook node ID" section.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
91 lines
4.1 KiB
Python
91 lines
4.1 KiB
Python
try:
|
|
from .k_easy_wan22_prompt import NODE_CLASS_MAPPINGS as wan_mappings
|
|
from .k_easy_wan22_prompt import NODE_DISPLAY_NAME_MAPPINGS as wan_display
|
|
|
|
from .k_easy_resize import NODE_CLASS_MAPPINGS as resize_mappings
|
|
from .k_easy_resize import NODE_DISPLAY_NAME_MAPPINGS as resize_display
|
|
|
|
from .k_ai_pipeline import NODE_CLASS_MAPPINGS as pipeline_mappings
|
|
from .k_ai_pipeline import NODE_DISPLAY_NAME_MAPPINGS as pipeline_display
|
|
|
|
from .k_easy_image_batch import NODE_CLASS_MAPPINGS as batch_mappings # Added for new VFX batch node
|
|
from .k_easy_image_batch import NODE_DISPLAY_NAME_MAPPINGS as batch_display # Added for new VFX batch node
|
|
|
|
from .k_easy_track import NODE_CLASS_MAPPINGS as cam_loader_mappings
|
|
from .k_easy_track import NODE_DISPLAY_NAME_MAPPINGS as cam_loader_display
|
|
|
|
from .k_easy_pattern import NODE_CLASS_MAPPINGS as pattern_mappings
|
|
from .k_easy_pattern import NODE_DISPLAY_NAME_MAPPINGS as pattern_display
|
|
|
|
# Easy_VideoCombine self-skips registration when VHS isn't installed
|
|
# (its inner try/import returns empty mappings), so importing here is
|
|
# always safe even on workstations without ComfyUI-VideoHelperSuite.
|
|
from .k_video_combine import NODE_CLASS_MAPPINGS as video_combine_mappings
|
|
from .k_video_combine import NODE_DISPLAY_NAME_MAPPINGS as video_combine_display
|
|
|
|
from .forks.radiance_koolook import NODE_CLASS_MAPPINGS as radiance_koolook_mappings
|
|
from .forks.radiance_koolook import NODE_DISPLAY_NAME_MAPPINGS as radiance_koolook_display
|
|
|
|
from .forks.whatdreamscost_koolook import NODE_CLASS_MAPPINGS as whatdreamscost_koolook_mappings
|
|
from .forks.whatdreamscost_koolook import NODE_DISPLAY_NAME_MAPPINGS as whatdreamscost_koolook_display
|
|
except ImportError as _node_import_exc:
|
|
# The relative imports above require a parent-package context that
|
|
# only ComfyUI's custom-node loader provides. Pytest's package
|
|
# collector (which walks up from test files looking for ``__init__.py``)
|
|
# and static-analysis tools load this file as a standalone module,
|
|
# where the imports raise. Falling back to empty registries lets
|
|
# tooling import the package directory without crashing — tests
|
|
# access sibling modules (e.g. ``koolook_routes``) via absolute
|
|
# imports that don't need the package context.
|
|
print(
|
|
f"[Koolook] node registry skipped (non-Comfy import context): "
|
|
f"{_node_import_exc}"
|
|
)
|
|
NODE_CLASS_MAPPINGS = {}
|
|
NODE_DISPLAY_NAME_MAPPINGS = {}
|
|
else:
|
|
# Register the Kforge Labs snapshot/preset endpoints. Failure here is
|
|
# non-fatal — the node mappings still load and the rest of the plugin
|
|
# works; only the snapshot feature in the sidebar is unavailable. Both
|
|
# the import itself AND the `install()` call are guarded: a missing
|
|
# `aiohttp` (extremely unusual since it's a ComfyUI hard-dep) or any
|
|
# other module-load exception falls through to the print without
|
|
# crashing the node registry.
|
|
try:
|
|
from . import koolook_routes # noqa: E402
|
|
|
|
if not koolook_routes.install():
|
|
print(
|
|
"[Koolook] PromptServer unavailable at import time; preset routes "
|
|
"(/koolook/presets/*) not registered for this session."
|
|
)
|
|
except Exception as _exc: # pragma: no cover
|
|
print(f"[Koolook] preset routes import failed; node mappings unaffected: {_exc}")
|
|
|
|
NODE_CLASS_MAPPINGS = {
|
|
**wan_mappings,
|
|
**resize_mappings,
|
|
**pipeline_mappings,
|
|
**batch_mappings,
|
|
**cam_loader_mappings,
|
|
**pattern_mappings,
|
|
**video_combine_mappings,
|
|
**radiance_koolook_mappings,
|
|
**whatdreamscost_koolook_mappings,
|
|
}
|
|
|
|
NODE_DISPLAY_NAME_MAPPINGS = {
|
|
**wan_display,
|
|
**resize_display,
|
|
**pipeline_display,
|
|
**batch_display,
|
|
**cam_loader_display,
|
|
**pattern_display,
|
|
**video_combine_display,
|
|
**radiance_koolook_display,
|
|
**whatdreamscost_koolook_display,
|
|
}
|
|
|
|
WEB_DIRECTORY = "./web"
|
|
__all__ = ["NODE_CLASS_MAPPINGS", "NODE_DISPLAY_NAME_MAPPINGS", "WEB_DIRECTORY"]
|