dsh-comfyui 0.3.0-beta.5 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +65 -168
- package/README.md +63 -166
- package/client/client.js +831 -33
- package/client/client.js.map +1 -1
- package/lib/config.d.ts +14 -0
- package/lib/config.js +6 -0
- package/lib/index.js +30 -10
- package/lib/routes.js +259 -0
- package/lib/skill.js +50 -3
- package/lib/skillpack.d.ts +262 -0
- package/lib/skillpack.js +774 -0
- package/lib/store.d.ts +13 -0
- package/lib/store.js +36 -0
- package/lib/tools.d.ts +3 -0
- package/lib/tools.js +289 -3
- package/package.json +4 -9
package/README.en.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
<h1 align="center">dsh-comfyui</h1>
|
|
10
10
|
|
|
11
|
-
<p align="center">Let the DeepSeek Harness agent drive
|
|
11
|
+
<p align="center">Let the DeepSeek Harness agent smartly drive a local or remote ComfyUI to generate anything — with workflow and asset management panels, per-workflow skill packs, a companion skill and a same-origin media proxy.</p>
|
|
12
12
|
|
|
13
13
|
<p align="center">
|
|
14
14
|
<a href="https://www.npmjs.com/package/dsh-comfyui"><img src="https://img.shields.io/npm/v/dsh-comfyui" alt="npm version" /></a>
|
|
@@ -16,210 +16,107 @@
|
|
|
16
16
|
<img src="https://img.shields.io/npm/l/dsh-comfyui" alt="license" />
|
|
17
17
|
</p>
|
|
18
18
|
|
|
19
|
+
> **Version pairing (pick the right dsh before installing, otherwise dshmarket shows a risk banner)**:
|
|
20
|
+
>
|
|
21
|
+
> | dsh-comfyui | Paired DeepSeek Harness | Notes |
|
|
22
|
+
> | --- | --- | --- |
|
|
23
|
+
> | **0.4.0 (latest, `latest` tag)** | **>= 0.1.2** | From 0.4.0 this plugin uses the new settings service API |
|
|
24
|
+
> | **0.3.x (beta line, `beta` tag)** | **0.1.1** | On older dsh versions stay on the 0.3.x line |
|
|
25
|
+
>
|
|
26
|
+
> Install: `dsh plugin --profile web add dsh-comfyui` (latest 0.4.0) / `dsh plugin --profile web add dsh-comfyui@beta` (0.3.x for older hosts).
|
|
27
|
+
|
|
19
28
|
## Features
|
|
20
29
|
|
|
21
30
|
### Agent tools
|
|
22
31
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
- `
|
|
32
|
+
The agent drives ComfyUI directly, no canvas work needed:
|
|
33
|
+
|
|
34
|
+
- `comfyui_run` — submit an API-format workflow or a built-in template (`txt2img` / `img2img` / `video`) and get media back; `mode: "sync"` waits for the result, `mode: "async"` runs a background job (recommended for video).
|
|
35
|
+
- `comfyui_object_info` — list the node definitions your ComfyUI server supports, so the agent can build valid workflows on the fly.
|
|
36
|
+
- `comfyui_workflow` — manage the plugin's runnable-workflow library: `list` (server address, local ComfyUI dirs, load-area media, per-workflow parameter lists), `run` (by id + parameter overrides), `skill` (on-demand read of a workflow's skill pack), `refresh` (re-derive a parameter snapshot).
|
|
37
|
+
- `comfyui_skill` — read and write workflow skill packs (`list` / `read` / `write` / `append` / `mkdir` / `rename` / `delete` / `enable` / `require`); the agent can write its lessons back into a pack and reuse them across sessions.
|
|
26
38
|
|
|
27
39
|
### UI panel
|
|
28
40
|
|
|
29
|
-
|
|
41
|
+
A right-docked panel with three tabs:
|
|
30
42
|
|
|
31
|
-
- **Workflows** — the
|
|
32
|
-
- **Assets** —
|
|
33
|
-
- **Queue** —
|
|
43
|
+
- **Workflows** — the runnable workflow library (create / edit / run / delete / import `.json`, tag classification with a dropdown filter); auto-detects graphs saved on the ComfyUI server and can **extract** them into runnable workflows (whole / per component / main flow only when a canvas holds several independent flows).
|
|
44
|
+
- **Assets** — every generated result with preview, download, and hover-to-delete (also removes the file from the ComfyUI output directory).
|
|
45
|
+
- **Queue** — live queue plus full history in five states, with delete / interrupt / rerun / clear / free-memory actions; plugin-submitted jobs show a progress bar and preview.
|
|
34
46
|
|
|
35
47
|
<p align="center"><img src="images/panel.png" width="70%" alt="Main panel: workflows / assets / queue" title="Main panel: workflows / assets / queue" /></p>
|
|
36
48
|
|
|
37
|
-
### Load area
|
|
38
|
-
|
|
39
|
-
A media loader in the style of ComfyUI's LoadImage node, sitting at the top of the Workflows tab: besides images, the picker also lists the video and audio files available to the ComfyUI loader nodes (LoadVideo / LoadAudio).
|
|
40
|
-
|
|
41
|
-
- **Multiple slots**: the load area is a list of slots — a lone slot stretches across the panel, two or more share a fixed width and wrap into rows. "+ Add slot" at the bottom appends one; an empty slot reads "Slot N / Add media" and fills on click; hovering a slot reveals an **×** in its corner that deletes it, and the picker's first tile ("None") empties a slot while keeping it. Filled slots fill the workflow's unset loader parameters in order — a two-reference workflow just needs two slots, with no file names for the agent to guess.
|
|
42
|
-
- Clicking any slot opens a picker window with a nav bar (All / Imported / Generated), a type filter, a paste/upload drop zone on the right, and a masonry grid of every loadable image / video / audio file in the ComfyUI `input` directory plus everything the plugin generated. **Video and audio play right in the card** (clicking the player only plays, it never selects); clicking the file name under a card picks it and closes the window. File kind is decided by extension, and each loader's input key is read from the ComfyUI node definition (`LoadImage.image` / `LoadVideo.file` / `LoadAudio.audio`), so no media type goes missing.
|
|
43
|
-
- Load-area media are the **default inputs**: unset loader parameters are filled from the slots in order (slot 1 → first image parameter, slot 2 → second; video/audio parameters take slots of their own kind) — the agent does not need to name a file. Parameters with no matching slot keep the workflow's authored value.
|
|
44
|
-
- **Visible to the agent**: `comfyui_workflow action: list` reports a `loadArea` field (slot count, how many are filled, and the file list), so the agent knows what the user loaded without asking.
|
|
45
|
-
- **Resolution auto-match**: uploads record their pixel size; when a run leaves `width`/`height` unset, they default to the source image's actual size.
|
|
46
|
-
- **Hash naming + dedup**: uploads are renamed to `original_shorthash.ext` (SHA-256 first 10 hex); re-uploading an identical file reuses the existing name instead of storing a duplicate. The picker refreshes live after uploads.
|
|
47
|
-
- Selecting a **generated** image copies it from the output directory into `input` on the fly, so image-loading nodes can use it.
|
|
48
|
-
|
|
49
|
-
<p align="center"><img src="images/loadarea.png" width="70%" alt="Load area: image picking and upload" title="Load area: image picking and upload" /></p>
|
|
50
|
-
|
|
51
|
-
### Workflow tags
|
|
52
|
-
|
|
53
|
-
Classify runnable workflows with preset categories (image-to-image / text-to-image / text-to-video / image-to-video / reference-to-video / text-to-audio / reference-to-audio) plus any custom tags. Tags are edited in the workflow editor, shown on the top-right of each card, and the library list has a filter bar with per-tag counts.
|
|
54
|
-
|
|
55
|
-
### Built-in templates
|
|
56
|
-
|
|
57
|
-
`txt2img` (SDXL text-to-image), `img2img` (SDXL image-to-image), `video` (Wan 2.1 text-to-video via ComfyUI-WanVideoWrapper). Template node ids are documented in the tool description so the agent overrides the right inputs.
|
|
58
|
-
|
|
59
|
-
### Media proxy
|
|
60
|
-
|
|
61
|
-
Generated files are addressed by `filename + subfolder + type` and stream through a same-origin route (`/comfyui/media`), never through ComfyUI's in-memory history — older results in the asset panel keep opening after a ComfyUI restart or a history clear, as long as the file is still in the output directory. The browser never talks to ComfyUI directly: no CORS, no mixed-content, no API key in the page, and remote ComfyUI installs work unchanged. The media URL base is auto-detected: on every page load the browser self-reports the origin it actually uses via `/comfyui/ping` (LAN IP / domain / reverse proxy all produce working links), or you can pin it explicitly with the `mediaHost` config key.
|
|
62
|
-
|
|
63
|
-
### Tool card
|
|
64
|
-
|
|
65
|
-
Results render as a media wall (images/videos with download links) right in the chat, including background-job status.
|
|
66
|
-
|
|
67
|
-
### Settings page
|
|
68
|
-
|
|
69
|
-
A ComfyUI section in the DH settings where you can edit the server URL (`baseUrl`), API-key env var (`apiKeyEnv`), media base URL (`mediaHost`), the local ComfyUI install directories (`comfyuiDirs`, multiple allowed — mapped dirs / multiple installs; the agent uses them to locate your ComfyUI files and the TTS voice library without asking), test the connection, and switch the plugin UI language (Chinese / English — stored in the browser, applies to the whole plugin UI), all without touching `cordis.yml`. The data directory and asset cap are configured in `cordis.yml` only and are not exposed in the settings page.
|
|
70
|
-
|
|
71
|
-
<p align="center"><img src="images/settings.png" width="70%" alt="ComfyUI settings page (with UI language switch)" title="ComfyUI settings page (with UI language switch)" /></p>
|
|
72
|
-
|
|
73
|
-
### Companion skill
|
|
49
|
+
### Load area (media loader)
|
|
74
50
|
|
|
75
|
-
A
|
|
51
|
+
A media loader at the top of the Workflows tab, in the style of ComfyUI's LoadImage node: visual picking (with in-place playback for video/audio), paste/upload, and multiple slots. Filled slots fill the workflow's unset loader parameters in order — **the agent doesn't need to guess file names**; unset `width`/`height` auto-match the source image's size. Uploads are renamed by content hash (dedup).
|
|
76
52
|
|
|
77
|
-
|
|
53
|
+
The `loadArea` field of `comfyui_workflow list` exposes the slots and their contents to the agent.
|
|
78
54
|
|
|
79
|
-
|
|
55
|
+
### Workflow skill packs (a manual for the agent)
|
|
80
56
|
|
|
81
|
-
|
|
82
|
-
- **Runnable workflow** — an API-format prompt, the actual execution unit. You get one by **extracting** it from a graph (1 graph → N runnable workflows) or by pasting/importing an API `.json` directly.
|
|
57
|
+
A parameter list tells the agent which knobs exist, not what the workflow is *for* or which step goes wrong. A complex workflow can carry a **skill pack** (enable it from the "Skill pack" button on the workflow card):
|
|
83
58
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
Extraction follows the live `/object_info`: rewires Reroute/bypass pass-throughs, maps widget values (including dynamic sub-widgets and `control_after_generate`), inlines primitives, drops stale slot references with a warning, skips components with no output node, and fails loudly when a required input was never wired — every extracted workflow is validated by `POST /prompt` (zero `node_errors`) before it is stored.
|
|
91
|
-
|
|
92
|
-
### Adjustable parameters
|
|
93
|
-
|
|
94
|
-
Every runnable workflow carries an adjustable **parameter set** (`parameters`) so one workflow can produce different results per run:
|
|
59
|
+
```
|
|
60
|
+
<data dir>/skills/<workflow>/
|
|
61
|
+
SKILL.md # main doc: when to use / key parameters / gotchas
|
|
62
|
+
references/ # reference docs: style catalogs, troubleshooting
|
|
63
|
+
assets/ # reference images etc (previewable in the panel)
|
|
64
|
+
```
|
|
95
65
|
|
|
96
|
-
- **
|
|
97
|
-
- **
|
|
98
|
-
- **
|
|
99
|
-
- **
|
|
100
|
-
- **Agent-facing**: the parameter list is written into the workflow's input notes (`inputs` field) and shown by `comfyui_workflow` `action: list`; `action: run` accepts `parameters: {"prompt": "...", "seed": 42}` overrides — explicit values win over random/default, omitted parameters use their defaults.
|
|
101
|
-
- **Parameter snapshot & refresh**: a parameter's options/number metadata (`options`, `numberKind`, …) is copied from the ComfyUI node definitions **at save time** and is never auto-updated afterwards (noticeable with growing lists like the voice library or uploaded files). Refresh it via `comfyui_workflow action: refresh { id }`, or — from other programs — the same-origin route `POST /comfyui/workflows/refresh-params` (body `{ "id": ... }`). Refreshing only touches derived fields; your hand-added advanced parameters and authored defaults are preserved. Until refreshed, `action: list` may be missing new voices and `action: run` will reject them.
|
|
102
|
-
- **Load-area integration**: an unset image-type parameter is filled with the load-area's current source image, and unset `width`/`height` are auto-matched to that image's recorded pixel size. Explicit values always win, so the agent can still override both.
|
|
66
|
+
- **Progressive disclosure, no resident context cost**: `comfyui_workflow list` shows one summary line → `action: skill` fetches the SKILL.md body once the workflow is chosen → a referenced document is read only when the body points at it. Dozens of workflows can carry full packs, and the daily context cost stays one line each.
|
|
67
|
+
- **Edited in the panel**: file list + editor, import (auto-bucketed by extension), custom subdirectories, image preview, and the whole pack root can be moved to another drive / a synced folder (the `技能包目录` setting).
|
|
68
|
+
- **The agent can write it too**: the `comfyui_skill` tool lets the agent read and author a pack — `append` a pitfall to SKILL.md and the next session (even another one) reuses that experience.
|
|
69
|
+
- **Read-before-run**: a "required" flag makes `run` refuse until the skill pack has been read in this session, with an error pointing to `action: skill`.
|
|
103
70
|
|
|
104
|
-
|
|
71
|
+
### Media proxy & settings
|
|
105
72
|
|
|
106
|
-
|
|
107
|
-
- A running [ComfyUI](https://github.com/comfystack/ComfyUI) server (default `http://127.0.0.1:8188`).
|
|
108
|
-
- For the `video` template: the [ComfyUI-WanVideoWrapper](https://github.com/kijai/ComfyUI-WanVideoWrapper) custom nodes and Wan 2.1 model files.
|
|
73
|
+
Generated files are served through a same-origin route (`/comfyui/media`) addressed by file name, independent of ComfyUI's in-memory history — old results keep opening after a restart or a history clear. The browser never touches ComfyUI directly: no CORS, no mixed content, and the API key never leaves the host.
|
|
109
74
|
|
|
110
|
-
|
|
75
|
+
The DH settings page gets a "ComfyUI" section: server address, API key env var name, local ComfyUI directories, media host, connection test and a zh/en UI language switch — applied immediately, no `cordis.yml` edits needed.
|
|
111
76
|
|
|
112
|
-
|
|
77
|
+
## Install
|
|
113
78
|
|
|
114
79
|
```sh
|
|
80
|
+
# web profile
|
|
115
81
|
dsh plugin --profile web add dsh-comfyui
|
|
82
|
+
# desktop profile
|
|
83
|
+
dsh plugin --profile desktop add dsh-comfyui
|
|
116
84
|
```
|
|
117
85
|
|
|
118
|
-
|
|
86
|
+
After restarting the app: a panel entry appears in the sidebar, a "ComfyUI" section in settings, and the agent gets all tools plus the companion skill right away.
|
|
119
87
|
|
|
120
|
-
|
|
121
|
-
dsh plugin --profile desktop add dsh-comfyui
|
|
122
|
-
```
|
|
88
|
+
## Usage
|
|
123
89
|
|
|
124
|
-
|
|
90
|
+
Just tell the agent, e.g.:
|
|
125
91
|
|
|
126
|
-
|
|
92
|
+
- "Draw a red cat with ComfyUI"
|
|
93
|
+
- "Turn this image into cyberpunk style"
|
|
94
|
+
- "Turn the anime image in the load area into a photorealistic portrait, same resolution"
|
|
95
|
+
- "Generate a 5-second clip: city at sunset"
|
|
96
|
+
- "Run my Krea-Afterlight saved in ComfyUI" (if the graph isn't extracted yet, the agent will ask you to **extract** it in the panel first)
|
|
127
97
|
|
|
128
|
-
For a remote ComfyUI behind an
|
|
98
|
+
For a remote ComfyUI behind an authenticated proxy, provide the key via credential storage or the `apiKeyEnv` env var (default `COMFYUI_API_KEY`) — it is resolved on the host and never sent to the browser.
|
|
129
99
|
|
|
130
|
-
##
|
|
100
|
+
## Configuration
|
|
131
101
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
- "Generate a red cat image with ComfyUI"
|
|
135
|
-
- "Turn this image into cyberpunk style" (img2img with an input image filename)
|
|
136
|
-
- "Turn the anime girl in the load area into a realistic photo, matching the original resolution" (load-area source image + resolution auto-match)
|
|
137
|
-
- "Generate a 5-second clip of a city at sunset" (video; needs the Wan wrapper)
|
|
138
|
-
- "Run my Krea-Afterlight workflow saved in ComfyUI" — the agent lists server-side graphs; if yours is not extracted yet it will tell you to click **extract** in the panel first (a canvas may contain several independent flows, so you can extract all as one, per component, or the main flow only).
|
|
139
|
-
|
|
140
|
-
The agent picks a template, inspects your server with `comfyui_object_info`, or runs a library workflow with `comfyui_workflow`.
|
|
141
|
-
|
|
142
|
-
### Configuration
|
|
143
|
-
|
|
144
|
-
The plugin reads a `comfyui` section from `cordis.yml` (or the settings page):
|
|
145
|
-
|
|
146
|
-
```yaml
|
|
147
|
-
# cordis.yml
|
|
148
|
-
- id: comfyui
|
|
149
|
-
name: dsh-comfyui
|
|
150
|
-
config:
|
|
151
|
-
baseUrl: http://127.0.0.1:8188
|
|
152
|
-
apiKeyEnv: COMFYUI_API_KEY
|
|
153
|
-
timeoutMs: 900000
|
|
154
|
-
maxMediaItems: 12
|
|
155
|
-
dataDir: ''
|
|
156
|
-
maxAssets: 200
|
|
157
|
-
mediaHost: ''
|
|
158
|
-
outputDir: ''
|
|
159
|
-
comfyuiDirs:
|
|
160
|
-
- 'D:\ComfyUI'
|
|
161
|
-
```
|
|
102
|
+
`comfyui` section of `cordis.yml` (most is editable in the settings page):
|
|
162
103
|
|
|
163
104
|
| Key | Default | Description |
|
|
164
105
|
| --- | --- | --- |
|
|
165
|
-
| `baseUrl` | `http://127.0.0.1:8188` | ComfyUI
|
|
166
|
-
| `apiKeyEnv` | `COMFYUI_API_KEY` |
|
|
167
|
-
| `
|
|
168
|
-
| `
|
|
169
|
-
| `
|
|
170
|
-
| `
|
|
171
|
-
| `
|
|
172
|
-
| `dataDir` | *(DSH data dir)* | Where the workflow library and asset index live (`$DSH_HOME/data/dsh-comfyui` by default) |
|
|
173
|
-
| `maxAssets` | `200` | Max entries kept in the asset index |
|
|
174
|
-
| `mediaHost` | `''` (auto-detect) | External base URL for generated media (e.g. `http://192.168.1.5:3080`); empty auto-uses the origin the browser actually reaches this server with |
|
|
175
|
-
| `outputDir` | `''` (inferred) | ComfyUI's output directory on this machine, used to locate files when deleting an asset; empty infers it from the paths ComfyUI reports, and deletion falls back to removing the index record when it cannot (e.g. a remote ComfyUI) |
|
|
176
|
-
| `comfyuiDirs` | `[]` | Local ComfyUI install root(s) (multiple allowed: mapped dirs / multiple installs). The agent reads them via `env.comfyuiDirs` from `comfyui_workflow list` to locate models, custom nodes and the TTS-Audio-Suite voice library directly |
|
|
177
|
-
|
|
178
|
-
## Roadmap & design boundaries
|
|
179
|
-
|
|
180
|
-
Confirmed scope decisions for this phase:
|
|
181
|
-
|
|
182
|
-
- **Image-to-video / reference-to-video / audio variants** are not plugin-side features: they share the same upload node as image-to-image, so any such workflow (extracted or imported) works as-is. Add the workflow, not plugin code.
|
|
183
|
-
- **No front-end parameter presets/favorites.** Advanced customization happens in the workflow editor (edit parameter defaults, or add an advanced parameter for any node input). This keeps one source of truth.
|
|
184
|
-
- **Model-strength knobs** (e.g. `ref_boost`) are handled through the advanced-parameter mechanism: expose the node input, label its effect, and the agent can tune it per run.
|
|
185
|
-
- **Planned**: auto-commit of run parameters — after a successful run, save the used parameter values as that workflow's new defaults, so the next run opens with the previous session's values instead of the authored ones.
|
|
186
|
-
|
|
187
|
-
## Security
|
|
188
|
-
|
|
189
|
-
- The tools only ever connect to the **configured** `baseUrl` — the agent cannot name arbitrary targets (SSRF containment).
|
|
190
|
-
- The API key lives on the host (credentials store / environment), resolved per request; `/comfyui/config` reports only `hasApiKey`.
|
|
191
|
-
- Media is capped by size; config writes require same-origin requests.
|
|
192
|
-
- Workflows extracted from ComfyUI are validated (non-empty `class_type`, object inputs, zero `node_errors` on the server) before they are stored.
|
|
193
|
-
- Headless profiles without a web server keep the tools and skip the routes silently.
|
|
194
|
-
|
|
195
|
-
## Architecture
|
|
196
|
-
|
|
197
|
-
A single npm package with two halves, following the DH plugin conventions:
|
|
198
|
-
|
|
199
|
-
- `src/index.ts` — host entry: `inject: ['tools']`; registers the tools and the companion skill (`ctx.skills.register`, optional service), and mounts routes + media proxy on a `webServer` sub-fiber (`ctx.inject`) so concurrent entry settling can never skip the mounts.
|
|
200
|
-
- `src/comfyui.ts` — minimal ComfyUI HTTP client (queue prompt, poll history, object_info, system_stats, interrupt, view download, userdata list/read).
|
|
201
|
-
- `src/analyze.ts` — canvas analysis: connected components over active nodes, group membership, dangling/isolated nodes, bypassed counts.
|
|
202
|
-
- `src/convert.ts` — graph → API extraction: rewires links (Reroute / bypass pass-through), derives widget order from the graph's own input array plus object_info (including `control_after_generate` and dynamic sub-widgets), inlines primitive values, drops stale slot references with a warning, and fails loudly when a required input was never wired.
|
|
203
|
-
- `src/skill.ts` — the `dsh-comfyui-workflows` companion skill body.
|
|
204
|
-
- `src/params.ts` — parameter application: fills an unset image parameter with the load-area source image, auto-matches `width`/`height` to the source's recorded size, and re-syncs DynamicCombo parent/child pairs.
|
|
205
|
-
- `src/store.ts` — the workflow library and asset index on disk (`workflows.json` + `assets.json`), plus the load-area records (`current-image.json`, `media-sizes.json`, `media-hashes.json`).
|
|
206
|
-
- `src/queue.ts` — tracks prompts the plugin queued and moves completed ones into the asset index (sweep-on-read, no timers).
|
|
207
|
-
- `src/tools.ts` — `ToolDefinition`s registered through `ctx.tools.register`; results carry `presentationMeta` so the client card renders from the session log.
|
|
208
|
-
- `src/routes.ts` — same-origin HTTP routes for the panel (config, workflows, ComfyUI-side graphs + analyze/extract, assets, queue, run, load area, upload with hash dedup + size recording).
|
|
209
|
-
- `src/client/` — browser half: the `shell.overlay` right-docked panel + `sidebar.footer.action` trigger, the `tool.call.toolview` card (key `comfyui_run`), and the `settings.section` page (id `comfyui`).
|
|
210
|
-
- `cordis.patch.yml` — the `dsh.bundle.patch` layer that inserts the `comfyui` row into a profile.
|
|
211
|
-
|
|
212
|
-
## Development
|
|
106
|
+
| `baseUrl` | `http://127.0.0.1:8188` | ComfyUI server address |
|
|
107
|
+
| `apiKeyEnv` | `COMFYUI_API_KEY` | Optional API key env var / credential name |
|
|
108
|
+
| `dataDir` | *(DSH data dir)* | Where the workflow library and asset index live |
|
|
109
|
+
| `comfyuiDirs` | `[]` | Local ComfyUI install dirs (multiple allowed); the agent locates models, custom nodes, TTS voice libraries through these |
|
|
110
|
+
| `outputDir` | `''` (inferred) | ComfyUI output dir (used to locate files when deleting assets) |
|
|
111
|
+
| `mediaHost` | `''` (auto) | External base URL for generated media |
|
|
112
|
+
| `skillsDir` | `''` (default `dataDir/skills`) | Skill pack root (absolute path; a synced folder or VCS works) |
|
|
213
113
|
|
|
214
|
-
|
|
215
|
-
pnpm install
|
|
216
|
-
npm run typecheck # host + client
|
|
217
|
-
npm run build # tsc (host lib/) + tsdown (client bundle)
|
|
218
|
-
npm pack --dry-run # inspect the publish contents
|
|
219
|
-
```
|
|
114
|
+
## Requirements
|
|
220
115
|
|
|
221
|
-
|
|
116
|
+
- DeepSeek Harness (`web` / `desktop` profile)
|
|
117
|
+
- A running [ComfyUI](https://github.com/comfystack/ComfyUI) server (default `http://127.0.0.1:8188`)
|
|
118
|
+
- The `video` template needs [ComfyUI-WanVideoWrapper](https://github.com/kijai/ComfyUI-WanVideoWrapper) and Wan 2.1 models
|
|
222
119
|
|
|
223
120
|
## License
|
|
224
121
|
|
|
225
|
-
MIT
|
|
122
|
+
MIT
|