| { | |
| "revision": 0, | |
| "last_node_id": 29, | |
| "last_link_id": 0, | |
| "nodes": [ | |
| { | |
| "id": 29, | |
| "type": "4c9d6ea4-b912-40e5-8766-6793a9758c53", | |
| "pos": [ | |
| 1970, | |
| -230 | |
| ], | |
| "size": [ | |
| 180, | |
| 86 | |
| ], | |
| "flags": {}, | |
| "order": 5, | |
| "mode": 0, | |
| "inputs": [ | |
| { | |
| "label": "image", | |
| "localized_name": "images.image0", | |
| "name": "images.image0", | |
| "type": "IMAGE", | |
| "link": null | |
| } | |
| ], | |
| "outputs": [ | |
| { | |
| "label": "R", | |
| "localized_name": "IMAGE0", | |
| "name": "IMAGE0", | |
| "type": "IMAGE", | |
| "links": [] | |
| }, | |
| { | |
| "label": "G", | |
| "localized_name": "IMAGE1", | |
| "name": "IMAGE1", | |
| "type": "IMAGE", | |
| "links": [] | |
| }, | |
| { | |
| "label": "B", | |
| "localized_name": "IMAGE2", | |
| "name": "IMAGE2", | |
| "type": "IMAGE", | |
| "links": [] | |
| }, | |
| { | |
| "label": "A", | |
| "localized_name": "IMAGE3", | |
| "name": "IMAGE3", | |
| "type": "IMAGE", | |
| "links": [] | |
| } | |
| ], | |
| "title": "Image Channels", | |
| "properties": { | |
| "proxyWidgets": [] | |
| }, | |
| "widgets_values": [] | |
| } | |
| ], | |
| "links": [], | |
| "version": 0.4, | |
| "definitions": { | |
| "subgraphs": [ | |
| { | |
| "id": "4c9d6ea4-b912-40e5-8766-6793a9758c53", | |
| "version": 1, | |
| "state": { | |
| "lastGroupId": 0, | |
| "lastNodeId": 28, | |
| "lastLinkId": 39, | |
| "lastRerouteId": 0 | |
| }, | |
| "revision": 0, | |
| "config": {}, | |
| "name": "Image Channels", | |
| "inputNode": { | |
| "id": -10, | |
| "bounding": [ | |
| 1820, | |
| -185, | |
| 120, | |
| 60 | |
| ] | |
| }, | |
| "outputNode": { | |
| "id": -20, | |
| "bounding": [ | |
| 2460, | |
| -215, | |
| 120, | |
| 120 | |
| ] | |
| }, | |
| "inputs": [ | |
| { | |
| "id": "3522932b-2d86-4a1f-a02a-cb29f3a9d7fe", | |
| "name": "images.image0", | |
| "type": "IMAGE", | |
| "linkIds": [ | |
| 39 | |
| ], | |
| "localized_name": "images.image0", | |
| "label": "image", | |
| "pos": [ | |
| 1920, | |
| -165 | |
| ] | |
| } | |
| ], | |
| "outputs": [ | |
| { | |
| "id": "605cb9c3-b065-4d9b-81d2-3ec331889b2b", | |
| "name": "IMAGE0", | |
| "type": "IMAGE", | |
| "linkIds": [ | |
| 26 | |
| ], | |
| "localized_name": "IMAGE0", | |
| "label": "R", | |
| "pos": [ | |
| 2480, | |
| -195 | |
| ] | |
| }, | |
| { | |
| "id": "fb44a77e-0522-43e9-9527-82e7465b3596", | |
| "name": "IMAGE1", | |
| "type": "IMAGE", | |
| "linkIds": [ | |
| 27 | |
| ], | |
| "localized_name": "IMAGE1", | |
| "label": "G", | |
| "pos": [ | |
| 2480, | |
| -175 | |
| ] | |
| }, | |
| { | |
| "id": "81460ee6-0131-402a-874f-6bf3001fc4ff", | |
| "name": "IMAGE2", | |
| "type": "IMAGE", | |
| "linkIds": [ | |
| 28 | |
| ], | |
| "localized_name": "IMAGE2", | |
| "label": "B", | |
| "pos": [ | |
| 2480, | |
| -155 | |
| ] | |
| }, | |
| { | |
| "id": "ae690246-80d4-4951-b1d9-9306d8a77417", | |
| "name": "IMAGE3", | |
| "type": "IMAGE", | |
| "linkIds": [ | |
| 29 | |
| ], | |
| "localized_name": "IMAGE3", | |
| "label": "A", | |
| "pos": [ | |
| 2480, | |
| -135 | |
| ] | |
| } | |
| ], | |
| "widgets": [], | |
| "nodes": [ | |
| { | |
| "id": 23, | |
| "type": "GLSLShader", | |
| "pos": [ | |
| 2000, | |
| -330 | |
| ], | |
| "size": [ | |
| 400, | |
| 172 | |
| ], | |
| "flags": {}, | |
| "order": 0, | |
| "mode": 0, | |
| "inputs": [ | |
| { | |
| "label": "image", | |
| "localized_name": "images.image0", | |
| "name": "images.image0", | |
| "type": "IMAGE", | |
| "link": 39 | |
| }, | |
| { | |
| "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 | |
| }, | |
| { | |
| "label": "image1", | |
| "localized_name": "images.image1", | |
| "name": "images.image1", | |
| "shape": 7, | |
| "type": "IMAGE", | |
| "link": null | |
| } | |
| ], | |
| "outputs": [ | |
| { | |
| "label": "R", | |
| "localized_name": "IMAGE0", | |
| "name": "IMAGE0", | |
| "type": "IMAGE", | |
| "links": [ | |
| 26 | |
| ] | |
| }, | |
| { | |
| "label": "G", | |
| "localized_name": "IMAGE1", | |
| "name": "IMAGE1", | |
| "type": "IMAGE", | |
| "links": [ | |
| 27 | |
| ] | |
| }, | |
| { | |
| "label": "B", | |
| "localized_name": "IMAGE2", | |
| "name": "IMAGE2", | |
| "type": "IMAGE", | |
| "links": [ | |
| 28 | |
| ] | |
| }, | |
| { | |
| "label": "A", | |
| "localized_name": "IMAGE3", | |
| "name": "IMAGE3", | |
| "type": "IMAGE", | |
| "links": [ | |
| 29 | |
| ] | |
| } | |
| ], | |
| "properties": { | |
| "Node name for S&R": "GLSLShader" | |
| }, | |
| "widgets_values": [ | |
| "#version 300 es\nprecision highp float;\n\nuniform sampler2D u_image0;\n\nin vec2 v_texCoord;\nlayout(location = 0) out vec4 fragColor0;\nlayout(location = 1) out vec4 fragColor1;\nlayout(location = 2) out vec4 fragColor2;\nlayout(location = 3) out vec4 fragColor3;\n\nvoid main() {\n vec4 color = texture(u_image0, v_texCoord);\n // Output each channel as grayscale to separate render targets\n fragColor0 = vec4(vec3(color.r), 1.0); // Red channel\n fragColor1 = vec4(vec3(color.g), 1.0); // Green channel\n fragColor2 = vec4(vec3(color.b), 1.0); // Blue channel\n fragColor3 = vec4(vec3(color.a), 1.0); // Alpha channel\n}\n", | |
| "from_input" | |
| ] | |
| } | |
| ], | |
| "groups": [], | |
| "links": [ | |
| { | |
| "id": 39, | |
| "origin_id": -10, | |
| "origin_slot": 0, | |
| "target_id": 23, | |
| "target_slot": 0, | |
| "type": "IMAGE" | |
| }, | |
| { | |
| "id": 26, | |
| "origin_id": 23, | |
| "origin_slot": 0, | |
| "target_id": -20, | |
| "target_slot": 0, | |
| "type": "IMAGE" | |
| }, | |
| { | |
| "id": 27, | |
| "origin_id": 23, | |
| "origin_slot": 1, | |
| "target_id": -20, | |
| "target_slot": 1, | |
| "type": "IMAGE" | |
| }, | |
| { | |
| "id": 28, | |
| "origin_id": 23, | |
| "origin_slot": 2, | |
| "target_id": -20, | |
| "target_slot": 2, | |
| "type": "IMAGE" | |
| }, | |
| { | |
| "id": 29, | |
| "origin_id": 23, | |
| "origin_slot": 3, | |
| "target_id": -20, | |
| "target_slot": 3, | |
| "type": "IMAGE" | |
| } | |
| ], | |
| "extra": { | |
| "workflowRendererVersion": "LG" | |
| }, | |
| "category": "Image Tools/Color adjust", | |
| "description": "Manipulates individual RGBA channels for masking, compositing, and channel effects." | |
| } | |
| ] | |
| } | |
| } |