From a2bb565f5d099869bd7abc476d5691f63b816ffc Mon Sep 17 00:00:00 2001
From: ussoewwin <136552381+ussoewwin@users.noreply.github.com>
Date: Wed, 10 Jun 2026 19:54:13 +0900
Subject: [PATCH] docs: add zhmd v2.4.6 release notes and update Chinese
README
---
zhmd/README.md | 8 +++-
zhmd/v2.4.6.md | 112 +++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 118 insertions(+), 2 deletions(-)
create mode 100644 zhmd/v2.4.6.md
diff --git a/zhmd/README.md b/zhmd/README.md
index 38eab08..ebbf965 100644
--- a/zhmd/README.md
+++ b/zhmd/README.md
@@ -13,7 +13,7 @@
**目前正在开发和测试中。正在大量输出调试日志。这不影响功能。**
-> 最新版本: [v2.4.5 on GitHub Releases](https://github.com/ussoewwin/ComfyUI-QwenImageLoraLoader/releases/tag/v2.4.5)
+> 最新版本: [v2.4.6 on GitHub Releases](https://github.com/ussoewwin/ComfyUI-QwenImageLoraLoader/releases/tag/v2.4.6)
>
## 来源
@@ -224,7 +224,11 @@ ComfyUI\python_embeded\python.exe -m pip install --upgrade diffusers
## 更新日志
-### v2.4.5 (最新)
+### v2.4.6 (最新)
+- **已修复**: ComfyUI **0.24.x** 启动时 **ComfyUI-nunchaku** 导入 Qwen Image 节点失败的问题(`ImportError: cannot import name 'apply_rotary_emb' from 'comfy.ldm.qwen_image.model'`)。通过本自定义节点的早期 `prestartup_script.py` 垫片,将 `apply_rotary_emb` 别名为 ComfyUI 的 `apply_rope1`(无需修改 ComfyUI-nunchaku 文件)。
+- **技术详情**: 请参阅 [v2.4.6 发行说明](v2.4.6.md) 获取完整说明
+
+### v2.4.5
- **已添加**: 在 `zhmd/` 目录下新增中文文档页面(README 与发行说明),并在英文与中文 README 及发行说明页面提供双语语言切换。
- **技术详情**: 请参阅 [v2.4.5 发行说明](v2.4.5.md) 获取完整说明
diff --git a/zhmd/v2.4.6.md b/zhmd/v2.4.6.md
new file mode 100644
index 0000000..65c0666
--- /dev/null
+++ b/zhmd/v2.4.6.md
@@ -0,0 +1,112 @@
+
+
+## 概述
+
+修复 ComfyUI **0.24.x** 启动时 **ComfyUI-nunchaku** 导入 Qwen Image 节点失败的问题(`ImportError: cannot import name 'apply_rotary_emb' from 'comfy.ldm.qwen_image.model'`)。通过本自定义节点的早期 `prestartup_script.py` 提供**条件性、对上游安全的兼容垫片**,将缺失的 `apply_rotary_emb` 别名为 ComfyUI 的 `apply_rope1`。**不修改 ComfyUI-nunchaku 源文件**;上游恢复符号或 nunchaku 停止导入后,垫片自动停用。
+
+---
+
+## 问题症状
+
+ComfyUI 启动时,nunchaku 在加载 Qwen Image 节点时失败:
+
+```text
+ImportError: cannot import name 'apply_rotary_emb' from 'comfy.ldm.qwen_image.model'
+```
+
+典型导入链:
+
+```text
+ComfyUI-nunchaku/__init__.py
+ → nodes/models/qwenimage.py
+ → models/qwenimage.py
+ → from comfy.ldm.qwen_image.model import (..., apply_rotary_emb,)
+```
+
+---
+
+## 根本原因
+
+| 组件 | 情况 |
+|------|------|
+| ComfyUI 0.24.x | `comfy.ldm.qwen_image.model` 中已移除 `apply_rotary_emb`,改用 `comfy.ldm.flux.math.apply_rope1` |
+| ComfyUI-nunchaku(受影响版本) | 仍从 `comfy.ldm.qwen_image.model` 导入 `apply_rotary_emb` |
+
+此外,自定义节点按目录名排序加载;在 Windows 上 **ComfyUI-nunchaku** 通常排在 **ComfyUI-QwenImageLoraLoader** 之前,因此仅靠 `__init__.py` 补丁为时已晚。`prestartup_script.py` 在 `init_custom_nodes()` 之前运行,可在 nunchaku 导入前注入符号。
+
+---
+
+## 本版本的修复方式
+
+### 修改的文件
+
+- `prestartup_script.py` — ComfyUI 启动早期加载 `patches/nunchaku_patch.py` 并调用兼容逻辑
+- `patches/nunchaku_patch.py` — 条件性注入 `apply_rotary_emb`(带 `_qwen_lora_loader_rotary_shim` 标记,避免重复覆盖)
+
+### 决策逻辑(摘要)
+
+| 条件 | 行为 |
+|------|------|
+| 环境变量 `QWENIMAGE_ROTARY_COMPAT` 为 `0` / `false` / `no` / `off` / `disable` / `disabled` | **跳过**(手动关闭) |
+| 模块上已有本节点的标记垫片 | **跳过**(幂等) |
+| ComfyUI 已提供**原生** `apply_rotary_emb`(非本垫片) | **跳过** — 不覆盖上游 |
+| `ComfyUI-nunchaku/models/qwenimage.py` **不再**导入 `apply_rotary_emb` | **跳过** — nunchaku 已修复 |
+| 符号仍缺失且 nunchaku 仍导入(或找不到 `qwenimage.py`) | **应用** — `apply_rotary_emb = apply_rope1` |
+
+### 成功时的日志示例
+
+垫片生效时:
+
+```text
+[INFO] Patched comfy.ldm.qwen_image.model.apply_rotary_emb -> apply_rope1 (ComfyUI-nunchaku Qwen Image compat)
+[INFO] ComfyUI-QwenImageLoraLoader prestartup: apply_rotary_emb compat applied
+```
+
+上游已修复而自动跳过时:
+
+```text
+[INFO] apply_rotary_emb compat skipped: ComfyUI already exports apply_rotary_emb
+```
+
+或
+
+```text
+[INFO] apply_rotary_emb compat skipped: ComfyUI-nunchaku no longer imports apply_rotary_emb
+```
+
+手动关闭时:
+
+```text
+[INFO] apply_rotary_emb compat skipped (QWENIMAGE_ROTARY_COMPAT is disabled)
+```
+
+---
+
+## 升级说明
+
+1. 将 **ComfyUI-QwenImageLoraLoader** 更新至 **v2.4.6** 或更高版本(`git pull` 或 ComfyUI Manager)。
+2. **重启 ComfyUI**(`prestartup_script.py` 仅在启动时运行)。
+3. 若需禁用垫片,启动前设置:`QWENIMAGE_ROTARY_COMPAT=0`。
+4. **无需**编辑 `ComfyUI-nunchaku` 内任何文件。
+
+---
+
+## 完整技术说明
+
+英文完整说明(含完整补丁代码与验证步骤)请参阅:
+
+- [md/QWEN_IMAGE_APPLY_ROTARY_EMB_COMPAT_FIX.md](../md/QWEN_IMAGE_APPLY_ROTARY_EMB_COMPAT_FIX.md)
+
+---
+
+## 本版本包含的提交(相对 v2.4.5)
+
+| 提交 | 说明 |
+|------|------|
+| `b3539cf` | v2.4.6 — 条件性 `apply_rotary_emb` 兼容垫片(`prestartup_script.py` + `patches/nunchaku_patch.py`) |
+| `1eb6798` | 英文技术文档 `md/QWEN_IMAGE_APPLY_ROTARY_EMB_COMPAT_FIX.md` 更新 |