{"id":35019794,"url":"https://github.com/vslinx/comfyui-vslinx-nodes","last_synced_at":"2026-04-11T18:19:33.855Z","repository":{"id":310280907,"uuid":"1039317056","full_name":"vslinx/ComfyUI-vslinx-nodes","owner":"vslinx","description":"Custom ComfyUI nodes that streamline and speed up workflows. Provide image multi-select loaders as well as boolean AND/OR/NOT plus bypass/mute any nodes. Also has a Fit Image into BBox Mask node as well as a bridge for rgthree's lora loader for image-saver with metadata information. Lastly provides a setting to show previews in all model loaders.","archived":false,"fork":false,"pushed_at":"2026-04-04T16:52:44.000Z","size":202,"stargazers_count":15,"open_issues_count":3,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-04T19:24:46.109Z","etag":null,"topics":["comfy-ui","comfyui","comfyui-custom-node","comfyui-node","comfyui-nodes","comfyui-plugin","comfyui-workflow"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vslinx.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"ko_fi":"vslinx"}},"created_at":"2025-08-17T00:24:14.000Z","updated_at":"2026-04-04T16:32:18.000Z","dependencies_parsed_at":"2025-09-18T14:10:40.822Z","dependency_job_id":"2469af1d-a139-4233-b5f4-be0836f7c5d7","html_url":"https://github.com/vslinx/ComfyUI-vslinx-nodes","commit_stats":null,"previous_names":["vslinx/comfyui-vslinx-nodes"],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/vslinx/ComfyUI-vslinx-nodes","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vslinx%2FComfyUI-vslinx-nodes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vslinx%2FComfyUI-vslinx-nodes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vslinx%2FComfyUI-vslinx-nodes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vslinx%2FComfyUI-vslinx-nodes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vslinx","download_url":"https://codeload.github.com/vslinx/ComfyUI-vslinx-nodes/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vslinx%2FComfyUI-vslinx-nodes/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31583290,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"online","status_checked_at":"2026-04-09T02:00:06.848Z","response_time":112,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["comfy-ui","comfyui","comfyui-custom-node","comfyui-node","comfyui-nodes","comfyui-plugin","comfyui-workflow"],"created_at":"2025-12-27T05:45:34.565Z","updated_at":"2026-04-09T03:01:17.784Z","avatar_url":"https://github.com/vslinx.png","language":"Python","funding_links":["https://ko-fi.com/vslinx"],"categories":[],"sub_categories":[],"readme":"# ComfyUI-vslinx-nodes\nCustom ComfyUI nodes to streamline workflows: load multiple images via a multi-select dialog as a batch or list; load last generated image from the output folder with auto-refresh after generation; fit an image inside a mask’s bounding box for compositing poses, objects, or decals; convert images to pixel art with retro palettes (GameBoy, CGA, NES, Pico-8); upscale to any exact scale factor using an upscale model; boolean AND/OR/flip plus bypass or mute nodes on a boolean for easy workflow branching; multiline wildcard text input with dropdown for Impact-Pack; and append LoRA info from rgthree Power LoRA Loader into image metadata. Also includes settings to show hover previews for all models \u0026 LoRAs across all model loaders - compatible with rgthree’s subdirectory view - and a global fix for “Return type mismatch” errors caused by custom nodes like RES4LYF that extend combo lists such as schedulers.\n\n## How to Install\n### **Recommended**\n* Install via [ComfyUI-Manager](https://github.com/ltdrdata/ComfyUI-Manager).\n\n### **Manual**\n* Navigate to `ComfyUI/custom_nodes` in your terminal (cmd).\n* Clone the repository under the `custom_nodes` directory using the following command:\n  ```\n  git clone https://github.com/vslinx/ComfyUI-vslinx-nodes.git comfyui-vslinx-nodes\n  ```\n\n## Settings\n#### Fix combo type mismatches between custom nodes\nIs enabled by default and prevents \"Return type mismatch between linked nodes\" errors that occur when custom nodes (e.g. RES4LYF) extend combo lists like schedulers with additional entries. When a mismatch is detected, the fix automatically corrects the expected list to match the input list of the receiving node — this is universal, works across subgraphs and all custom nodes, and does nothing when there is no mismatch. A message is logged to the console whenever the fix is applied.\nDisable if you experience unexpected behavior.\n\n#### Show hover previews in all model dropdowns\nWhen enabled, this feature shows a preview for the model you’re hovering with your mouse.  \nIt works across **all model / LoRA loaders** and supports **`.safetensors`**, **`.ckpt`**, **`.pt`**, and **`.gguf`** files located in these folders:\n\n- `loras`\n- `checkpoints`\n- `unet`\n- `diffusion_models`\n\nIt is also compatible with the **[rgthree-comfy](https://github.com/rgthree/rgthree-comfy)** node’s **“Auto Nest Subdirectories in Menus”** setting. A feature that often breaks preview behavior when combined with other custom nodes (e.g. **[ComfyUI-Custom-Scripts](https://github.com/pythongosssss/ComfyUI-Custom-Scripts)**).\n\nPreview files must be placed **in the same folder as the model** and use the **same base filename**.\n\nSupported formats:\n\n**Images**\n- `png`\n- `jpg`\n- `jpeg`\n- `webp`\n\n**Videos**\n- `mp4`\n- `webm`\n\nThe extension will look for previews using the most common naming schemes:\n- `ModelName.png` / `ModelName.webm` / etc.\n- `ModelName.preview.png` / `ModelName.preview.webm` / etc.\n\nCompatible with well-known ComfyUI custom nodes/plugins that save metadata and/or previews, such as  \n**[ComfyUI-Lora-Manager](https://github.com/willmiao/ComfyUI-Lora-Manager)**.\n\n\u003cimg width=\"549\" height=\"678\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/2fbfb270-562c-48f5-a9a5-19062410da7e\" /\u003e\n\n## Nodes\n\n### Text\n#### (Impact-Pack) Multiline Wildcard Text\nProvides a simple multiline text field with a wildcard selector that automatically appends selected wildcards. This node uses the API endpoint from the [Impact-Pack](https://github.com/ltdrdata/ComfyUI-Impact-Pack) custom node to provide a dropdown that lets you select wildcards to be added to your prompt.  \nThis node does not resolve these wildcards by itself and is intended to be passed into the **“Populated Prompt”** field in the Impact-Pack **“ImpactWildcardProcessor”** node.\u003cbr\u003e\n\u003cimg width=\"1562\" height=\"447\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/27c5e3e3-4e51-450e-b91d-6f3ef48b2f28\" /\u003e\n\n### Image\n#### Load (Multiple) Images (List)\nProvides a simple node with a “Select Images” button that lets you choose one or multiple images. After selection, the images are uploaded to your ``input`` folder in ComfyUI (the same behavior as the default Load Image node). The node also includes a preview of the selected images: you can click on an image to switch from the tile view to a full image view. Clicking the X returns you to the tile view, while the numbering in the bottom-right corner allows you to switch between images. \u003cbr\u003e\nThe node includes a ``max_images`` property that defines how many images can be loaded. If set to 0 or left empty, the number of allowed images is unlimited. \u003cbr\u003e\nIt also includes a ``fail_if_empty`` property to throw an error if no elements are being passed, likely caused by images having been deleted or moved from the input folder.\nFurthermore includes a ``filename_handling`` property that lets you control how the filenames are being output.\n- ``full filename`` will output the full filename without it's extension\u003cbr\u003e\n``image (1).png`` will return ``image (1)``\n- ``deduped filename`` will return the filename while removing any automatically appended `` (incrementing number)`` elements that are added when uploading more than 1 picture with the same filename + extension to the comfyui/input folder.\n\n\u003cb\u003eThe images and filenames are returned as a list\u003c/b\u003e, allowing downstream nodes to process them one after another. \u003cbr\u003e\n\u003cimg width=\"1040\" height=\"510\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/83d6c60c-5069-4c3b-9886-0f4cefb64df9\" /\u003e\n\n#### Load (Multiple) Images (Batch)\nThis node works the same way as the [Load (Multiple) Images (List)](#load-multiple-images-list)-Node but \u003cb\u003ethe images are returned as a batch\u003c/b\u003e, allowing downstream nodes to process them together while the \u003cb\u003efilenames are returned as a string of all filenames seperated by a comma\u003c/b\u003e. \u003cbr\u003e\n\nNote that a batch is a tensor of the same shape, if your images have different heights and width they'll be resized to fit one common size of the first image, even if that means that they'll get cropped, resized or padded. \u003cbr\u003e\n**Using a batch always implies using uniform dimensions!**\n\n#### Upscale by Factor (With Model)\nhis node upscales an image using a selected \u003cb\u003eupscale model\u003c/b\u003e and then resizes the result to a target scale factor. \u003cb\u003eUpscale models typically operate at a fixed scale (e.g. 2× or 4×).\u003c/b\u003e This node first runs the model at its native scale, then applies a final resize step to match your requested factor. Minimum is 0.1 scale while the maximum is 8.0 scale.\n\u003cimg width=\"1420\" height=\"602\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/d1845c2e-0d8b-480d-8177-7799f8259b2a\" /\u003e\n\n#### Image to Pixel Art\nThis node converts an image into \u003cb\u003etrue pixel art\u003c/b\u003e by downscaling it to a discrete low-resolution pixel grid, quantizing colors to a limited palette, and scaling back up with nearest-neighbor so every pixel block is hard-edged and solid with no blending or anti-aliasing.\n\u003cimg width=\"1310\" height=\"557\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/7505fe22-0458-43cf-89d1-c040f2316261\" /\u003e\n\n#### Load Last Generated Image\nThis node loads an image from your ``output`` folder and serves as a replacement for ComfyUI's built-in **LoadImageOutput** node. A dropdown lists all images sorted by newest first, so the most recent generation is always at the top. When ``Auto refresh after generation`` is enabled, the node automatically picks up newly generated images after each workflow execution — but only when a new file actually appeared, so your current selection stays untouched otherwise.\n\nThe node supports the **MaskEditor** (right-click → \"Open in MaskEditor\"). Painted masks are preserved across workflow executions, tab switches, and page reloads. If no image is available or the selected file was deleted, the node outputs a 512×512 black image to prevent blocking your workflow.\n\nA ``include_subfolders`` property (right-click → Properties) controls whether images from subfolders inside the ``output`` directory are included in the dropdown and refresh functions.\n\n### Boolean\n#### Boolean AND Operator\nProvides a node with 2 boolean inputs. Outputs True only if both inputs are True. Otherwise returns False. \u003cbr\u003e\n\u003cimg width=\"1284\" height=\"182\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/a7c0a40b-8246-4aa5-806a-ba4d7b749ad9\" /\u003e\n\n#### Boolean OR Operator\nJust like the AND Operator it provides a node with 2 boolean inputs. Outputs True if either input is True. Returns False only if both are False.\n\n#### Boolean Flip\nFlips the input value: True → False, False → True. Useful for inverting conditions.\n\n### Utility\n#### Forward/Bypass on Boolean (Any)\nThis node accepts any input type and forwards it unchanged. Its pass-through behavior can be controlled with the built-in boolean switch or by linking an external boolean node. This allows you to create conditional branches in your workflow. The bypass state is applied instantly in the UI, without waiting for workflow execution. \u003cbr\u003e\n\u003cimg width=\"1318\" height=\"343\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/94a8d6e8-fbd5-4a0d-8ca4-d557cb4bfd7a\" /\u003e\n\n#### Forward/Mute on Boolean (Any)\nThis node works the same way as ``Forward/Bypass on Boolean (Any)``, but instead of bypassing the connected nodes it mutes them. The mute state can be controlled with the built-in boolean switch or by linking an external boolean, and changes are applied instantly in the UI.\n\n#### Group Bookmarks\nA UI-only node that adds a collapsible side panel on the right edge of the ComfyUI canvas, listing bookmarked workflow groups. Clicking a bookmark entry centers the canvas on that group and zooms to fit it into view.\n\nClick **\"Manage Bookmarks\"** on the node to open the bookmark manager. The left column shows all groups present in the workflow; clicking one adds or removes it from your active bookmarks on the right. Bookmarks can be organized into named, collapsible **sections** using the **\"+ Add Section\"** button - drag and drop items in the right column to reorder them or move groups into or out of sections. Sections themselves can also be reordered by dragging.\n\nThe side panel can be toggled open and closed via an arrow tab on the right edge of the canvas. Panel visibility, section collapsed state, and the full bookmark list are persisted with the workflow.\n\n#### Power Lora Loader to Prompt (Image Saver)\nThis node acts as a bridge between the **Power Lora Loader (rgthree)** node by [rgthree](https://github.com/rgthree/rgthree-comfy) and the **Image Saver** node by [alexopus](https://github.com/alexopus/ComfyUI-Image-Saver).\u003cbr\u003e\nYou can either **connect a model**, or **provide the id**  or **title** of a `Power Lora Loader (rgthree)` node, along with your prompt as a text string. The node will then **append the LoRAs** in the correct format for the Image Saver node. When you pass this new string to Image Saver as the **positive prompt**, it will save the hashes of the LoRAs for Civitai and other AI platforms while removing the LoRAs from the final string, so your prompt doesn’t look messy.\n\n\u003cimg width=\"1766\" height=\"498\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/cb1d76a7-d638-4573-950e-4ae371d428be\" /\u003e\n\n### Inpaint helper\n#### Fit Image into BBox Mask\nThis node fits an image \u003cb\u003einside the bounding box region of a mask\u003c/b\u003e and places it into a destination image (or a blank canvas). It’s useful for workflows where you want to insert or align a smaller image (e.g. pose, object, logo, patch) into a specific masked region while keeping correct proportions.\nThis node does the following:\n- Detects the bounding box (BBox) of your input mask — that is, the smallest rectangle that covers all white/non-zero pixels.\n- Resizes the source image to fit inside (or cover) that bounding box, preserving aspect ratio.\n- Places the resized image at the corresponding position in the destination image.\n- Outputs the final composited image, a stand-alone fitted image, and a mask showing the exact placed region.\n\nYou can find an example workflow [here](https://github.com/user-attachments/assets/fb344190-206b-4c15-93ae-cac05c8b6740) for the images generated in the gif below(download and drop the workflow image into comfyui).\n\n\u003cimg width=\"1567\" height=\"732\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/ce8aa314-33e0-408f-b1dc-c98f966ea1a4\" /\u003e\n\n\u003cimg width=\"512\" height=\"512\" src=\"https://github.com/user-attachments/assets/8c4d8a46-42e9-4da0-ab72-7d00b5bd7d8f\"/\u003e\n\n## Changelog\n### v.1.8.1\n- fixed ``(Impact-Pack) Multiline Wildcard Text`` wildcard dropdown not resetting after selection, which could make users think only one wildcard could be added per session\n\n### v.1.8.0\n- added new ``Group Bookmarks``-Node in the ``vsLinx/utility`` group. A UI-only node that adds a collapsible side panel on the right edge of the ComfyUI canvas listing bookmarked workflow groups. Clicking a bookmark entry centers the canvas on that group and zooms to fit it into view. Groups can be organized into named, collapsible sections inside the panel. Section collapsed state and panel visibility are persisted with the workflow.\n- fixed ``Image to Pixel Art`` node name to match naming schema and link to actual documentation\n\n### v.1.7.4\n- added full subgraph support to ``Forward/Bypass on Boolean (Any)`` and ``Forward/Mute on Boolean (Any)``: boolean values passed in from outside a subgraph are now correctly resolved inside it at any nesting depth, and nodes outside the subgraph connected to its output are bypassed/muted accordingly\n\n### v.1.7.3\n- added new ``Image to Pixel Art``-Node that converts images to true pixel art via downscaling to a discrete pixel grid, color quantization with fixed historical palettes (GameBoy, Pico-8, CGA, C64, NES) or auto palette, and optional Floyd-Steinberg or ordered Bayer dithering\n- improved ``Forward/Bypass on Boolean (Any)`` and ``Forward/Mute on Boolean (Any)`` upstream boolean resolution: the resolver now recursively walks the full upstream graph at any depth, covering arbitrary pass-through and relay nodes, instead of only handling the known vsLinx AND/OR/Flip nodes. This fixes cases where a linked boolean didn't resolve correctly when chained through one or more intermediate nodes.\n\n### v.1.7.2\n- introduced new setting that is activated by default and fixes global scheduler issues introduced by nodes like RES4LYF that overwrite global scheduler lists which does not work well with subgraphs or other custom nodes, if there's a mismatch this fix will automatically correct the expected list with the input list of the node and prevent erros\n\n### v.1.7.1\n- fixed ``Load Last Generated Image`` node preview getting stuck on a previously drawn mask after using the MaskEditor, then refreshing or auto-refreshing to a new image. Caused by ComfyUI frontend \u003e=1.41 introducing a Vue-based node output store that the MaskEditor writes to; stale clipspace data in that store was overriding the node's preview on every frame. The fix clears the store entry and suppresses the Vue overlay when switching back to an output image.\n\n### v.1.7.0\n- added new ``Load Last Generated Image``-Node as a replacement for ComfyUI's built-in **LoadImageOutput** node. Provides a dropdown of all images in the output folder (newest first), auto-refresh after generation, a manual refresh button, a file upload button, and full MaskEditor support with mask persistence across executions, tab switches, and page reloads. Falls back to a 512×512 black image when no image is available.\n\n### v.1.6.1\n- added filename export for ``Load (Multiple) Images (List)`` and ``Load (Multiple) Images (Batch)`` with a node-property to also dedupe the filename to remove `` (number)`` from the name in case of a duplicate filename \n\n### v.1.6.0\n- added new \"Upscale by Factor (With Model)\"-Node that upscales an image to the desired factor of it's original size by using an upscale model + ``nearest-exact``, ``bilinear`` or ``area`` upscaling to resize the image to the desired factor afterwards\n\n### v.1.5.0\n- added new setting that allows you to add previews for all model loaders (+ rgthree subfolder compatible)\n\n### v.1.4.0\n- added the \"(Impact-Pack) Multiline Wildcard Text\"-Node that provides a simple multiline text field with a wildcard selector that automatically appends selected wildcards. \n\n### v1.3.1\n* fixed a bug where the ``Power Lora Loader to Prompt (Image Saver)`` could not gather the information of the loras if they were qwen, flux or lumina2 (Z-IMG)\n\n### v1.3.0\n* added new ``Power Lora Loader to Prompt (Image Saver)``-Node to the utility group. This Node can read the loras of a Power Lora Loader from rgthree and append them to a text string - this is helpful in combination with the Image Saver Node from alexopus to persist loras \u0026 their weights.\n\n### v1.2.0\n* added documentation including input \u0026 output parameters for every single node, viewable via the in-comfy node info view\n* changed some of the texts in readme \u0026 removed parameter documentation from readme\n* changed folder structure to include docs alongside js\n\n### v1.1.3\n* added new ``Fit Image into BBox Mask``-Node in it's own ``vsLinx/inpaint`` node-library. This node fits an image \u003cb\u003einside the bounding box region of a mask\u003c/b\u003e and places it into a destination image (or a blank canvas). It’s useful for workflows where you want to insert or align a smaller image (e.g. pose, object, logo, patch) into a specific masked region while keeping correct proportions. It's intended to be used in an inpainting process where you'll pre-process this image and execute a controlnet on the masked area. An example and can be found in the node description above.\n\n### v1.1.2\n* The ``Forward/Bypass on Boolean (Any)`` and ``Forward/Mute on Boolean (Any)`` now search for the parent boolean value(s) of the upstream nodes if they're either ``Boolean AND Operator``, ``Boolean OR Operator`` or ``Boolean flip`` to ensure bypassing even if boolean value is passed by a node instead of the in-node switch.\n\n### v1.1.1\n* added ``Forward/Bypass on Boolean (Any)`` that lets you bypass directly connected node(s) based on a boolean value\n* added ``Forward/Mute on Boolean (Any)`` that lets you mute directly connected node(s) based on a boolean value\n* added ``Boolean AND Operator`` that returns true if both of it's boolean inputs are true, otherwise returns false\n* added ``Boolean OR Operator`` that returns true if either of it's boolean inputs are true, otherwise returns false\n* added ``Boolean flip`` that flips a boolean value: True becomes False, False becomes True.\n* added descriptions for the ``Load (Multiple) Images (List/Batch)``-Nodes \n\n### v1.0.1 \n* added ``fail_if_empty`` property in Properties (default true) to stop graph when selection resolves to no images\n* improved runtime errors when files are missing from input (clear “No valid images found…” message)\n* check for removed/missing files against server (HEAD/GET) after load/upload and before preview\n* preview no longer prunes on browser decode failure; it’s best-effort and non-blocking\n* de-duplicate selections (order-preserving) and respect ``max_images`` cap\n* auto-prune missing files from ``selected_paths`` after restarts or external deletions\n* renamed nodes (display names only; IDs unchanged for backward compatibility)\n\n### v1.0.0 \n* initial release","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvslinx%2Fcomfyui-vslinx-nodes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvslinx%2Fcomfyui-vslinx-nodes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvslinx%2Fcomfyui-vslinx-nodes/lists"}