Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3ce52bd9d6 |
@@ -1,6 +1,15 @@
|
||||
# 📈 Anomalous Model Browser Changelog
|
||||
|
||||
## v1.4.3 (The Silent Load Update)
|
||||
### 🚀 Enhancements
|
||||
- **Silent Loading by Default**: Reversed the default behavior of the hash resolver. To prevent interrupting workflows for users with massive unindexed local libraries, the aggressive "Missing Models Alert" popups and heavy background hash fetching on startup are now **OFF by default**. You can enable the auto-detect feature manually via the Settings Hub.
|
||||
- **Refined Settings UI**: Updated the terminology in the Settings Hub. The toggle has been re-worded from "Auto-Detect Missing: ON/OFF" to "🪄 Auto-Detect Missing on Load: [ON]" and "🔕 Auto-Detect Missing on Load: [OFF]" to eliminate any semantic confusion regarding the plugin's status.
|
||||
|
||||
|
||||
## v1.4.2 (Language Sync & Gallery Patch)
|
||||
### 🚀 Enhancements
|
||||
- **ComfyUI Manager Ready**: The plugin is officially available in the ComfyUI Manager default node list!
|
||||
|
||||
### 🐛 Bug Fixes
|
||||
- **Native Language Sync**: Fixed a bug where the plugin would not properly synchronize its UI language with ComfyUI's modern native `Comfy.Locale` settings. The language check has been migrated from local storage caching to a dynamic `app.ui.settings` API call during the extension setup phase.
|
||||
- **Gallery Zoom Review**: Verified and confirmed that the mouse wheel zoom feature inside the gallery image viewer is functioning natively as intended.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Anomalous Model Browser
|
||||
|
||||
[](CHANGELOG.md)
|
||||
[](CHANGELOG.md) [](https://github.com/ltdrdata/ComfyUI-Manager)
|
||||
|
||||
[English](#english) | [中文](#中文)
|
||||
|
||||
@@ -23,6 +23,8 @@ When loading a workflow or image that was saved with this plugin, if you encount
|
||||
|
||||
*(Note: The plugin relies on these injected hashes for precise matching. Historical workflows or images generated without this plugin will lack the necessary hash data and cannot be automatically repaired.)*
|
||||
|
||||
> 💡 **Auto-Detect Missing Models**: By default, the plugin will NOT silently scan your disk or interrupt your workflow loading with popups if you have missing models. You can turn this feature **ON** manually in the Settings Hub if you want active workflow monitoring and auto-healing prompts.
|
||||
|
||||
### Core Feature 2: Smart Notebook (Workflow Drafting)
|
||||
|
||||
Since the local scanner natively identifies the architecture (Base Model) of your files, the Notebook acts as a powerful drafting area:
|
||||
@@ -53,7 +55,7 @@ Open your terminal, navigate to the ComfyUI `custom_nodes` folder, and run the f
|
||||
cd custom_nodes
|
||||
git clone https://github.com/your-username/Anomalous_Model_Browser.git
|
||||
```
|
||||
*(Note: Restart ComfyUI after cloning to load the plugin)*
|
||||
*(Note: Restart ComfyUI after cloning to load the plugin. Alternatively, search for `Anomalous Model Browser` in the ComfyUI Manager and click Install!)*
|
||||
|
||||
### Quick Start
|
||||
|
||||
@@ -87,6 +89,8 @@ git clone https://github.com/your-username/Anomalous_Model_Browser.git
|
||||
|
||||
*(注意:系统依赖模型哈希进行精准匹配。如果在没有安装本插件前生成的旧工作流,或他人未使用本插件生成的图片,由于缺失哈希信息,将无法触发全自动修复,仍需手动重选。)*
|
||||
|
||||
> 💡 **自动检测缺失模型**:为了避免打断用户加载工作流的连贯性,插件**默认不会**在后台静默扫描本地磁盘,也**不会**在发现缺失模型时自动弹窗。如果您希望开启工作流缺失模型的主动监控与弹窗提示,请前往设置面板中手动将其**开启**。
|
||||
|
||||
### 核心特性二:智能笔记本(工作流草稿本)
|
||||
|
||||
得益于本地扫描功能可以精准识别并提取模型的基础架构 (Base Model),笔记本模块提供了极为强大的草稿与组装功能:
|
||||
@@ -117,7 +121,7 @@ git clone https://github.com/your-username/Anomalous_Model_Browser.git
|
||||
cd custom_nodes
|
||||
git clone https://github.com/your-username/Anomalous_Model_Browser.git
|
||||
```
|
||||
*(提示:克隆完成后,重启 ComfyUI 即可加载插件)*
|
||||
*(提示:克隆完成后,重启 ComfyUI 即可加载插件。你也可以直接在 ComfyUI Manager 中搜索 `Anomalous Model Browser` 并一键安装!)*
|
||||
|
||||
### 快速上手 (Quick Start)
|
||||
|
||||
|
||||
@@ -23,6 +23,12 @@ This document serves as an architectural retrospective and UX diagnostic log for
|
||||
**The Solution (方案)**: Introduced a `transition-delay: 0.08s` low-pass filter. The recommended UX range for hover intent is 50ms - 100ms. This 80ms delay is imperceptible for intentional clicks but completely eliminates flashes from accidental sweeps.
|
||||
(引入了 `0.08s` 动画延迟作为低通滤波器。根据人机交互体验,区分“无意滑过”与“有意悬停”的黄金推荐区间是 50ms - 100ms。我们采用的 80ms 延迟对正常点击毫无察觉,但完美过滤了鼠标无意扫过造成的闪烁。)
|
||||
|
||||
## 4. The ComfyUI Manager Auto-Update File Wipe (Manager自动更新导致文件丢失)
|
||||
**The Problem (问题)**: A custom documentation file (`docs/核心按钮操作指南_大白话版.md`) generated by AI locally was silently deleted when clicking "Update" on the node inside ComfyUI Manager.
|
||||
(本地让 AI 写的说明文件,在点击 ComfyUI Manager 的更新按钮后离奇失踪了。)
|
||||
**The Solution (方案)**: ComfyUI Manager's update mechanism often performs a raw `git pull` or hard reset. If a local file is not tracked in the remote GitHub repository (i.e., you haven't committed and pushed it), it is highly likely to be overwritten or wiped during the sync process. Always commit and push your documentation, or keep personal untracked notes outside the extension directory!
|
||||
(ComfyUI Manager 的更新机制依赖 Git 同步(类似 `git reset --hard` 或强制 pull)。如果你在本地创建了文件却没有提交并推送到 GitHub,更新时 Manager 会强行把本地状态与云端对齐,导致这些“未追踪(untracked)”的文件被直接抹杀。教训:重要的文档一定要及时 push,或者别放在插件目录下!)
|
||||
|
||||
## 4. "Hostage" Inline Confirmations (被“绑架”的内联确认)
|
||||
**The Problem (问题)**: Clicking "Delete" changed the button to "Are you sure?" with a 3-second timeout, but lacked a "Cancel" button. Users misclicking were held hostage for 3 seconds.
|
||||
(点击删除后会变成“确定删除吗?”并锁定 3 秒,但没有“取消”按钮。用户如果不小心点错,只能像被绑架一样干等 3 秒它恢复。)
|
||||
|
||||
@@ -17,6 +17,7 @@ window.anomalous_update_hash_cache = function (models) {
|
||||
};
|
||||
|
||||
window.anomalous_resolve_all_missing_nodes = async function (is_manual = false, force_prompt = false) {
|
||||
if (!is_manual && localStorage.getItem('anomalous_auto_scan_enabled') !== 'true') return;
|
||||
if (!app.graph || !app.graph._nodes) return;
|
||||
|
||||
// Fast path: if there are no missing nodes and it's not a manual check, abort early to save performance
|
||||
@@ -368,10 +369,14 @@ app.registerExtension({
|
||||
async setup() {
|
||||
// Pre-fetch all hashes on startup so that dragging generated images (without opening UI) still intercepts
|
||||
try {
|
||||
const resp = await fetch('/anomalous/all_hashes');
|
||||
const data = await resp.json();
|
||||
// api_get_all_hashes returns a flat dictionary, not {hashes: {...}}
|
||||
window.anomalous_hash_cache = data.hashes ? data.hashes : data;
|
||||
if (localStorage.getItem('anomalous_auto_scan_enabled') === 'true') {
|
||||
const resp = await fetch('/anomalous/all_hashes');
|
||||
const data = await resp.json();
|
||||
// api_get_all_hashes returns a flat dictionary, not {hashes: {...}}
|
||||
window.anomalous_hash_cache = data.hashes ? data.hashes : data;
|
||||
} else {
|
||||
window.anomalous_hash_cache = {};
|
||||
}
|
||||
window.anomalous_is_empty_state = Object.keys(window.anomalous_hash_cache).length === 0;
|
||||
} catch (e) {
|
||||
window.anomalous_hash_cache = {};
|
||||
|
||||
+24
@@ -663,6 +663,13 @@ class AnomalousBrowser {
|
||||
apiKeyBtn.innerHTML = `<span class="anomalous-btn-text">${t('apiKeyConfig')}</span>`;
|
||||
const globalScanBtnRef = document.getElementById('anomalous-global-scan-btn');
|
||||
if (globalScanBtnRef) globalScanBtnRef.innerHTML = currentLang === 'zh' ? '🌍 一键全盘极速扫描 (不下载封面/不改名)' : '🌍 Global Quick Scan (No rename/No media)';
|
||||
const disableAutoScanBtnRef = document.getElementById('anomalous-disable-auto-scan-btn');
|
||||
if (disableAutoScanBtnRef) {
|
||||
let isAutoEnabled = localStorage.getItem('anomalous_auto_scan_enabled') === 'true';
|
||||
disableAutoScanBtnRef.innerHTML = currentLang === 'zh'
|
||||
? (isAutoEnabled ? '🪄 启动时自动检测缺失模型: [已开启]' : '🔕 启动时自动检测缺失模型: [已关闭]')
|
||||
: (isAutoEnabled ? '🪄 Auto-Detect Missing on Load: ON' : '🔕 Auto-Detect Missing on Load: OFF');
|
||||
}
|
||||
const missingBtnRef = document.getElementById('anomalous-missing-btn');
|
||||
if (missingBtnRef) missingBtnRef.innerHTML = currentLang === 'zh' ? '🚨 查找缺失模型' : '🚨 Find Missing Models';
|
||||
const checkUnscannedBtnRef = document.getElementById('anomalous-check-unscanned-btn');
|
||||
@@ -741,6 +748,22 @@ class AnomalousBrowser {
|
||||
}
|
||||
};
|
||||
|
||||
const autoScanToggleBtn = document.createElement('button');
|
||||
autoScanToggleBtn.id = 'anomalous-disable-auto-scan-btn';
|
||||
const renderAutoScanToggleBtn = () => {
|
||||
let isAutoEnabled = localStorage.getItem('anomalous_auto_scan_enabled') === 'true';
|
||||
autoScanToggleBtn.innerHTML = currentLang === 'zh'
|
||||
? (isAutoEnabled ? '🪄 启动时自动检测缺失模型: [已开启]' : '🔕 启动时自动检测缺失模型: [已关闭]')
|
||||
: (isAutoEnabled ? '🪄 Auto-Detect Missing on Load: ON' : '🔕 Auto-Detect Missing on Load: OFF');
|
||||
};
|
||||
renderAutoScanToggleBtn();
|
||||
styleHubBtn(autoScanToggleBtn);
|
||||
autoScanToggleBtn.onclick = () => {
|
||||
let isAutoEnabled = localStorage.getItem('anomalous_auto_scan_enabled') === 'true';
|
||||
localStorage.setItem('anomalous_auto_scan_enabled', isAutoEnabled ? 'false' : 'true');
|
||||
renderAutoScanToggleBtn();
|
||||
};
|
||||
|
||||
const missingBtn = document.createElement('button');
|
||||
missingBtn.id = 'anomalous-missing-btn';
|
||||
missingBtn.innerHTML = currentLang === 'zh' ? '🚨 查找缺失模型' : '🚨 Find Missing Models';
|
||||
@@ -896,6 +919,7 @@ class AnomalousBrowser {
|
||||
}
|
||||
};
|
||||
|
||||
settingsHubModal.appendChild(autoScanToggleBtn);
|
||||
settingsHubModal.appendChild(missingBtn);
|
||||
settingsHubModal.appendChild(checkUnscannedBtn);
|
||||
settingsHubModal.appendChild(globalScanBtn);
|
||||
|
||||
Reference in New Issue
Block a user