comfyui-mcp 0.52.0 → 0.52.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.
Files changed (84) hide show
  1. package/README.md +0 -7
  2. package/dist/boot.js +41 -0
  3. package/dist/boot.js.map +1 -1
  4. package/dist/comfyui/client.js +6 -27
  5. package/dist/comfyui/client.js.map +1 -1
  6. package/dist/comfyui/cloud-client.js +9 -1
  7. package/dist/comfyui/cloud-client.js.map +1 -1
  8. package/dist/comfyui/upload-target.js +38 -0
  9. package/dist/comfyui/upload-target.js.map +1 -0
  10. package/dist/orchestrator/agent-backend.js.map +1 -1
  11. package/dist/orchestrator/blind-native-gate.js +138 -0
  12. package/dist/orchestrator/blind-native-gate.js.map +1 -0
  13. package/dist/orchestrator/claude-backend.js +172 -50
  14. package/dist/orchestrator/claude-backend.js.map +1 -1
  15. package/dist/orchestrator/codex-backend.js +67 -11
  16. package/dist/orchestrator/codex-backend.js.map +1 -1
  17. package/dist/orchestrator/grok-backend.js +24 -14
  18. package/dist/orchestrator/grok-backend.js.map +1 -1
  19. package/dist/orchestrator/index.js +23 -1
  20. package/dist/orchestrator/index.js.map +1 -1
  21. package/dist/orchestrator/mcp-session-health.js +88 -7
  22. package/dist/orchestrator/mcp-session-health.js.map +1 -1
  23. package/dist/orchestrator/panel-agent.js +159 -6
  24. package/dist/orchestrator/panel-agent.js.map +1 -1
  25. package/dist/orchestrator/panel-tools.js +62 -14
  26. package/dist/orchestrator/panel-tools.js.map +1 -1
  27. package/dist/orchestrator/preview-budget.js +41 -0
  28. package/dist/orchestrator/preview-budget.js.map +1 -0
  29. package/dist/orchestrator/session-store.js +43 -0
  30. package/dist/orchestrator/session-store.js.map +1 -1
  31. package/dist/orchestrator/turn-origins.js +68 -26
  32. package/dist/orchestrator/turn-origins.js.map +1 -1
  33. package/dist/services/download-cache.js +17 -4
  34. package/dist/services/download-cache.js.map +1 -1
  35. package/dist/services/download-jobs.js +136 -1
  36. package/dist/services/download-jobs.js.map +1 -1
  37. package/dist/services/extra-paths.js +57 -4
  38. package/dist/services/extra-paths.js.map +1 -1
  39. package/dist/services/image-management.js +9 -2
  40. package/dist/services/image-management.js.map +1 -1
  41. package/dist/services/listener-ownership.js +17 -5
  42. package/dist/services/listener-ownership.js.map +1 -1
  43. package/dist/services/model-resolver.js +106 -45
  44. package/dist/services/model-resolver.js.map +1 -1
  45. package/dist/services/node-management.js +85 -10
  46. package/dist/services/node-management.js.map +1 -1
  47. package/dist/services/process-control.js +110 -8
  48. package/dist/services/process-control.js.map +1 -1
  49. package/dist/services/queue-monitor.js +54 -7
  50. package/dist/services/queue-monitor.js.map +1 -1
  51. package/dist/services/queue-monitor.stall.test.js +86 -1
  52. package/dist/services/queue-monitor.stall.test.js.map +1 -1
  53. package/dist/services/registry-client.js +31 -18
  54. package/dist/services/registry-client.js.map +1 -1
  55. package/dist/services/ui-bridge.js +80 -0
  56. package/dist/services/ui-bridge.js.map +1 -1
  57. package/dist/services/workflow-settings-extractor.js +1 -1
  58. package/dist/services/workflow-settings-extractor.js.map +1 -1
  59. package/dist/tools/image-management.js +20 -6
  60. package/dist/tools/image-management.js.map +1 -1
  61. package/dist/tools/model-management.js +21 -2
  62. package/dist/tools/model-management.js.map +1 -1
  63. package/locales/ar/main.json +1 -0
  64. package/locales/en/main.json +1 -0
  65. package/locales/es/main.json +1 -0
  66. package/locales/fa/main.json +1 -0
  67. package/locales/fr/main.json +1 -0
  68. package/locales/ja/main.json +1 -0
  69. package/locales/ko/main.json +1 -0
  70. package/locales/pt-BR/main.json +1 -0
  71. package/locales/ru/main.json +1 -0
  72. package/locales/tr/main.json +1 -0
  73. package/locales/zh/main.json +1 -0
  74. package/locales/zh-TW/main.json +1 -0
  75. package/package.json +3 -5
  76. package/plugin/skills/model-registry/SKILL.md +1 -1
  77. package/scripts/check-docs-links.mjs +23 -0
  78. package/scripts/check-docs-mdx.mjs +71 -0
  79. package/scripts/smoke-install.mjs +10 -9
  80. package/dist/services/download-root-correspondence.js +0 -64
  81. package/dist/services/download-root-correspondence.js.map +0 -1
  82. package/model-settings.json +0 -509
  83. package/model-settings.user.jsonc.example +0 -97
  84. package/scripts/postinstall.mjs +0 -29
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
3
  * Release smoke test: pack the package exactly as `npm publish` would, install
