255 Commits
Author SHA1 Message Date
a3627bc0fe fix: pass quality string to _encode for correct resize scaling (#29)
The refactor in #28 accidentally used format name (PNG/JPEG) instead of
quality level (High/Medium/Low) to look up the resize size_map, causing
Medium and Low quality settings to always fall back to 1024px.

Co-authored-by: shanfang <shanfang@localhost>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-23 13:55:00 +08:00
223500750b feat: expand ImagePrep to support up to 8 image inputs (#28)
- Generate optional image slots via loop instead of hardcoding
- Use **kwargs to collect dynamic image inputs
- Widget inputs (format, quality) ordered before connection slots
  to prevent widgets_values serialization drift
- Fully backward compatible with existing 4-image workflows

Closes #26

Co-authored-by: shanfang <shanfang@localhost>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-23 13:13:44 +08:00
7d1fe48969 fix: reorder optional inputs to prevent widget value deserialization drift (#27)
Move non-widget inputs (llm_config, prep_img) after widget-creating inputs
in the optional dict to avoid positional index misalignment in ComfyUI's
widgets_values serialization.

Closes #25

Co-authored-by: shanfang <shanfang@localhost>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-23 12:17:13 +08:00
科林 KELIN 2495e0dbc8 fix: show welcome guide on first visit by deferring auto-select (#24)
* fix: prevent enable toggle from discarding unsaved edits

* fix: show welcome guide on first visit by deferring auto-select
2026-04-13 09:23:01 +08:00
科林 KELIN b32b407b87 feat: persist and display API connection check status (#21)
* feat: persist and display API connection check status

* fix: add missing localStorage helpers and check status persistence
2026-04-13 09:12:30 +08:00
科林 KELIN dbc21e45eb feat: add hint for system provider Base URL field (#22) 2026-04-13 09:09:23 +08:00
科林 KELIN 31d266c2f2 feat: add welcome guide for first-time users (#20) 2026-04-13 09:09:19 +08:00
科林 KELIN 283fdccd13 feat: add auto-fetch models button for provider configuration (#19)
* feat: add auto-fetch models button for provider configuration

* fix: remove duplicate fetchModelsBtn declarations and i18n new count
2026-04-13 08:06:24 +08:00
科林 KELIN b8a4057565 feat: add human-readable hints for API check failures (#17) 2026-04-13 08:03:42 +08:00
科林 KELIN 58f76d8f83 fix: show "NEED KEY" status for providers without API key configured (#18) 2026-04-13 08:03:39 +08:00
科林 KELIN df94330fea fix: correct newline escape in Chinese i18n strings (#16) 2026-04-13 08:03:35 +08:00
科林 KELIN 85aea21048 feat: per-provider SSL verification toggle (#15)
Replace the global SSL-disabled context with a per-provider
skipSSLVerify option. SSL verification is now ON by default,
with Chinese API providers pre-configured to skip verification.

Adds a toggle switch in the Provider Manager UI.
2026-04-13 07:42:49 +08:00
科林 KELIN 5cc27b9c12 fix: mask API keys in provider endpoint responses (#14)
* fix: mask API keys in provider endpoint responses

The GET /llm_toolkit/providers endpoint now returns masked keys
(e.g. "sk-••••••xxxx") instead of full API keys. The POST save
handler preserves existing keys when it receives a masked value,
and the check-connectivity endpoint accepts a providerId to look
up the real key server-side instead of requiring it from the frontend.

* fix: prioritize user-typed key over stored key in check endpoint
2026-04-13 07:41:08 +08:00
科林 KELIN cfe681db46 fix: restrict providers.json file permissions to 0600 (#13)
The config file contains API keys and should only be readable by the
file owner. Set chmod 0600 after every write in _save_providers and
_ensure_providers_file, with try/except for Windows compatibility.
2026-04-13 07:40:57 +08:00
科林 KELIN c1e53c0f7d fix: share provider cache across nodes and refresh after Manager save (#12) 2026-04-12 23:26:33 +08:00
科林 KELIN c799416237 fix: prevent enable toggle from silently saving unsaved edits (#8) 2026-04-12 23:25:21 +08:00
科林 KELIN aa397f8270 fix: ensure save button shows feedback to user (#10) 2026-04-12 23:25:12 +08:00
科林 KELIN dfc0f9834d fix: prevent stale async render from overwriting current view (#11)
* fix: ensure save button shows "Saved!" feedback to user

* fix: prevent stale async render from overwriting current view
2026-04-12 23:24:55 +08:00
科林 KELIN c8a9fb0e62 fix: correct template literal interpolation in usage stats tooltip (#9) 2026-04-12 23:24:45 +08:00
HuangYuChuh a4cefbd3b7 Update repo links to current owner 2026-04-09 20:30:19 +08:00
HuangYuChuh 659e919edc Improve SEO copy in README intro 2026-04-09 10:32:15 +08:00
科林 KELINand科林 KELIN 4bff50443c Allow JSON Extractor to return native scalar types (#6)
* Allow JSON Extractor to return native scalar types

* Handle null values in JSON extractor

---------

Co-authored-by: 科林 KELIN <HuangYuChuh@users.noreply.github.com>
2026-04-09 09:55:16 +08:00
科林 KELINand科林 KELIN 297ee588ed chore: use rounded rectangle badges in README (#5)
Co-authored-by: 科林 KELIN <HuangYuChuh@users.noreply.github.com>
2026-04-07 09:43:27 +08:00
科林_Cyril Pilgrim 180829eca3 feat(llm-translator): implement dynamic provider/model selection and UI improvements
Motivation:
Users needed a more convenient way to select LLM providers and models directly on the LLM Translator node without mandatory external configuration nodes, and requested clearer guidance on how to use the glossary feature.

Implementation:
- Refactored llm_translator.py to dynamically read from providers.json and support standalone configuration.
- Extended the provider_manager.js frontend extension to support the LLMTranslator node for dynamic dropdown syncing.
- Enhanced widget placeholders with detailed multi-line instructions and examples.
- Updated .gitignore to exclude session-specific documents.
2026-03-08 18:24:40 +08:00
科林_Cyril Pilgrim dc6d8eb9e8 docs(troubleshooting): add guide and align package version 2026-03-07 00:05:43 +08:00
科林_Cyril Pilgrim 639c6bfb41 refactor(nodes): rename ImagePreprocessor to ImagePrep
Motivation:
统一类名、显示名与文件名,以匹配 'Image Prep' 的简洁命名规范,提升代码一致性。

Implementation:
将 image_processor.py 重名为 image_prep.py,同步修改类名与节点映射 ID,并更新了示例工作流 JSON 中的节点引用。
2026-03-05 19:16:29 +08:00
科林_Cyril Pilgrim dc0fa63fac feat: add JSON Iterator node for array and directory iteration 2026-03-05 13:03:23 +08:00
科林_Cyril Pilgrim 11b94718a6 fix(ui): fundamentally fix ESC key listener lifecycle
Motivation:
ESC worked only on first open because the listener was registered inside the first-time DOM creation block. On close(), it was detached. On subsequent show() calls, the modal DOM already existed so the function returned early — the listener was NEVER re-attached.

Implementation:
Extracted listener management into two symmetric private methods: _attachEscListener() and _detachEscListener(). show() now calls _attachEscListener on EVERY open (both first-time and subsequent). _closeModal is stored as an instance method so it can be referenced on re-opens. closeModal() calls _detachEscListener() symmetrically. This pattern is leak-proof and correctly re-attaches on every modal activation.
2026-03-05 12:41:09 +08:00
科林_Cyril Pilgrim 3d0b846f61 chore(test): move test_api.py to tests directory
Motivation:
Keep the root directory clean and organized by moving test scripts to a dedicated folder.

Implementation:
Moved test_api.py to tests/test_api.py
2026-03-05 12:34:05 +08:00
科林_Cyril Pilgrim 46a3db8053 style(ui): refine toggle switch animation for a silkier feel
Motivation:
User feedback indicated that the strong spring animation felt rigid and 'blocking' during interactions.

Implementation:
Adjusted CSS transition cubic-bezier curves from an aggressive spring (.34,1.56,.64,1) to a smoother, faster ease-out curve (.25,1.1,.5,1). Reduced transition durations to 0.2s-0.28s to make the interaction feel instantaneous and fluid.
2026-03-05 12:27:56 +08:00
科林_Cyril Pilgrim 3e33595aa1 fix(ui): restore ESC key listener lost on UI re-rendering
Motivation:
When the UI completely re-renders (like when switching between English and Chinese), the old DOM gets destroyed but the window event listener was not properly cleared and the new modal failed to reattach the listener effectively, breaking the ESC key to close.

Implementation:
Added cleanup logic before attaching a new 'keydown' listener to the window object to ensure the _escListener stays active.
2026-03-05 12:22:53 +08:00
科林_Cyril Pilgrim 910d2792ce feat(ui): implement smooth Apple-style spring animation for toggle switch
Motivation:
The previous toggle switch animation was abrupt and rigid. The clickable area also spanned the entire row width, which led to unintentional clicks.

Implementation:
- CSS: Replaced static transitions with cubic-bezier spring physics, hardware-accelerated transforms (translate), and pressed-state squish feedback.
- JS: Wrapped the switch in a constrained flex container, replacing the full-width <label> wrapper to fix the clickable area.
2026-03-05 12:06:48 +08:00
科林_Cyril Pilgrim 39fe305b3b chore(asset): update project banner image
Motivation:
Ensure the project's visual assets, such as the banner, stay up-to-date with the latest branding or design requirements.

Implementation:
Replaced the existing 'asset/banner.png' with the newly updated version.
2026-03-05 09:36:23 +08:00
科林_Cyril Pilgrim f6d72ef002 feat(ui): refine save button style and add ESC key listener to close manager
Motivation:
The save button's style was originally an overly bright gradient, making it feel out of place compared to the frosted glass aesthetics. Additionally, the user requested the ability to close the modal using the Escape key.

Implementation:
1. Updated '.llm-pm-actions-right button:last-child' CSS to use a restrained translucent background similar to the sidebar items, keeping it cohesive with the glassmorphism design.
2. Added a global 'keydown' listener on 'Escape' inside 'ProviderManager.show()' which correctly triggers 'closeModal()' (also checking for unsaved changes) and automatically removes itself when closed.
2026-03-05 09:34:16 +08:00
科林_Cyril Pilgrim 6f597d75f1 fix(i18n): fix language switcher bug and refine Chinese translations
Motivation:
The language switcher's change event listener was never registered because () does not support an initialization callback as its 4th argument. Additionally, the Chinese translation for 'LLM Manager' was inaccurate (模型管家).

Implementation:
1. Replaced the unsupported  callback with an IIFE to manually create the select element, set its value, and add the 'change' event listener.
2. Updated 'I18N_DICT' to change '模型管家' to 'LLM 管理器' for better accuracy.
2026-03-05 09:24:00 +08:00
科林_Cyril Pilgrim b869fefce2 fix(i18n): bind language change event using addEventListener
Motivation:
修复使用 ComfyUI 的  构建 select 元素时 onchange 属性绑定失效的问题。
2026-03-04 22:35:33 +08:00
科林_Cyril Pilgrim 3c7bea009a feat(i18n): convert language toggle to a dropdown menu 2026-03-04 22:02:15 +08:00
科林_Cyril Pilgrim 1c3f998bc1 style(i18n): replace text toggle with language icon
Motivation:
提升管理界面的视觉精致度,使用图标替代文字切换按钮。
2026-03-04 21:41:03 +08:00
科林_Cyril Pilgrim 1dc6567c46 feat(i18n): translate main menu button and fallback button
Motivation:
使 ComfyUI 顶栏按钮也能随界面语言切换而动态更新。
2026-03-04 19:50:40 +08:00
科林_Cyril Pilgrim 4825bc3c06 feat(i18n): implement language switcher (EN/ZH)
Motivation:
提高中英文用户的使用体验,使界面语言可一键切换。

Implementation:
1. 在 provider_manager.js 中注入 I18N_DICT 词典与 t(key) 翻译函数。
2. 将所有硬编码的 UI 字符串替换为翻译调用。
3. 在管理面板标题旁增加语言切换快按键,状态持久化至 localStorage。
2026-03-04 19:35:24 +08:00
科林_Cyril Pilgrim 4c3f5175e8 docs: fix corrupted AGPL LICENSE file text 2026-03-04 18:27:22 +08:00
科林_Cyril Pilgrim df0faf707c docs: update license to AGPL-3.0 2026-03-04 18:24:43 +08:00
科林_Cyril Pilgrim 7f22ab5b07 style: reduce hover glow intensity on Custom Provider button 2026-03-04 18:17:01 +08:00
科林_Cyril Pilgrim a244b74140 style: align Custom Provider button with glassmorphism active style 2026-03-04 18:15:19 +08:00
科林_Cyril Pilgrim 8d2dbdcb9e style: remove active provider left border 2026-03-04 18:09:02 +08:00
科林_Cyril Pilgrim dc653c0cf2 style: remove SYSTEM tags & redesign active sidebar item 2026-03-04 18:02:20 +08:00
科林_Cyril Pilgrim 0754a7aa85 feat(ui): refine glassmorphism details (inline eye icon, loading animations) 2026-03-04 16:41:10 +08:00
科林_Cyril Pilgrim 0590ed5d17 feat(ui): complete glassmorphism UI redesign - Apple frosted glass aesthetic 2026-03-04 16:08:03 +08:00
科林_Cyril Pilgrim d148633515 fix(ui): fix visibility of 'I' in default provider icon 2026-03-04 15:47:07 +08:00
科林_Cyril Pilgrim 159e5a4acd style(ui): update default provider icon with colorful gradient 2026-03-04 15:41:07 +08:00