mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-05-10 01:02:56 +08:00
* Add description field to all blueprint subgraphs Sets the 'description' field on every subgraph blueprint node, which will show on the node preview and tooltip. Covers all 51 blueprint files under blueprints/. * Update blueprint descriptions with researched model info * Refine blueprint descriptions with researched model specs from docs Updates subgraph descriptions across all 51 blueprints with accurate model details drawn from ComfyUI docs, including: - Flux.1 Dev: 12B open-weights, Pro-level quality - Flux.2 Klein 4B: fastest Flux, distilled architecture - Qwen-Image: 20B MMDiT, multilingual text rendering - Z-Image-Turbo: distilled 6B DiT, sub-second inference - LTX-2/2.3: 19B DiT audio-video foundation model - Wan2.2: open-source, 14B/1.3B variants - ACE-Step 1.5: ~1s full-song generation - GPU shader nodes consistently labeled as fragment shaders * Strip marketing fluff and license info from descriptions * Fix Canny to Video (LTX 2.0) description * Remove 'local-' prefix from subgraph names * Preserve UTF-8 encoding in JSON files (ensure_ascii=False) * Apply review suggestions from alexisrolland - Rename 'Image to Model (Hunyuan3d 2.1)' -> 'Image to 3D Model (Hunyuan3d 2.1)' - Rename 'Image Upscale(Z-image-Turbo)' -> 'Image Upscale (Z-image-Turbo)' - Rename 'Video Inpaint(Wan2.1 VACE)' -> 'Video Inpaint (Wan 2.1 VACE)' - Use 'Black Forest Labs' branding in Flux descriptions - Use 'Google's Gemini' with possessive in captioning nodes - Normalize 'Wan 2.2' and 'Wan 2.1' spacing in descriptions * fix: revert Color Adjustment.json to preserve original GLSL shader content Only adds the 'description' field without modifying the shader code (which contained Unicode escape \\u2192 that should be preserved). * Apply CodeRabbit review suggestions - Color Adjustment: include vibrance in description - Image Blur: expand to Gaussian/Box/Radial modes - Flux.2 Klein 4B: narrow to image edit only (no T2I) - NetaYume Lumina: correct model base (Neta Lumina, not Lumina-Next) --------- Co-authored-by: linmoumou <linmoumou@linmoumoudeMac-mini.local> Co-authored-by: Daxiong (Lin) <contact@comfyui-wiki.com>
616 lines
16 KiB
JSON
616 lines
16 KiB
JSON
{
|
|
"revision": 0,
|
|
"last_node_id": 10,
|
|
"last_link_id": 0,
|
|
"nodes": [
|
|
{
|
|
"id": 10,
|
|
"type": "d5c462c8-1372-4af8-84f2-547c83470d04",
|
|
"pos": [
|
|
3610,
|
|
-2630
|
|
],
|
|
"size": [
|
|
270,
|
|
420
|
|
],
|
|
"flags": {},
|
|
"order": 0,
|
|
"mode": 0,
|
|
"inputs": [
|
|
{
|
|
"label": "image",
|
|
"localized_name": "images.image0",
|
|
"name": "images.image0",
|
|
"type": "IMAGE",
|
|
"link": null
|
|
}
|
|
],
|
|
"outputs": [
|
|
{
|
|
"label": "IMAGE",
|
|
"localized_name": "IMAGE0",
|
|
"name": "IMAGE0",
|
|
"type": "IMAGE",
|
|
"links": []
|
|
}
|
|
],
|
|
"properties": {
|
|
"proxyWidgets": [
|
|
[
|
|
"4",
|
|
"curve"
|
|
],
|
|
[
|
|
"5",
|
|
"curve"
|
|
],
|
|
[
|
|
"6",
|
|
"curve"
|
|
],
|
|
[
|
|
"7",
|
|
"curve"
|
|
]
|
|
]
|
|
},
|
|
"widgets_values": [],
|
|
"title": "Color Curves"
|
|
}
|
|
],
|
|
"links": [],
|
|
"version": 0.4,
|
|
"definitions": {
|
|
"subgraphs": [
|
|
{
|
|
"id": "d5c462c8-1372-4af8-84f2-547c83470d04",
|
|
"version": 1,
|
|
"state": {
|
|
"lastGroupId": 0,
|
|
"lastNodeId": 9,
|
|
"lastLinkId": 38,
|
|
"lastRerouteId": 0
|
|
},
|
|
"revision": 0,
|
|
"config": {},
|
|
"name": "Color Curves",
|
|
"inputNode": {
|
|
"id": -10,
|
|
"bounding": [
|
|
2660,
|
|
-4500,
|
|
120,
|
|
60
|
|
]
|
|
},
|
|
"outputNode": {
|
|
"id": -20,
|
|
"bounding": [
|
|
4270,
|
|
-4500,
|
|
120,
|
|
60
|
|
]
|
|
},
|
|
"inputs": [
|
|
{
|
|
"id": "abc345b7-f55e-4f32-a11d-3aa4c2b0936b",
|
|
"name": "images.image0",
|
|
"type": "IMAGE",
|
|
"linkIds": [
|
|
29,
|
|
34
|
|
],
|
|
"localized_name": "images.image0",
|
|
"label": "image",
|
|
"pos": [
|
|
2760,
|
|
-4480
|
|
]
|
|
}
|
|
],
|
|
"outputs": [
|
|
{
|
|
"id": "eb0ec079-46da-4408-8263-9ef85569d33d",
|
|
"name": "IMAGE0",
|
|
"type": "IMAGE",
|
|
"linkIds": [
|
|
28
|
|
],
|
|
"localized_name": "IMAGE0",
|
|
"label": "IMAGE",
|
|
"pos": [
|
|
4290,
|
|
-4480
|
|
]
|
|
}
|
|
],
|
|
"widgets": [],
|
|
"nodes": [
|
|
{
|
|
"id": 4,
|
|
"type": "CurveEditor",
|
|
"pos": [
|
|
3060,
|
|
-4500
|
|
],
|
|
"size": [
|
|
270,
|
|
200
|
|
],
|
|
"flags": {},
|
|
"order": 0,
|
|
"mode": 0,
|
|
"inputs": [
|
|
{
|
|
"label": "curve",
|
|
"localized_name": "curve",
|
|
"name": "curve",
|
|
"type": "CURVE",
|
|
"widget": {
|
|
"name": "curve"
|
|
},
|
|
"link": null
|
|
},
|
|
{
|
|
"label": "histogram",
|
|
"localized_name": "histogram",
|
|
"name": "histogram",
|
|
"type": "HISTOGRAM",
|
|
"shape": 7,
|
|
"link": 35
|
|
}
|
|
],
|
|
"outputs": [
|
|
{
|
|
"localized_name": "CURVE",
|
|
"name": "CURVE",
|
|
"type": "CURVE",
|
|
"links": [
|
|
30
|
|
]
|
|
}
|
|
],
|
|
"title": "RGB Master",
|
|
"properties": {
|
|
"Node name for S&R": "CurveEditor"
|
|
},
|
|
"widgets_values": []
|
|
},
|
|
{
|
|
"id": 5,
|
|
"type": "CurveEditor",
|
|
"pos": [
|
|
3060,
|
|
-4250
|
|
],
|
|
"size": [
|
|
270,
|
|
200
|
|
],
|
|
"flags": {},
|
|
"order": 1,
|
|
"mode": 0,
|
|
"inputs": [
|
|
{
|
|
"label": "curve",
|
|
"localized_name": "curve",
|
|
"name": "curve",
|
|
"type": "CURVE",
|
|
"widget": {
|
|
"name": "curve"
|
|
},
|
|
"link": null
|
|
},
|
|
{
|
|
"label": "histogram",
|
|
"localized_name": "histogram",
|
|
"name": "histogram",
|
|
"type": "HISTOGRAM",
|
|
"shape": 7,
|
|
"link": 36
|
|
}
|
|
],
|
|
"outputs": [
|
|
{
|
|
"localized_name": "CURVE",
|
|
"name": "CURVE",
|
|
"type": "CURVE",
|
|
"links": [
|
|
31
|
|
]
|
|
}
|
|
],
|
|
"title": "Red",
|
|
"properties": {
|
|
"Node name for S&R": "CurveEditor"
|
|
},
|
|
"widgets_values": []
|
|
},
|
|
{
|
|
"id": 6,
|
|
"type": "CurveEditor",
|
|
"pos": [
|
|
3060,
|
|
-4000
|
|
],
|
|
"size": [
|
|
270,
|
|
200
|
|
],
|
|
"flags": {},
|
|
"order": 2,
|
|
"mode": 0,
|
|
"inputs": [
|
|
{
|
|
"label": "curve",
|
|
"localized_name": "curve",
|
|
"name": "curve",
|
|
"type": "CURVE",
|
|
"widget": {
|
|
"name": "curve"
|
|
},
|
|
"link": null
|
|
},
|
|
{
|
|
"label": "histogram",
|
|
"localized_name": "histogram",
|
|
"name": "histogram",
|
|
"type": "HISTOGRAM",
|
|
"shape": 7,
|
|
"link": 37
|
|
}
|
|
],
|
|
"outputs": [
|
|
{
|
|
"localized_name": "CURVE",
|
|
"name": "CURVE",
|
|
"type": "CURVE",
|
|
"links": [
|
|
32
|
|
]
|
|
}
|
|
],
|
|
"title": "Green",
|
|
"properties": {
|
|
"Node name for S&R": "CurveEditor"
|
|
},
|
|
"widgets_values": []
|
|
},
|
|
{
|
|
"id": 7,
|
|
"type": "CurveEditor",
|
|
"pos": [
|
|
3060,
|
|
-3750
|
|
],
|
|
"size": [
|
|
270,
|
|
200
|
|
],
|
|
"flags": {},
|
|
"order": 3,
|
|
"mode": 0,
|
|
"inputs": [
|
|
{
|
|
"label": "curve",
|
|
"localized_name": "curve",
|
|
"name": "curve",
|
|
"type": "CURVE",
|
|
"widget": {
|
|
"name": "curve"
|
|
},
|
|
"link": null
|
|
},
|
|
{
|
|
"label": "histogram",
|
|
"localized_name": "histogram",
|
|
"name": "histogram",
|
|
"type": "HISTOGRAM",
|
|
"shape": 7,
|
|
"link": 38
|
|
}
|
|
],
|
|
"outputs": [
|
|
{
|
|
"localized_name": "CURVE",
|
|
"name": "CURVE",
|
|
"type": "CURVE",
|
|
"links": [
|
|
33
|
|
]
|
|
}
|
|
],
|
|
"title": "Blue",
|
|
"properties": {
|
|
"Node name for S&R": "CurveEditor"
|
|
},
|
|
"widgets_values": []
|
|
},
|
|
{
|
|
"id": 8,
|
|
"type": "GLSLShader",
|
|
"pos": [
|
|
3590,
|
|
-4500
|
|
],
|
|
"size": [
|
|
420,
|
|
500
|
|
],
|
|
"flags": {},
|
|
"order": 4,
|
|
"mode": 0,
|
|
"inputs": [
|
|
{
|
|
"label": "image0",
|
|
"localized_name": "images.image0",
|
|
"name": "images.image0",
|
|
"type": "IMAGE",
|
|
"link": 29
|
|
},
|
|
{
|
|
"label": "image1",
|
|
"localized_name": "images.image1",
|
|
"name": "images.image1",
|
|
"shape": 7,
|
|
"type": "IMAGE",
|
|
"link": null
|
|
},
|
|
{
|
|
"label": "u_curve0",
|
|
"localized_name": "curves.u_curve0",
|
|
"name": "curves.u_curve0",
|
|
"shape": 7,
|
|
"type": "CURVE",
|
|
"link": 30
|
|
},
|
|
{
|
|
"label": "u_curve1",
|
|
"localized_name": "curves.u_curve1",
|
|
"name": "curves.u_curve1",
|
|
"shape": 7,
|
|
"type": "CURVE",
|
|
"link": 31
|
|
},
|
|
{
|
|
"label": "u_curve2",
|
|
"localized_name": "curves.u_curve2",
|
|
"name": "curves.u_curve2",
|
|
"shape": 7,
|
|
"type": "CURVE",
|
|
"link": 32
|
|
},
|
|
{
|
|
"label": "u_curve3",
|
|
"localized_name": "curves.u_curve3",
|
|
"name": "curves.u_curve3",
|
|
"shape": 7,
|
|
"type": "CURVE",
|
|
"link": 33
|
|
},
|
|
{
|
|
"localized_name": "fragment_shader",
|
|
"name": "fragment_shader",
|
|
"type": "STRING",
|
|
"widget": {
|
|
"name": "fragment_shader"
|
|
},
|
|
"link": null
|
|
},
|
|
{
|
|
"localized_name": "size_mode",
|
|
"name": "size_mode",
|
|
"type": "COMFY_DYNAMICCOMBO_V3",
|
|
"widget": {
|
|
"name": "size_mode"
|
|
},
|
|
"link": null
|
|
}
|
|
],
|
|
"outputs": [
|
|
{
|
|
"localized_name": "IMAGE0",
|
|
"name": "IMAGE0",
|
|
"type": "IMAGE",
|
|
"links": [
|
|
28
|
|
]
|
|
},
|
|
{
|
|
"localized_name": "IMAGE1",
|
|
"name": "IMAGE1",
|
|
"type": "IMAGE",
|
|
"links": null
|
|
},
|
|
{
|
|
"localized_name": "IMAGE2",
|
|
"name": "IMAGE2",
|
|
"type": "IMAGE",
|
|
"links": null
|
|
},
|
|
{
|
|
"localized_name": "IMAGE3",
|
|
"name": "IMAGE3",
|
|
"type": "IMAGE",
|
|
"links": null
|
|
}
|
|
],
|
|
"properties": {
|
|
"Node name for S&R": "GLSLShader"
|
|
},
|
|
"widgets_values": [
|
|
"#version 300 es\nprecision highp float;\n\nuniform sampler2D u_image0;\nuniform sampler2D u_curve0; // RGB master curve (256x1 LUT)\nuniform sampler2D u_curve1; // Red channel curve\nuniform sampler2D u_curve2; // Green channel curve\nuniform sampler2D u_curve3; // Blue channel curve\n\nin vec2 v_texCoord;\nlayout(location = 0) out vec4 fragColor0;\n\n// GIMP-compatible curve lookup with manual linear interpolation.\n// Matches gimp_curve_map_value_inline() from gimpcurve-map.c:\n// index = value * (n_samples - 1)\n// f = fract(index)\n// result = (1-f) * samples[floor] + f * samples[ceil]\n//\n// Uses texelFetch (NEAREST) to avoid GPU half-texel offset issues\n// that occur with texture() + GL_LINEAR on small 256x1 LUTs.\nfloat applyCurve(sampler2D curve, float value) {\n value = clamp(value, 0.0, 1.0);\n\n float pos = value * 255.0;\n int lo = int(floor(pos));\n int hi = min(lo + 1, 255);\n float f = pos - float(lo);\n\n float a = texelFetch(curve, ivec2(lo, 0), 0).r;\n float b = texelFetch(curve, ivec2(hi, 0), 0).r;\n\n return a + f * (b - a);\n}\n\nvoid main() {\n vec4 color = texture(u_image0, v_texCoord);\n\n // GIMP order: per-channel curves first, then RGB master curve.\n // See gimp_curve_map_pixels() default case in gimpcurve-map.c:\n // dest = colors_curve( channel_curve( src ) )\n float tmp_r = applyCurve(u_curve1, color.r);\n float tmp_g = applyCurve(u_curve2, color.g);\n float tmp_b = applyCurve(u_curve3, color.b);\n color.r = applyCurve(u_curve0, tmp_r);\n color.g = applyCurve(u_curve0, tmp_g);\n color.b = applyCurve(u_curve0, tmp_b);\n\n fragColor0 = vec4(color.rgb, color.a);\n}\n",
|
|
"from_input"
|
|
]
|
|
},
|
|
{
|
|
"id": 9,
|
|
"type": "ImageHistogram",
|
|
"pos": [
|
|
2800,
|
|
-4300
|
|
],
|
|
"size": [
|
|
210,
|
|
150
|
|
],
|
|
"flags": {},
|
|
"order": 5,
|
|
"mode": 0,
|
|
"inputs": [
|
|
{
|
|
"label": "image",
|
|
"localized_name": "image",
|
|
"name": "image",
|
|
"type": "IMAGE",
|
|
"link": 34
|
|
}
|
|
],
|
|
"outputs": [
|
|
{
|
|
"localized_name": "HISTOGRAM",
|
|
"name": "rgb",
|
|
"type": "HISTOGRAM",
|
|
"links": [
|
|
35
|
|
]
|
|
},
|
|
{
|
|
"localized_name": "HISTOGRAM",
|
|
"name": "luminance",
|
|
"type": "HISTOGRAM",
|
|
"links": []
|
|
},
|
|
{
|
|
"localized_name": "HISTOGRAM",
|
|
"name": "red",
|
|
"type": "HISTOGRAM",
|
|
"links": [
|
|
36
|
|
]
|
|
},
|
|
{
|
|
"localized_name": "HISTOGRAM",
|
|
"name": "green",
|
|
"type": "HISTOGRAM",
|
|
"links": [
|
|
37
|
|
]
|
|
},
|
|
{
|
|
"localized_name": "HISTOGRAM",
|
|
"name": "blue",
|
|
"type": "HISTOGRAM",
|
|
"links": [
|
|
38
|
|
]
|
|
}
|
|
],
|
|
"properties": {
|
|
"Node name for S&R": "ImageHistogram"
|
|
},
|
|
"widgets_values": []
|
|
}
|
|
],
|
|
"groups": [],
|
|
"links": [
|
|
{
|
|
"id": 29,
|
|
"origin_id": -10,
|
|
"origin_slot": 0,
|
|
"target_id": 8,
|
|
"target_slot": 0,
|
|
"type": "IMAGE"
|
|
},
|
|
{
|
|
"id": 28,
|
|
"origin_id": 8,
|
|
"origin_slot": 0,
|
|
"target_id": -20,
|
|
"target_slot": 0,
|
|
"type": "IMAGE"
|
|
},
|
|
{
|
|
"id": 30,
|
|
"origin_id": 4,
|
|
"origin_slot": 0,
|
|
"target_id": 8,
|
|
"target_slot": 2,
|
|
"type": "CURVE"
|
|
},
|
|
{
|
|
"id": 31,
|
|
"origin_id": 5,
|
|
"origin_slot": 0,
|
|
"target_id": 8,
|
|
"target_slot": 3,
|
|
"type": "CURVE"
|
|
},
|
|
{
|
|
"id": 32,
|
|
"origin_id": 6,
|
|
"origin_slot": 0,
|
|
"target_id": 8,
|
|
"target_slot": 4,
|
|
"type": "CURVE"
|
|
},
|
|
{
|
|
"id": 33,
|
|
"origin_id": 7,
|
|
"origin_slot": 0,
|
|
"target_id": 8,
|
|
"target_slot": 5,
|
|
"type": "CURVE"
|
|
},
|
|
{
|
|
"id": 34,
|
|
"origin_id": -10,
|
|
"origin_slot": 0,
|
|
"target_id": 9,
|
|
"target_slot": 0,
|
|
"type": "IMAGE"
|
|
},
|
|
{
|
|
"id": 35,
|
|
"origin_id": 9,
|
|
"origin_slot": 0,
|
|
"target_id": 4,
|
|
"target_slot": 1,
|
|
"type": "HISTOGRAM"
|
|
},
|
|
{
|
|
"id": 36,
|
|
"origin_id": 9,
|
|
"origin_slot": 2,
|
|
"target_id": 5,
|
|
"target_slot": 1,
|
|
"type": "HISTOGRAM"
|
|
},
|
|
{
|
|
"id": 37,
|
|
"origin_id": 9,
|
|
"origin_slot": 3,
|
|
"target_id": 6,
|
|
"target_slot": 1,
|
|
"type": "HISTOGRAM"
|
|
},
|
|
{
|
|
"id": 38,
|
|
"origin_id": 9,
|
|
"origin_slot": 4,
|
|
"target_id": 7,
|
|
"target_slot": 1,
|
|
"type": "HISTOGRAM"
|
|
}
|
|
],
|
|
"extra": {
|
|
"workflowRendererVersion": "LG"
|
|
},
|
|
"category": "Image Tools/Color adjust",
|
|
"description": "Fine-tunes tone and color with per-channel curve adjustments using a real-time GPU fragment shader."
|
|
}
|
|
]
|
|
}
|
|
} |