4
- * that tarball into a clean throwaway project (which RUNS the postinstall hook),
5
- * and verify the published layout + entrypoint actually boot.
4
+ * that tarball into a clean throwaway project, and verify the published
5
+ * layout + entrypoint actually boot.
6
6
  *
7
7
  * Catches the class of bug that shipped in 0.17.0: a `files` allowlist that
8
- * dropped `scripts/` while `package.json` still declared
9
- * `postinstall: node scripts/postinstall.mjs` — so every `npm install` / `npx`
10
- * crashed on a missing file. Unit tests (`npm test`) never exercise the packed
11
- * tarball, so this is the gap. Run in CI and as a pre-publish gate.
8
+ * dropped `scripts/` while `package.json` still declared a lifecycle script
9
+ * pointing into it — so every `npm install` / `npx` crashed on a missing file.
10
+ * Unit tests (`npm test`) never exercise the packed tarball, so this is the
11
+ * gap. Run in CI and as a pre-publish gate.
12
12
  */
13
13
  import { execSync, spawn, spawnSync } from "node:child_process";
14
14
  import { mkdtempSync, writeFileSync, existsSync, readdirSync, readFileSync } from "node:fs";
@@ -67,18 +67,19 @@ const tgz = readdirSync(packDir).find((f) => f.endsWith(".tgz"));
67
67
  if (!tgz) throw new Error("npm pack produced no tarball");
68
68
  const tarball = join(packDir, tgz);
69
69
 
70
- // 2. Install the tarball in a clean project — this RUNS the postinstall hook.
70
+ // 2. Install the tarball in a clean project.
71
71
  const proj = mkdtempSync(join(tmpdir(), "cmcp-smoke-"));
72
72
  writeFileSync(
73
73
  join(proj, "package.json"),
74
74
  JSON.stringify({ name: "comfyui-mcp-smoke", private: true, version: "0.0.0" }),
75
75
  );
76
- // --foreground-scripts surfaces postinstall output; a crashing hook exits non-zero.
76
+ // --foreground-scripts surfaces dependency install-script output; a crashing
77
+ // script exits non-zero.
77
78
  run(`npm install --foreground-scripts --no-audit --no-fund "${tarball}"`, { cwd: proj });
78
79
 
79
80
  // 3. Verify the published layout is intact (files the runtime/install need).
80
81
  const pkg = join(proj, "node_modules", "comfyui-mcp");
