Remove scripts that are now fully replaced by comfyui-skill-cli:
- scripts/registry.py → comfyui-skill list/info
- scripts/comfyui_client.py → comfyui-skill run/submit/status/deps
- scripts/server_manager.py → comfyui-skill server add/enable/disable/remove
- scripts/transfer_manager.py → comfyui-skill config export/import
Keep scripts/shared/ (still used by Web UI backend) and shell scripts.
Update README to replace all Python script references with CLI commands.
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>
Workflows imported via UI store all parameter mappings in ui_parameters,
but only explicitly "exposed" ones go into parameters. When users pass
values (prompt, seed, width, etc.) through the agent conversation, those
values were silently ignored because they weren't in the exposed set,
causing workflows to always run with hardcoded defaults.
Now the runtime merges ui_parameters as a fallback lookup so user-supplied
values reach the correct workflow nodes without requiring manual exposure
in the UI. Explicit parameters still take precedence.
Closes community-reported issue: params passed in chat ignored by workflow.
Co-authored-by: Kelin <kelin@KelindeMacBook-Air.local>
Previously, parameters not matching any schema key were silently
dropped, making it hard to diagnose why a workflow used stale defaults.
Now the response includes a warnings array listing each unmatched
parameter and the available schema keys.
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
- 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>
* fix: add 30-minute timeout to job polling loop
Prevent infinite blocking when ComfyUI server hangs or a job gets stuck.
Returns a clear timeout error instead of waiting indefinitely.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: replace fixed timeout with queue-based job liveness check
Instead of a hardcoded 30-minute timeout, poll the /queue endpoint to
determine if the job is still pending or running. Only report an error
when the job disappears from both history and queue, allowing
arbitrarily long tasks to complete naturally.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Kelin <kelin@KelindeMacBook-Air.local>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Add validate_and_coerce_params() that checks required parameters,
safely coerces types with error handling, and applies default values.
All validation errors are collected and returned at once instead of
crashing on the first bad value.
Previously queue failures and execution errors returned generic messages
like "Failed to queue prompt to ComfyUI.", losing the specific node error
info ComfyUI provides. Now HTTPError response bodies are parsed for
node_errors, and history status is checked for execution_error messages,
giving agents and users actionable diagnostics.
* build(ui): rebuild frontend — remove server URL help text
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix(updater): use explicit branch ref to avoid tracking config issues
git pull --ff-only fails when local branch tracks a deleted remote
branch. Use git fetch origin main:main instead, which always updates
local main regardless of current branch or tracking configuration.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
---------
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>
- 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>
Add optional auth field to server config. All HTTP requests to
ComfyUI (prompt, history, view, health check) now pass the
Authorization header when configured.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add /api/frontend/check-update endpoint that compares local
version.json against the latest rolling release on GitHub
- Update scripts/update_frontend.sh to default to the "latest"
release tag, with optional version argument
- Results are cached for 10 minutes to respect GitHub API limits
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Move frontend source code to HuangYuChuh/ComfyUI_Skills_OpenClaw-frontend
so that cloning the main repo no longer downloads 1.4M of frontend source.
Users only need the pre-built assets in ui/static/.
- Remove frontend/ directory (now lives in its own repo)
- Add scripts/update_frontend.sh to pull latest release assets
- Remove frontend CI job (handled by frontend repo)
- Move Gemfile/Gemfile.lock to docs/ and update serve_pages.sh
- Clean up .gitignore (remove stale paths and Manus files section)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Motivation:
Traditional UUID-based filenames for images are difficult for users to organize. Providing human-readable prefixes based on user intent or workflow context, combined with stable timestamps, enhances asset management.
Implementation:
Introduced sanitize_filename_part for safety, and get_output_prefix to prioritize the 'filename_prefix' argument. Used a detailed timestamp (%Y%m%d-%H%M%S-%3f) and index suffix for generated files.
Motivation:
1. Maintaining a redundant 'workflow_id' in schema.json was error-prone and confusing for users.
2. The previous default port 8189 frequently collided with other AI services or ComfyUI instances during multi-server deployment.
Implementation:
1. Revoked 'workflow_id' reliance in schema logic; the system now strictly uses the directory name as the unique identifier.
2. Updated default web UI port to 18189 and added support for the 'OPENCLAW_UI_PORT' environment variable across scripts and settings.
3. Synchronized documentation and UI launcher scripts to reflect these changes.
Motivation:
The previous data structure for workflows and schemas lacked cohesion and was difficult to maintain manually. Additionally, a more robust and flexible migration system was needed to transfer skill configurations across different environments.
Implementation:
1. Unified the data hierarchy into a directory-based structure: 'data/<server>/<workflow>/'.
2. Enhanced 'transfer_manager.py' and 'transfer_bundle.py' for environmental-aware configuration migration.
3. Updated frontend JS/CSS and Flask routes to support the new directory-centric asset management.
4. Revamped English and Chinese READMEs to prioritize safe installation and clear configuration workflows.
Motivation:
Allows users to easily migrate or back up their skill configurations, server settings, and workflow mappings across different environments, improving setup mobility.
Implementation:
Developed a bundle system in scripts/shared/transfer_bundle.py and scripts/transfer_manager.py for state serialization. Integrated this into the Flask backend and frontend UI, adding components for export/import actions with pre-check validation. Refactored README files to document the migration path and refined the installation guide.
Motivation:
To prevent path traversal via server/workflow identifiers and ensure relative path consistency for output directories across different server environments.
Implementation:
- Added is_valid_identifier validation to comfyui_client and server_manager.
- Standardized default output_dir to relative './outputs' in config and settings.
Motivation:
The backend previously assumed a single global ComfyUI server, making it impossible to switch between environments or add remote nodes.
Implementation:
Refactored UIStorageService and scripts to organize workflows into server-specific subdirectories. Introduced ServerModel and runtime configuration loader to handle multi-server routing.