comfyui-mcp 0.3.1 → 0.3.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-sections.d.ts","sourceRoot":"","sources":["../../src/services/workflow-sections.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGpE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,KAAK,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;KAAE,CAAC,CAAC;IAChE,QAAQ,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;KAAE,CAAC,CAAC;CAChE;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACnC,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC5B;AAaD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQ9D;AAeD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,WAAW,EAAE,CAgCxE;AAuDD,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,YAAY,EACtB,UAAU,EAAE,UAAU,GACrB,eAAe,CA+KjB"}
1
+ {"version":3,"file":"workflow-sections.d.ts","sourceRoot":"","sources":["../../src/services/workflow-sections.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGpE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,KAAK,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;KAAE,CAAC,CAAC;IAChE,QAAQ,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;KAAE,CAAC,CAAC;CAChE;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACnC,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC5B;AA8BD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA2B9D;AAeD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,WAAW,EAAE,CAiCxE;AAuDD,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,YAAY,EACtB,UAAU,EAAE,UAAU,GACrB,eAAe,CA+KjB"}
@@ -4,18 +4,52 @@ const CATEGORY_ALIASES = {
4
4
  _for_testing: "utility",
5
5
  api: "utility",
6
6
  utils: "utility",
7
+ // Custom node pack categories
8
+ bootleg: "loading", // ComfyUI-GGUF (UNET/CLIP loaders)
9
+ gguf: "loading", // gguf pack (CLIP loaders)
10
+ rgthree: "loading", // rgthree (Lora Loader Stack, etc.)
11
+ seedvr2: "image", // SeedVR2 (video upscaler)
12
+ "video helper suite": "output", // VHS (Video Combine)
7
13
  };
8
14
  // Meta-categories where the second level is more meaningful
9
15
  const META_CATEGORIES = new Set(["advanced"]);
16
+ // Known core pipeline section names
17
+ const KNOWN_SECTIONS = new Set([
18
+ "loading", "conditioning", "sampling", "latent",
19
+ "image", "output", "mask", "utility",
20
+ ]);
21
+ // Strip emoji and special characters from a category string
22
+ function cleanCategory(category) {
23
+ return category.replace(/[^\p{L}\p{N}\s/\-_]/gu, "").trim();
24
+ }
10
25
  // Normalize a ComfyUI category string to a top-level section name
11
26
  export function normalizeCategoryName(category) {
12
- const parts = category.split("/").map((p) => p.toLowerCase().trim());
27
+ const cleaned = cleanCategory(category);
28
+ const parts = cleaned.split("/").map((p) => p.toLowerCase().trim());
13
29
  // For meta-categories like "advanced/loaders", use the second level
14
30
  let key = parts[0];
15
31
  if (META_CATEGORIES.has(key) && parts.length > 1) {
16
32
  key = parts[1];
17
33
  }
18
- return CATEGORY_ALIASES[key] ?? key;
34
+ // Check direct alias
35
+ const aliased = CATEGORY_ALIASES[key];
36
+ if (aliased)
37
+ return aliased;
38
+ // If key is already a known section, use it
39
+ if (KNOWN_SECTIONS.has(key))
40
+ return key;
41
+ // Check if any sub-part of the category path is a known section or has an alias
42
+ // e.g., "KJNodes/image" → sub-part "image" is known
43
+ // e.g., "GetSetNode_Pro/loaders" → sub-part "loaders" aliases to "loading"
44
+ for (let i = 1; i < parts.length; i++) {
45
+ const part = parts[i];
46
+ if (CATEGORY_ALIASES[part])
47
+ return CATEGORY_ALIASES[part];
48
+ if (KNOWN_SECTIONS.has(part))
49
+ return part;
50
+ }
51
+ // Fall back to the cleaned key
52
+ return key;
19
53
  }
20
54
  // Get/Set node class types we recognize
21
55
  const GET_NODE_TYPES = new Set(["GetNode", "PRO_GetNode", "SetNode_GetNode"]);
@@ -32,15 +66,16 @@ export function resolveGetSetPairs(workflow) {
32
66
  const getters = new Map(); // key -> node IDs
33
67
  for (const [id, node] of Object.entries(workflow)) {
34
68
  if (isSetNode(node.class_type)) {
35
- const key = node._meta?.title ??
36
- node.inputs.Constant ??
69
+ // Prefer Constant (the actual wire key) over title (which may have "Set_" prefix)
70
+ const key = node.inputs.Constant ??
71
+ node._meta?.title ??
37
72
  "";
38
73
  if (key)
39
74
  setters.set(key, id);
40
75
  }
41
76
  else if (isGetNode(node.class_type)) {
42
- const key = node._meta?.title ??
43
- node.inputs.Constant ??
77
+ const key = node.inputs.Constant ??
78
+ node._meta?.title ??
44
79
  "";
45
80
  if (key) {
46
81
  if (!getters.has(key))
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-sections.js","sourceRoot":"","sources":["../../src/services/workflow-sections.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow-sections.js","sourceRoot":"","sources":["../../src/services/workflow-sections.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "comfyui-mcp",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "description": "MCP server for ComfyUI — workflow execution, visualization, composition, registry, and skill generation",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,27 +0,0 @@
1
- name: CI
2
-
3
- on:
4
- pull_request:
5
- branches: [main]
6
- push:
7
- branches: [main]
8
-
9
- jobs:
10
- build:
11
- runs-on: ubuntu-latest
12
- strategy:
13
- matrix:
14
- os: [ubuntu-latest, windows-latest, macos-latest]
15
- name: Build (${{ matrix.os }})
16
- steps:
17
- - uses: actions/checkout@v4
18
-
19
- - uses: actions/setup-node@v4
20
- with:
21
- node-version: 22
22
- cache: npm
23
-
24
- - run: npm ci
25
- - run: npm run lint
26
- - run: npm run build
27
- - run: npm test
@@ -1,34 +0,0 @@
1
- name: Release
2
-
3
- on:
4
- push:
5
- tags:
6
- - "v*"
7
-
8
- permissions: {}
9
-
10
- jobs:
11
- publish:
12
- runs-on: ubuntu-latest
13
- permissions:
14
- id-token: write
15
- contents: write
16
- steps:
17
- - uses: actions/checkout@v4
18
-
19
- - uses: actions/setup-node@v4
20
- with:
21
- node-version: 24
22
- registry-url: https://registry.npmjs.org
23
-
24
- - run: npm ci
25
- - run: npm run build
26
- - run: npm test
27
-
28
- - name: Publish to npm
29
- run: npm publish --provenance --access public
30
-
31
- - name: Create GitHub Release
32
- uses: softprops/action-gh-release@v2
33
- with:
34
- generate_release_notes: true
@@ -1,457 +0,0 @@
1
- # Generation Tracker & Community Settings
2
-
3
- ## Overview
4
-
5
- A local SQLite database that tracks every generation's settings, counts reuse,
6
- and optionally shares anonymized public-LoRA settings to a Cloudflare backend.
7
- The MCP server queries the local DB to suggest "what worked before" when building
8
- new workflows, and can also fetch community-aggregated settings.
9
-
10
- ---
11
-
12
- ## Architecture
13
-
14
- ```
15
- ┌─────────────────────────────────────────────────────────────┐
16
- │ ComfyUI MCP Server │
17
- │ │
18
- │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
19
- │ │ Workflow │───▶│ Generation │───▶│ Settings │ │
20
- │ │ Executor │ │ Tracker │ │ Advisor │ │
21
- │ │ (existing) │ │ (new) │ │ (new) │ │
22
- │ └──────────────┘ └──────┬───────┘ └──────┬───────┘ │
23
- │ │ │ │
24
- │ ┌──────▼───────┐ ┌─────▼────────┐ │
25
- │ │ SQLite DB │ │ Community │ │
26
- │ │ (local) │ │ API Client │ │
27
- │ │ better- │ │ (optional) │ │
28
- │ │ sqlite3 │ └─────┬────────┘ │
29
- │ └──────────────┘ │ │
30
- └─────────────────────────────────────────────────┼──────────┘
31
-
32
- ┌───────▼─────────┐
33
- │ Cloudflare │
34
- │ Workers + D1 │
35
- │ (community API) │
36
- └─────────────────┘
37
- ```
38
-
39
- ---
40
-
41
- ## Local Database: `generations.db`
42
-
43
- Location: `<comfyui_path>/comfyui-mcp/generations.db`
44
- (Lives alongside the user's ComfyUI data, gitignored.)
45
-
46
- ### Schema
47
-
48
- ```sql
49
- -- Core generation log
50
- CREATE TABLE generations (
51
- id INTEGER PRIMARY KEY AUTOINCREMENT,
52
- created_at TEXT NOT NULL DEFAULT (datetime('now')),
53
-
54
- -- Settings fingerprint (SHA256 of canonical JSON of tracked fields)
55
- settings_hash TEXT NOT NULL,
56
-
57
- -- Model identification (by content hash, not filename)
58
- model_family TEXT NOT NULL, -- 'qwen_image', 'sdxl', 'flux', etc.
59
- model_hash TEXT NOT NULL, -- AutoV2 (first 10 chars of SHA256) of checkpoint/unet
60
- model_name TEXT, -- checkpoint/unet filename (for full-text search, not part of hash)
61
- preset_name TEXT, -- from model-settings.json, or 'custom'
62
-
63
- -- Sampler settings
64
- sampler TEXT NOT NULL,
65
- scheduler TEXT NOT NULL,
66
- steps INTEGER NOT NULL,
67
- cfg REAL NOT NULL,
68
- denoise REAL DEFAULT 1.0,
69
- shift REAL, -- auraflow_shift for Qwen
70
-
71
- -- Resolution (tracked per-generation, NOT part of settings_hash)
72
- width INTEGER NOT NULL,
73
- height INTEGER NOT NULL,
74
-
75
- -- LoRA (nullable — not all gens use LoRAs)
76
- lora_hash TEXT, -- AutoV2 of LoRA file (content-addressed)
77
- lora_name TEXT, -- LoRA filename (for full-text search, not part of hash)
78
- lora_strength REAL,
79
- lora_civitai_id INTEGER, -- NULL = private/unknown, populated after hash lookup
80
-
81
- -- Satisfaction signal
82
- -- Implicit: if the user runs the same settings_hash again, we increment reuse_count
83
- -- Explicit: user can thumbs-up/down via MCP tool (future)
84
- reuse_count INTEGER NOT NULL DEFAULT 1,
85
-
86
- -- Negative prompt hash (for dedup, not stored in full)
87
- neg_prompt_hash TEXT
88
- );
89
-
90
- -- Fast lookups
91
- CREATE INDEX idx_gen_settings_hash ON generations(settings_hash);
92
- CREATE INDEX idx_gen_model_family ON generations(model_family);
93
- CREATE INDEX idx_gen_model_hash ON generations(model_hash);
94
- CREATE INDEX idx_gen_lora_hash ON generations(lora_hash);
95
- CREATE INDEX idx_gen_lora_civitai ON generations(lora_civitai_id);
96
- CREATE INDEX idx_gen_created ON generations(created_at);
97
-
98
- -- File hash cache (avoid re-hashing large .safetensors files)
99
- -- Covers both models (checkpoints, unets) and LoRAs.
100
- -- Keyed on filename + size + mtime — if any change, re-hash.
101
- CREATE TABLE file_hashes (
102
- filename TEXT PRIMARY KEY, -- basename of the file
103
- file_path TEXT NOT NULL, -- full path (local only, never shared)
104
- file_size INTEGER NOT NULL,
105
- file_mtime TEXT NOT NULL,
106
- sha256 TEXT NOT NULL,
107
- autov2 TEXT NOT NULL, -- sha256[:10].toUpperCase()
108
- file_type TEXT NOT NULL, -- 'checkpoint' | 'unet' | 'lora' | 'vae'
109
- civitai_id INTEGER, -- NULL = not found / not checked
110
- civitai_name TEXT,
111
- civitai_model_id INTEGER, -- parent model ID on CivitAI
112
- checked_at TEXT -- last time we queried CivitAI
113
- );
114
- ```
115
-
116
- ### Settings Hash
117
-
118
- The `settings_hash` is a SHA256 of a canonical JSON string containing only
119
- the **settings identity fields**, sorted alphabetically. This is what defines
120
- "the same combo" — resolution is intentionally excluded because the same
121
- sampler/steps/CFG combo works across resolutions and we want those to count
122
- together.
123
-
124
- Models and LoRAs are identified by their **AutoV2 content hash** (first 10 chars
125
- of SHA256), not filenames. This means renamed files, different quantizations of
126
- the same weights, or the same model downloaded from different sources all map to
127
- the same identity.
128
-
129
- ```json
130
- {
131
- "cfg": 4.0,
132
- "denoise": 1.0,
133
- "lora_hash": "A1B2C3D4E5",
134
- "lora_strength": 1.0,
135
- "model_family": "qwen_image",
136
- "model_hash": "F6G7H8I9J0",
137
- "sampler": "euler",
138
- "scheduler": "simple",
139
- "shift": 3.1,
140
- "steps": 4
141
- }
142
- ```
143
-
144
- **Excluded from hash** (tracked per-row but not part of the fingerprint):
145
- - `width`, `height` — resolution is a per-generation choice
146
- - `model_name`, `lora_name` — display names, not identity
147
- - `preset_name` — informational only
148
- - `neg_prompt_hash` — prompt content is never part of settings identity
149
-
150
- When a generation runs with an already-seen `settings_hash`, we UPDATE
151
- `reuse_count += 1` and `created_at` to the latest timestamp instead of inserting
152
- a duplicate row. This keeps the DB compact and gives us a natural popularity signal.
153
-
154
- ---
155
-
156
- ## File Identification Flow
157
-
158
- All models (checkpoints, UNETs) and LoRAs go through the same hashing pipeline.
159
- The `file_hashes` table caches results so we only compute SHA256 once per file version.
160
-
161
- ```
162
- 1. Workflow references a file → extract filename + resolve full path
163
- 2. stat() the file → get size + mtime
164
- 3. Check file_hashes table (by filename + size + mtime)
165
- ├─ Cache hit → use cached autov2 / civitai_id
166
- └─ Cache miss →
167
- a. Compute SHA256 of the .safetensors file
168
- b. Derive AutoV2 = sha256[:10].toUpperCase()
169
- c. Query CivitAI: GET /api/v1/model-versions/by-hash/{autov2}
170
- ├─ Found → store civitai_id, civitai_name, civitai_model_id
171
- └─ Not found → civitai_id = NULL (private/unknown)
172
- d. INSERT into file_hashes cache
173
- 4. Use autov2 as model_hash / lora_hash in the generations row
174
- 5. Use civitai_id for LoRA privacy filtering
175
- ```
176
-
177
- **Privacy rule**: Only generations where `lora_civitai_id IS NOT NULL` (or no LoRA)
178
- are eligible for community sharing. Private LoRAs never leave the machine.
179
-
180
- **Hashing note**: SHA256 of large safetensors files (2-12GB) takes 5-20 seconds.
181
- We run this in a worker thread and cache aggressively. The cache invalidates only
182
- when file size or mtime changes (renamed files keep their hash).
183
-
184
- ---
185
-
186
- ## Settings Advisor (MCP Hook)
187
-
188
- When building a new workflow, the MCP server queries the local DB:
189
-
190
- ```sql
191
- -- "What worked well for this model?"
192
- -- Groups by settings_hash (resolution-agnostic), shows most popular combos
193
- SELECT sampler, scheduler, steps, cfg, shift, denoise,
194
- lora_hash, lora_name, lora_strength,
195
- model_hash, model_name,
196
- reuse_count, preset_name
197
- FROM generations
198
- WHERE model_family = ?
199
- ORDER BY reuse_count DESC, created_at DESC
200
- LIMIT 10;
201
-
202
- -- "What worked well for this specific LoRA?"
203
- SELECT sampler, scheduler, steps, cfg, shift, denoise,
204
- model_hash, model_name, reuse_count
205
- FROM generations
206
- WHERE lora_hash = ?
207
- ORDER BY reuse_count DESC
208
- LIMIT 10;
209
- ```
210
-
211
- The advisor returns the top settings to the LLM as context, letting it
212
- suggest proven combos to the user. Combined with model-settings.json presets,
213
- this creates a feedback loop: defaults → user experiments → local tracking →
214
- better suggestions.
215
-
216
- ---
217
-
218
- ## NPM Scripts
219
-
220
- ### `npm run generations:review`
221
-
222
- Interactive CLI that shows what would be shared:
223
-
224
- ```
225
- $ npm run generations:review
226
-
227
- === Generation Settings Ready to Share ===
228
-
229
- Model Family Sampler/Sched Steps CFG LoRA Uses
230
- ───────────── ──────────────── ───── ──── ──────────────────────────── ────
231
- qwen_image euler/simple 4 1.0 Lightning-4steps (CivitAI) 47
232
- qwen_image euler_a/beta 50 4.0 (none) 12
233
- sdxl dpmpp_2m/karras 25 6.5 (none) 8
234
- illustrious euler_a/simple 22 4.5 (none) 5
235
-
236
- 4 entries (private LoRAs excluded)
237
-
238
- Share these with the community? [y/N]
239
- ```
240
-
241
- ### `npm run generations:stats`
242
-
243
- Local-only stats view:
244
-
245
- ```
246
- $ npm run generations:stats
247
-
248
- Total generations tracked: 234
249
- Unique setting combos: 18
250
- Most used: qwen_image / euler/simple / 4 steps (47 uses)
251
- Models: qwen_image (142), sdxl (52), illustrious (28), flux (12)
252
- ```
253
-
254
- ---
255
-
256
- ## Community Backend (Cloudflare)
257
-
258
- ### Stack
259
-
260
- - **Cloudflare Workers** — API endpoints (free tier: 100k req/day)
261
- - **Cloudflare D1** — SQLite-compatible edge database (free tier: 5M reads/day, 100k writes/day)
262
- - **Rate limiting** — Cloudflare's built-in rate limiting rules
263
-
264
- ### Endpoints
265
-
266
- #### `POST /api/v1/settings/submit`
267
-
268
- Submit anonymized generation settings.
269
-
270
- ```json
271
- // Request
272
- {
273
- "client_version": "0.2.0",
274
- "entries": [
275
- {
276
- "settings_hash": "abc123...",
277
- "model_family": "qwen_image",
278
- "model_hash": "F6G7H8I9J0",
279
- "model_name": "qwen_image_2512_fp8_e4m3fn.safetensors",
280
- "model_civitai_id": 789012,
281
- "sampler": "euler",
282
- "scheduler": "simple",
283
- "steps": 4,
284
- "cfg": 1.0,
285
- "denoise": 1.0,
286
- "shift": 3.1,
287
- "lora_hash": "A1B2C3D4E5",
288
- "lora_name": "Qwen-Image-Lightning-4steps-V1.0.safetensors",
289
- "lora_civitai_id": 123456,
290
- "lora_strength": 1.0,
291
- "reuse_count": 47
292
- }
293
- ]
294
- }
295
-
296
- // Response
297
- { "accepted": 1, "thank_you": true }
298
- ```
299
-
300
- **What is sent**: content hashes (AutoV2), CivitAI IDs, sampler params, reuse counts.
301
-
302
- **What is NOT sent**: prompts, negative prompts, image data, filenames, file paths,
303
- resolutions, private LoRA/model hashes (no CivitAI match), usernames, IP-derived
304
- location, timestamps.
305
-
306
- #### `GET /api/v1/settings/search`
307
-
308
- Query community-aggregated settings.
309
-
310
- ```
311
- GET /api/v1/settings/search?model_family=qwen_image&lora_civitai_id=123456
312
-
313
- // Response
314
- {
315
- "results": [
316
- {
317
- "model_family": "qwen_image",
318
- "model_hash": "F6G7H8I9J0",
319
- "model_name": "qwen_image_2512_fp8_e4m3fn.safetensors",
320
- "model_civitai_id": 789012,
321
- "sampler": "euler",
322
- "scheduler": "simple",
323
- "steps": 4,
324
- "cfg": 1.0,
325
- "denoise": 1.0,
326
- "shift": 3.1,
327
- "lora_hash": "A1B2C3D4E5",
328
- "lora_name": "Qwen-Image-Lightning-4steps-V1.0.safetensors",
329
- "lora_civitai_id": 123456,
330
- "lora_strength": 1.0,
331
- "total_uses": 1247,
332
- "unique_users": 89,
333
- "avg_reuse": 14.0
334
- }
335
- ],
336
- "total": 1,
337
- "cache_ttl": 3600
338
- }
339
- ```
340
-
341
- Searchable by: `model_family`, `model_hash`, `model_civitai_id`, `model_name`,
342
- `lora_hash`, `lora_civitai_id`, `lora_name`, `sampler`, `scheduler`.
343
- All filters are AND-combined. Name fields support `LIKE` / substring matching
344
- (e.g. `?model_name=copax` matches "CopaxTimelessV11.safetensors").
345
-
346
- Rate limit: 60 req/min per IP.
347
-
348
- #### `GET /api/v1/settings/popular`
349
-
350
- Top settings across all users, filterable.
351
-
352
- ```
353
- GET /api/v1/settings/popular?model_family=sdxl&limit=10
354
-
355
- // Response — same shape as search, ordered by total_uses DESC
356
- ```
357
-
358
- ### D1 Schema (Cloudflare)
359
-
360
- ```sql
361
- CREATE TABLE community_settings (
362
- id INTEGER PRIMARY KEY AUTOINCREMENT,
363
- settings_hash TEXT NOT NULL UNIQUE,
364
-
365
- -- Identity (hashes for dedup, names for full-text search)
366
- model_family TEXT NOT NULL,
367
- model_hash TEXT NOT NULL, -- AutoV2 of checkpoint/unet
368
- model_name TEXT, -- e.g. "qwen_image_2512_fp8_e4m3fn.safetensors"
369
- model_civitai_id INTEGER, -- CivitAI model version ID
370
- lora_hash TEXT, -- AutoV2 of LoRA (NULL if none)
371
- lora_name TEXT, -- e.g. "Qwen-Image-Lightning-4steps-V1.0.safetensors"
372
- lora_civitai_id INTEGER, -- CivitAI model version ID
373
- lora_strength REAL,
374
-
375
- -- Settings
376
- sampler TEXT NOT NULL,
377
- scheduler TEXT NOT NULL,
378
- steps INTEGER NOT NULL,
379
- cfg REAL NOT NULL,
380
- denoise REAL,
381
- shift REAL,
382
-
383
- -- Aggregates
384
- total_uses INTEGER NOT NULL DEFAULT 0,
385
- unique_users INTEGER NOT NULL DEFAULT 0,
386
- first_seen TEXT NOT NULL DEFAULT (datetime('now')),
387
- last_seen TEXT NOT NULL DEFAULT (datetime('now'))
388
- );
389
-
390
- CREATE INDEX idx_cs_model ON community_settings(model_family);
391
- CREATE INDEX idx_cs_model_hash ON community_settings(model_hash);
392
- CREATE INDEX idx_cs_lora_hash ON community_settings(lora_hash);
393
- CREATE INDEX idx_cs_lora_civ ON community_settings(lora_civitai_id);
394
- CREATE INDEX idx_cs_popular ON community_settings(total_uses DESC);
395
- ```
396
-
397
- On submit, the worker does an UPSERT keyed on `settings_hash`:
398
- - If new: INSERT with `total_uses = reuse_count`, `unique_users = 1`
399
- - If exists: `total_uses += reuse_count`, `unique_users += 1`
400
-
401
- ---
402
-
403
- ## MCP Tools (New)
404
-
405
- ### `generation_log`
406
- Called automatically when `enqueue_workflow` is invoked.
407
- Extracts settings from the executed workflow and logs to SQLite.
408
- Not exposed to the user — internal hook.
409
-
410
- ### `suggest_settings`
411
- ```
412
- Input: { model_family: "qwen_image", use_case?: "portrait" | "landscape" | ... }
413
- Output: Top local + community settings for the given model, ranked by reuse.
414
- ```
415
-
416
- ### `generation_stats`
417
- ```
418
- Input: { model_family?: string }
419
- Output: Local generation statistics summary.
420
- ```
421
-
422
- ---
423
-
424
- ## Implementation Order
425
-
426
- ### Phase 1: Local tracking (no network)
427
- 1. Add `better-sqlite3` dependency
428
- 2. Create `src/services/generation-tracker.ts` — DB init, log, query
429
- 3. Create `src/services/lora-identifier.ts` — SHA256 hashing + cache
430
- 4. Hook into workflow executor — log after successful run
431
- 5. Add `suggest_settings` MCP tool
432
- 6. Add `npm run generations:stats` script
433
-
434
- ### Phase 2: CivitAI identification
435
- 7. Add CivitAI hash lookup in lora-identifier
436
- 8. Cache results in `lora_hashes` table
437
- 9. Filter shareable vs private in generation log
438
-
439
- ### Phase 3: Community sharing
440
- 10. Stand up Cloudflare Worker + D1
441
- 11. Add `npm run generations:review` script (preview + confirm)
442
- 12. Add submit endpoint client in MCP server
443
- 13. Add `search_community_settings` MCP tool
444
- 14. Rate limiting + privacy review
445
-
446
- ---
447
-
448
- ## Privacy Guarantees
449
-
450
- 1. **Opt-in only** — Nothing is shared without explicit `npm run generations:review` confirmation
451
- 2. **No prompts** — Text prompts and negative prompts are never stored in shareable form
452
- 3. **No images** — No generated images or thumbnails
453
- 4. **No private LoRAs** — Only LoRAs with a verified CivitAI hash are included
454
- 5. **No PII** — No usernames, paths, IPs stored server-side (Cloudflare Workers don't log by default)
455
- 6. **Local-first** — The local DB works fully offline; community features are additive
456
- 7. **Reviewable** — Users see exactly what will be sent before confirming
457
- 8. **No tracking** — No analytics cookies, no device fingerprinting, no session tracking