81
- for (const f of ["dist/index.js", "scripts/postinstall.mjs", "package.json"]) {
82
+ for (const f of ["dist/index.js", "package.json"]) {
82
83
  if (!existsSync(join(pkg, f))) {
83
84
  console.error(`❌ published package is missing ${f}`);
84
85
  process.exit(1);
@@ -1,64 +0,0 @@
1
- /**
2
- * #1371 — a model was written into a DIFFERENT local ComfyUI installation than the one
3
- * serving the session.
4
- *
5
- * Connected to ComfyUI on `:8190` (`…\ComfyUI_H3`), the download streamed into
6
- * `…\ComfyUI\models` — a stale `COMFYUI_PATH` from another install — while visibility
7
- * was checked against the connected server.
8
- *
9
- * ## Why the existing guard did not catch it
10
- *
11
- * `model-resolver.ts` has refused divergent destinations since v0.49.4, and the reporter
12
- * was on 0.50.107 — newer — so the guard was present and did not fire. It proves
13
- * divergence from CONTENT: files on disk the running server does not list. With a sparse
14
- * or empty destination category (`vae`, here) there is nothing to compare.
15
- *
16
- * ## The evidence used, and one that was REFUTED first
17
- *
18
- * A first attempt refused when the destination fell outside the install root the server
19
- * names for itself. Review knocked that down, correctly: being outside the install root
20
- * does not mean the server cannot read it. `extra_model_paths.yaml` registers roots
21
- * elsewhere by design, `<install>/models` is routinely a junction to another drive, and
22
- * a container-mounted path and its host destination describe one directory through two
23
- * unrelated strings. #1474 — fixed the same day — is a Comfy Desktop install serving
24
- * models from a SHARED root outside its install directory; that guard would have refused
25
- * it outright.
26
- *
27
- * The right question is not "is this inside the install" but "does the connected server
28
- * read this tree", and `isUnderLiveModelRoots` already answers exactly that: it checks
29
- * the live primary models root AND live-registered extra roots, canonicalizes junctions
30
- * and symlinks through `realpath`, is category-scoped, and returns `undefined` for
31
- * UNKNOWN rather than folding it into "no".
32
- *
33
- * So this refuses on `inRoots === false` — demonstrably not read — and never on
34
- * `undefined`. That is the distinction the whole file exists to hold: the surrounding
35
- * code's own note records that every time "the server did not vouch for it" was treated
36
- * as "the server cannot read it", it produced another false refusal.
37
- */
38
- /**
39
- * The refusal for a destination the connected server demonstrably does not read.
40
- *
41
- * `inRoots` comes from `isUnderLiveModelRoots`: `false` means demonstrably outside every
42
- * tree the live server reads; `undefined` means only local configuration could answer,
43
- * which proves nothing and must NOT refuse.
44
- */
45
- export function divergentInstallRefusal(opts) {
46
- const { targetDir, inRoots, liveRoot, serverUrl } = opts;
47
- if (inRoots !== false)
48
- return null; // true = fine; undefined = unknown, never refuse
49
- if (!targetDir)
50
- return null;
51
- const where = liveRoot ? ` It reads models from "${liveRoot}" (and any extra roots it has registered).` : "";
52
- return (`NOT downloaded: the connected ComfyUI${serverUrl ? ` (${serverUrl})` : ""} does not ` +
53
- `read from "${targetDir}", so a model placed there would never be visible to it.` +
54
- `${where} This destination came from LOCAL CONFIGURATION — COMFYUI_PATH or the saved ` +
55
- `default workspace — not from the running server, and a COMFYUI_PATH left over from a ` +
56
- `different installation is the usual cause (#1371). Nothing was written.\n\n` +
57
- `This is a demonstrated mismatch, not an unverified one: the destination was checked ` +
58
- `against the roots the live server actually reads, including any registered through ` +
59
- `extra_model_paths.yaml, and with junctions and symlinks resolved. Point COMFYUI_PATH ` +
60
- `at the ComfyUI that is actually running, or launch that server with an absolute ` +
61
- `--base-directory, then retry. If you MEANT another install, download it there — ` +
62
- `writing here would report success for a model the connected server can never load.`);
63
- }
64
- //# sourceMappingURL=download-root-correspondence.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"download-root-correspondence.js","sourceRoot":"","sources":["../../src/services/download-root-correspondence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAMvC;IACC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IACzD,IAAI,OAAO,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC,CAAC,iDAAiD;IACrF,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5B,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,0BAA0B,QAAQ,4CAA4C,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7G,OAAO,CACL,wCAAwC,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,YAAY;QACtF,cAAc,SAAS,0DAA0D;QACjF,GAAG,KAAK,8EAA8E;QACtF,uFAAuF;QACvF,6EAA6E;QAC7E,sFAAsF;QACtF,qFAAqF;QACrF,uFAAuF;QACvF,kFAAkF;QAClF,kFAAkF;QAClF,oFAAoF,CACrF,CAAC;AACJ,CAAC"}
@@ -1,509 +0,0 @@
1
- {
2
- "$schema": "model-settings.schema.json",
3
- "_version": "0.2.0",
4
- "_description": "Community-maintained best settings for ComfyUI models. Merge order: defaults (this file) → user overrides (model-settings.user.json). PRs welcome!",
5
- "_updated": "2026-02-16",
6
- "_merge_strategy": "deep_merge_user_wins",
7
-
8
- "model_families": {
9
-
10
- "qwen_image": {
11
- "display_name": "Qwen Image (Base Architecture)",
12
- "architecture": "qwen_image",
13
- "clip_type": "qwen_image",
14
- "vae": "qwen_image_vae.safetensors",
15
- "prompt_style": "natural_language",
16
- "prompt_notes": "Use natural language, 1-3 sentences. Put text to render in quotes. 'photograph' > 'photorealistic'. Negative prompts: use NLP-style descriptions, not keyword spam.",
17
- "resolutions": {
18
- "_note": "Qwen Image operates at ~1.6 megapixels natively",
19
- "square": [1328, 1328],
20
- "portrait_3_4": [1104, 1472],
21
- "portrait_9_16": [928, 1664],
22
- "portrait_2_3": [1056, 1584],
23
- "landscape_4_3": [1472, 1104],
24
- "landscape_16_9": [1664, 928],
25
- "landscape_3_2": [1584, 1056],
26
- "ultrawide_portrait": [1536, 2048]
27
- },
28
-
29
- "presets": {
30
- "lightning_4step": {
31
- "description": "Fast 4-step with LightX2V lightning LoRA. Good general-purpose.",
32
- "steps": 4,
33
- "cfg": 1.0,
34
- "sampler": "euler",
35
- "scheduler": "simple",
36
- "denoise": 1.0,
37
- "auraflow_shift": 3.1,
38
- "lora": {
39
- "name": "Qwen-Image-Lightning-4steps-V1.0.safetensors",
40
- "strength": 1.0
41
- },
42
- "notes": "For 2511 edit models, use 2511-specific lightning LoRA."
43
- },
44
- "lightning_4step_2511_edit": {
45
- "description": "Fast 4-step specifically for 2511 edit model.",
46
- "steps": 4,
47
- "cfg": 1.0,
48
- "sampler": "euler",
49
- "scheduler": "simple",
50
- "denoise": 1.0,
51
- "lora": {
52
- "name": "Qwen-Image-Edit-2511-Lightning-4steps-V1.0-bf16.safetensors",
53
- "strength": 1.0
54
- },
55
- "notes": "Cannot combine with distilled model variant."
56
- },
57
- "lightning_8step": {
58
- "description": "Higher quality 8-step lightning. Better detail than 4-step.",
59
- "steps": 8,
60
- "cfg": 1.0,
61
- "sampler": "euler",
62
- "scheduler": "simple",
63
- "denoise": 1.0,
64
- "auraflow_shift": 3.1,
65
- "lora": {
66
- "name": "Qwen-Image-Lightning-8steps-V1.0.safetensors",
67
- "strength": 1.0
68
- }
69
- },
70
- "lightning_8step_character": {
71
- "description": "8-step lightning tuned for detailed character/portrait work.",
72
- "steps": 8,
73
- "cfg": 2.5,
74
- "sampler": "euler",
75
- "scheduler": "simple",
76
- "denoise": 1.0,
77
- "auraflow_shift": 3.1,
78
- "lora": {
79
- "name": "Qwen-Image-Lightning-8steps-V1.0.safetensors",
80
- "strength": 1.0
81
- },
82
- "notes": "CFG 2.5 gives better prompt adherence for character details (Imageized author examples)."
83
- },
84
- "standard": {
85
- "description": "Official full-quality settings from ComfyUI template.",
86
- "steps": 50,
87
- "cfg": 4.0,
88
- "sampler": "euler",
89
- "scheduler": "simple",
90
- "denoise": 1.0,
91
- "auraflow_shift": 3.1,
92
- "notes": "Official ComfyUI workflow template values. 30-50 steps work well."
93
- },
94
- "standard_golden": {
95
- "description": "Community-tested 'golden configuration' for best quality.",
96
- "steps": 50,
97
- "cfg": 4.5,
98
- "sampler": "euler",
99
- "scheduler": "simple",
100
- "denoise": 1.0,
101
- "auraflow_shift": 3.1,
102
- "notes": "Community consensus: CFG 4.5 + 50 steps for peak quality."
103
- },
104
- "standard_character_composition": {
105
- "description": "Optimized for multi-character scenes and complex compositions.",
106
- "steps": 30,
107
- "cfg": 4.0,
108
- "sampler": "euler_ancestral",
109
- "scheduler": "beta",
110
- "denoise": 1.0,
111
- "auraflow_shift": 3.1,
112
- "notes": "euler_ancestral + beta helps with character variety and scene coherence."
113
- }
114
- }
115
- },
116
-
117
- "qwen_image_2512": {
118
- "display_name": "Qwen Image 2512 (December 2025)",
119
- "inherits": "qwen_image",
120
- "unet": "qwen_image_2512_fp8_e4m3fn.safetensors",
121
- "clip": "qwen_2.5_vl_7b_fp8_scaled.safetensors",
122
- "vae": "qwen_image_vae.safetensors",
123
- "notes": "Latest official Qwen Image model. fp8 for 24GB VRAM. Inherits all qwen_image presets."
124
- },
125
-
126
- "qwen_image_2511_edit": {
127
- "display_name": "Qwen Image Edit 2511 (November 2025)",
128
- "inherits": "qwen_image",
129
- "unet": "qwen_image_edit_2511_bf16.safetensors",
130
- "clip": "qwen_2.5_vl_7b_fp8_scaled.safetensors",
131
- "vae": "qwen_image_vae.safetensors",
132
- "notes": "Optimized for image editing. bf16 precision. Use 2511-specific lightning LoRA.",
133
-
134
- "presets": {
135
- "edit_standard": {
136
- "description": "Full quality img2img editing.",
137
- "steps": 40,
138
- "cfg": 4.0,
139
- "sampler": "euler",
140
- "scheduler": "simple",
141
- "denoise": 0.75,
142
- "notes": "Denoise 0.5-0.8: lower = closer to input. Negative conditioning should be zeroed."
143
- }
144
- }
145
- },
146
-
147
- "qwen_finetuned": {
148
- "display_name": "Qwen Image Fine-tuned Models",
149
- "architecture": "qwen_image",
150
-
151
- "models": {
152
- "qwenUltimateRealism_v11": {
153
- "display_name": "Qwen Ultimate Realism v1.1",
154
- "author": "Imageized",
155
- "source": "https://civitai.com/models/2027494",
156
- "unet_path": "Qwen/imageized/qwenUltimateRealism_v11.safetensors",
157
- "clip": "qwen_2.5_vl_7b_fp8_scaled.safetensors",
158
- "vae": "qwen_image_vae.safetensors",
159
- "focus": "Product photography, hyper-realistic, e-commerce",
160
- "presets": {
161
- "author_quality": {
162
- "description": "Author's best quality settings.",
163
- "steps": 30,
164
- "cfg": 7.5,
165
- "sampler": "euler",
166
- "scheduler": "simple",
167
- "denoise": 1.0,
168
- "notes": "Steps 20-40, CFG 5-10 (sweet spot 7-8)."
169
- },
170
- "author_fast": {
171
- "steps": 4,
172
- "cfg": 1.0,
173
- "sampler": "euler",
174
- "scheduler": "simple",
175
- "lora": {
176
- "name": "Qwen-Image-Lightning-4steps-V1.0.safetensors",
177
- "strength": 1.01
178
- },
179
- "notes": "Author uses strength 1.01 specifically."
180
- }
181
- }
182
- },
183
-
184
- "copaxTimeless_qwenUltraRealistic": {
185
- "display_name": "CopaxTimeless Qwen Ultra Realistic",
186
- "author": "Copax",
187
- "source": "https://civitai.com/models/copaxTimeless",
188
- "unet_path": "Qwen/realistic/copaxTimeless_qwenUltraRealistic.safetensors",
189
- "clip": "qwen_2.5_vl_7b_fp8_scaled.safetensors",
190
- "vae": "qwen_image_vae.safetensors",
191
- "focus": "Ultra-realistic portraits and scenes",
192
- "presets": {
193
- "author_recommended": {
194
- "steps": 30,
195
- "cfg": 4.0,
196
- "sampler": "res_multistep",
197
- "scheduler": "sgm_uniform",
198
- "denoise": 1.0,
199
- "auraflow_shift": 3.1,
200
- "notes": "Consistently uses res_multistep + sgm_uniform. Steps 20/30/50 all work."
201
- }
202
- },
203
- "resolutions": [
204
- [1152, 1536], [992, 1776], [928, 1984], [1536, 2048]
205
- ]
206
- },
207
-
208
- "redcraftRedzimage_DX1": {
209
- "display_name": "RedCraft Redzimage DX1",
210
- "source": "https://civitai.com/models/958009",
211
- "unet_path": "redcraftRedzimageUpdatedJAN30_redzibDX1.safetensors",
212
- "loader": "CheckpointLoaderSimple",
213
- "focus": "Realistic generation (combined checkpoint)",
214
- "presets": {
215
- "distilled_fast": {
216
- "steps": 10,
217
- "cfg": 1.0,
218
- "sampler": "euler",
219
- "scheduler": "simple"
220
- },
221
- "standard": {
222
- "steps": 30,
223
- "cfg": 4.0,
224
- "sampler": "euler",
225
- "scheduler": "simple"
226
- }
227
- },
228
- "notes": "Combined checkpoint (UNET+CLIP+VAE). Use CheckpointLoaderSimple, not separate loaders."
229
- }
230
- }
231
- },
232
-
233
- "z_image": {
234
- "display_name": "Z-Image Family",
235
- "architecture": "z_image",
236
- "notes": "Must use Qwen tokenizer, not standard CLIP nodes.",
237
-
238
- "models": {
239
- "z_image_turbo": {
240
- "display_name": "Z-Image Turbo",
241
- "unet": "z_image_turbo_bf16.safetensors",
242
- "clip": "qwen_3_4b.safetensors",
243
- "vae": "z-image-ae.safetensors",
244
- "clip_type": "qwen_image",
245
- "presets": {
246
- "author_recommended": {
247
- "steps": 14,
248
- "cfg": 1.0,
249
- "sampler": "res_2s",
250
- "scheduler": "simple",
251
- "notes": "From CopaxTimeless author. Distilled CFG 1."
252
- },
253
- "beauty_fashion": {
254
- "steps": 10,
255
- "cfg": 1.0,
256
- "sampler": "euler_ancestral",
257
- "scheduler": "beta",
258
- "notes": "Smooth skin, ideal for beauty/fashion (560-image test)."
259
- },
260
- "sharpest": {
261
- "steps": 10,
262
- "cfg": 1.0,
263
- "sampler": "dpmpp_sde",
264
- "scheduler": "beta",
265
- "notes": "Sharpest, most natural results from community testing."
266
- }
267
- },
268
- "negative_prompt_template": "over-smooth skin, plastic skin, doll face, anime, CGI, waxy texture, blurry face, fake pores, exaggerated makeup, over-sharpening, unrealistic symmetry, flat lighting, low detail skin, extra fingers, distorted anatomy"
269
- }
270
- }
271
- },
272
-
273
- "sdxl": {
274
- "display_name": "SDXL 1.0",
275
- "architecture": "sdxl",
276
- "clip_type": "sdxl",
277
- "prompt_style": "tags_and_natural",
278
-
279
- "presets": {
280
- "realistic_photo": {
281
- "description": "Gold standard for SDXL photorealism.",
282
- "steps": 25,
283
- "cfg": 5.0,
284
- "sampler": "dpmpp_2m",
285
- "scheduler": "karras",
286
- "notes": "DPM++ 2M Karras. CFG 5-7. AVOID Euler for SDXL (causes washed-out images)."
287
- },
288
- "realistic_creative": {
289
- "description": "More diverse realistic results.",
290
- "steps": 30,
291
- "cfg": 6.0,
292
- "sampler": "dpmpp_2m_sde",
293
- "scheduler": "karras",
294
- "notes": "DPM++ 2M SDE Karras for more creative variation."
295
- },
296
- "realistic_best": {
297
- "description": "Highest quality realistic (slow).",
298
- "steps": 35,
299
- "cfg": 6.0,
300
- "sampler": "heun",
301
- "scheduler": "normal",
302
- "notes": "Heun is 2x compute per step but highest quality. Use for final renders."
303
- },
304
- "anime_pony": {
305
- "description": "Pony Diffusion V6 XL author settings.",
306
- "steps": 25,
307
- "cfg": 7.0,
308
- "sampler": "euler_ancestral",
309
- "scheduler": "normal",
310
- "clip_skip": 2,
311
- "notes": "CLIP SKIP 2 IS CRITICAL for Pony — model outputs blobs without it. No neg prompt needed. Use score_9, score_8_up tags."
312
- },
313
- "anime_sharp": {
314
- "description": "Sharp anime with SDE sampler.",
315
- "steps": 25,
316
- "cfg": 7.5,
317
- "sampler": "dpmpp_sde",
318
- "scheduler": "karras",
319
- "notes": "DPM++ SDE Karras for sharper anime. Slower than 2M."
320
- }
321
- },
322
- "resolutions": {
323
- "square": [1024, 1024],
324
- "portrait_3_4": [896, 1152],
325
- "portrait_9_16": [768, 1344],
326
- "landscape_4_3": [1152, 896],
327
- "landscape_16_9": [1344, 768]
328
- }
329
- },
330
-
331
- "illustrious": {
332
- "display_name": "Illustrious XL",
333
- "architecture": "sdxl",
334
- "clip_type": "sdxl",
335
- "prompt_style": "booru_tags",
336
- "prompt_notes": "Use danbooru tags: 1girl, solo, long_hair, blue_eyes. Quality: masterpiece, best quality, absurdres. CFG > 7.5 causes oversaturation, < 3 loses color.",
337
-
338
- "presets": {
339
- "default": {
340
- "description": "Community standard Illustrious settings.",
341
- "steps": 25,
342
- "cfg": 4.5,
343
- "sampler": "euler_ancestral",
344
- "scheduler": "simple",
345
- "notes": "CFG 4.5-5.0 is the sweet spot. euler_ancestral is community favorite."
346
- },
347
- "detailed": {
348
- "steps": 30,
349
- "cfg": 5.0,
350
- "sampler": "dpmpp_2m",
351
- "scheduler": "karras",
352
- "notes": "More consistent/detailed. For complex compositions, increase steps to 40."
353
- },
354
- "sharp_shading": {
355
- "steps": 15,
356
- "cfg": 5.0,
357
- "sampler": "dpmpp_2s_ancestral",
358
- "scheduler": "karras",
359
- "notes": "Enhanced shading detail. Watch for noise in flat color areas."
360
- }
361
- },
362
- "resolutions": {
363
- "optimal_range": "1024-1536px per side"
364
- }
365
- },
366
-
367
- "flux": {
368
- "display_name": "Flux.1",
369
- "architecture": "flux",
370
- "clip_type": "flux",
371
- "prompt_style": "natural_language",
372
- "prompt_notes": "Natural language descriptions. No quality tags needed. Detailed, descriptive prompts work best.",
373
- "notes": "Flux uses FluxGuidance node (guidance=3.5), NOT KSampler CFG. Set KSampler CFG=1.0 always.",
374
-
375
- "presets": {
376
- "dev": {
377
- "description": "Flux.1-dev standard.",
378
- "steps": 20,
379
- "cfg": 1.0,
380
- "sampler": "euler",
381
- "scheduler": "simple",
382
- "guidance": 3.5,
383
- "notes": "Guidance 3.5 via FluxGuidance node. Steps 20-28. Short prompts: guidance 3.5-4.0, long prompts: 1.0-1.5."
384
- },
385
- "schnell": {
386
- "description": "Flux.1-schnell (1-4 steps, no LoRA needed).",
387
- "steps": 4,
388
- "cfg": 1.0,
389
- "sampler": "euler",
390
- "scheduler": "simple"
391
- },
392
- "flux2_turbo": {
393
- "description": "Flux 2 with turbo LoRA.",
394
- "steps": 4,
395
- "cfg": 1.0,
396
- "sampler": "euler",
397
- "scheduler": "simple",
398
- "lora": {
399
- "name": "flux2-turbo-lora.safetensors",
400
- "strength": 1.0
401
- }
402
- }
403
- },
404
- "resolutions": {
405
- "square": [1024, 1024],
406
- "portrait_3_4": [896, 1152],
407
- "landscape_4_3": [1152, 896]
408
- }
409
- },
410
-
411
- "sd35": {
412
- "display_name": "Stable Diffusion 3.5",
413
- "architecture": "sd3",
414
-
415
- "presets": {
416
- "large": {
417
- "steps": 25,
418
- "cfg": 4.5,
419
- "sampler": "dpmpp_2m",
420
- "scheduler": "normal"
421
- },
422
- "large_turbo": {
423
- "steps": 5,
424
- "cfg": 1.0,
425
- "sampler": "euler",
426
- "scheduler": "normal"
427
- },
428
- "medium": {
429
- "steps": 28,
430
- "cfg": 4.5,
431
- "sampler": "euler",
432
- "scheduler": "normal"
433
- }
434
- }
435
- }
436
- },
437
-
438
- "lightning_loras": {
439
- "_description": "Index of available lightning/turbo LoRAs.",
440
-
441
- "qwen_image_4step": {
442
- "file": "Qwen-Image-Lightning-4steps-V1.0.safetensors",
443
- "source": "https://huggingface.co/lightx2v/Qwen-Image-2512-Lightning",
444
- "steps": 4,
445
- "compatible_with": ["qwen_image", "qwen_image_2512", "qwen_finetuned"],
446
- "strength": 1.0,
447
- "cfg": 1.0,
448
- "speedup": "12-25x"
449
- },
450
- "qwen_image_8step": {
451
- "file": "Qwen-Image-Lightning-8steps-V1.0.safetensors",
452
- "source": "https://huggingface.co/lightx2v/Qwen-Image-2512-Lightning",
453
- "steps": 8,
454
- "compatible_with": ["qwen_image", "qwen_image_2512", "qwen_finetuned"],
455
- "strength": 1.0,
456
- "cfg": 1.0,
457
- "notes": "Better quality than 4-step. Use CFG 2.5 for character detail."
458
- },
459
- "qwen_edit_2511_4step": {
460
- "file": "Qwen-Image-Edit-2511-Lightning-4steps-V1.0-bf16.safetensors",
461
- "source": "https://huggingface.co/lightx2v/Qwen-Image-Edit-2511-Lightning",
462
- "steps": 4,
463
- "compatible_with": ["qwen_image_2511_edit"],
464
- "strength": 1.0,
465
- "cfg": 1.0,
466
- "speedup": "~10x",
467
- "notes": "Cannot combine with distilled model."
468
- },
469
- "wuli_turbo_v3": {
470
- "file": "NOT_INSTALLED",
471
- "source": "https://huggingface.co/Wuli-art/Qwen-Image-2512-Turbo-LoRA",
472
- "steps": 4,
473
- "compatible_with": ["qwen_image_2512"],
474
- "strength": 1.0,
475
- "cfg": 1.0,
476
- "speedup": "20x",
477
- "notes": "Wuli-art V3.0 (Jan 2026). CFG-distilled. Also has 2-step and 8-step variants. May need download."
478
- },
479
- "flux2_turbo": {
480
- "file": "flux2-turbo-lora.safetensors",
481
- "steps": 4,
482
- "compatible_with": ["flux"],
483
- "strength": 1.0,
484
- "cfg": 1.0
485
- }
486
- },
487
-
488
- "sampler_guide": {
489
- "_description": "Quick reference for sampler/scheduler by use case.",
490
- "general_fast": { "sampler": "euler", "scheduler": "simple", "notes": "Works everywhere. Default." },
491
- "sdxl_realistic": { "sampler": "dpmpp_2m", "scheduler": "karras", "notes": "SDXL gold standard. AVOID Euler on SDXL." },
492
- "sdxl_anime": { "sampler": "euler_ancestral", "scheduler": "normal", "notes": "Pony/anime SDXL. Clip skip 2 for Pony." },
493
- "illustrious": { "sampler": "euler_ancestral", "scheduler": "simple", "notes": "CFG 4.5-5.0 sweet spot." },
494
- "character_composition":{ "sampler": "euler_ancestral", "scheduler": "beta", "notes": "Multi-character scenes, varied compositions." },
495
- "qwen_realistic_hq": { "sampler": "res_multistep", "scheduler": "sgm_uniform", "notes": "CopaxTimeless pick for Qwen." },
496
- "z_image_sharp": { "sampler": "dpmpp_sde", "scheduler": "beta", "notes": "Sharpest Z-Image results (560-image test)." },
497
- "z_image_beauty": { "sampler": "euler_ancestral", "scheduler": "beta", "notes": "Smooth skin, fashion/beauty." },
498
- "z_image_turbo": { "sampler": "res_2s", "scheduler": "simple", "notes": "Z-Image Turbo distilled." }
499
- },
500
-
501
- "_contributing": {
502
- "how_to_contribute": "Fork the repo, add your model/preset, submit a PR.",
503
- "required_fields": ["Model name + author", "Source URL", "At least one preset (steps/cfg/sampler/scheduler)", "Resolution if non-standard"],
504
- "optional_fields": ["Lightning LoRA compatibility", "Prompt style tips", "Known quirks", "img2img denoise range"],
505
- "contributors": [
506
- { "name": "artokun", "role": "maintainer", "date": "2026-02-16" }
507
- ]
508
- }
509
- }