- Replace old banner (banner-ui-dashboard-20260322.png) with new design
- Rename banner file to banner.png for cleaner naming
- Update banner reference in all README variants (en, zh, zh-TW, ja)
Root cause: when a workflow has multiple nodes of the same type (e.g. two
GeminiNanoBanana2), extract_schema_params gave them identical parameter
names (e.g. both "seed"). build_final_schema deduped them, but the
unique names were never synced back to ui_parameters. When the frontend
saved using ui_parameters, the duplicate names caused one parameter to
silently overwrite the other.
Changes:
- Refactor _get_auto_mapping to only decide exposure/required, not naming
- Add _assign_parameter_names for global context-aware naming:
- Single node of a type → simple name (seed, prompt)
- Multiple nodes → disambiguate with node title or node_id
- Add sync_names_back option to build_final_schema so ui_parameters
and parameters stay consistent
- Enrich descriptions with node context for duplicate types
Closes#87
The help text under the API Key field now links directly to
platform.comfy.org/login so users can generate a key in one click.
Co-authored-by: Kelin <kelin@KelindeMacBook-Air.local>
Add comfy_api_key server config field to enable cloud API nodes
(Kling, Sora, Nano Banana, etc.) when calling ComfyUI via API.
The key is passed through extra_data.api_key_comfy_org in the
/prompt request, following ComfyUI's official API key integration.
Closes#78
Co-authored-by: Kelin <kelin@KelindeMacBook-Air.local>
Commit d7439de left git conflict markers (<<<<<<<<, ========, >>>>>>>>)
inside the production JS bundles, causing JavaScript syntax errors that
prevented React from mounting and triggered the "UI failed to load"
recovery screen.
Co-authored-by: Kelin <kelin@KelindeMacBook-Air.local>
Add `submit` and `status` subcommands to comfyui_client.py so agents in
interactive environments (chat, messaging) can relay generation progress
to users between tool calls instead of blocking silently for 30+ seconds.
- `submit`: validates params, queues prompt, returns run_id immediately
- `status`: checks queue position / running state / completion, downloads
images when done
- Original `--workflow --args` blocking mode is fully preserved
- SKILL.md updated with interactive vs non-blocking guidance
- Synced frontend assets with URL param cleanup fix
- Mark LoadImage node's image field as type "image" in schema extraction
- Add POST /api/servers/{server_id}/upload/image proxy endpoint
- Auto-migrate legacy schemas with string type to image type at read time
- Fix ComfyUI error dict handling in comfyui_client.py (TypeError on dict += str)
- Add python-multipart dependency for file upload support
ComfyUI subgraph workflows use colon-separated node IDs like "14:10"
instead of plain integers. The previous int() coercion crashed on
these IDs with ValueError. Store node_id as string throughout the
schema pipeline to support both plain and subgraph workflows.
Add POST /api/servers/{server_id}/workflows/batch-delete to allow
deleting multiple workflows in a single request. Refactor
WorkflowOrderModel into a shared WorkflowIdsModel base class.
Also disable the list-level history entry point (has_history=False).
- registry.py: replace bare `except Exception: pass` with specific
exception handling and a warning log, so corrupted schema.json files
are visible instead of silently disappearing from workflow list
- services.py: apply the same input normalization in update_server as
add_server (strip whitespace, coerce types, apply fallback defaults)
to prevent dirty data from entering config
Co-authored-by: Kelin <kelin@KelindeMacBook-Air.local>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Include UpdateBanner, multi-stage update flow (pull → restart → reload),
and system update API integration.
Co-authored-by: Kelin <kelin@KelindeMacBook-Air.local>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Add GitUpdateProvider to detect and apply updates without GitHub API:
- scripts/shared/updater.py: check via `git ls-remote`, update via `git pull --ff-only`, restart via os.execv
- ui/app.py: replace frontend_update with three new endpoints:
GET /api/system/check-update, POST /api/system/update, POST /api/system/restart
- ui/app.py: add POST /api/servers/test-connection for testing server connectivity
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Users who clone the repo now have version.json in ui/static/ by default.
Without it the frontend update checker always returned no_local_version
and never detected any updates.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Fix auth field not being saved in add_server/update_server/serialize
- Add test-connection endpoint with detailed error messages
- Return specific errors: 401 Unauthorized, 403 Forbidden, timeout, etc.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>