CivArchive
    Preview 296076
    Preview 296075
    Preview 296074
    Preview 296073
    Preview 296072
    Preview 296071
    Preview 296070
    Preview 296069
    Preview 296068


    WAS Node Suite has been going since 2023 on Civitai and on GitHub, and was among the first packs to put hundreds of nodes into users' hands. WAS-NS has over a million downloads, and is used by thousands of users daily. It has been MIT since the first commit: use it, change it, teach with it, or run it in paid services.

    The pack contains 457 nodes for ComfyUI, across images, filters and colour, masking, text and prompts, logic and flow, numbers, latents and sampling, files, animation and video.

    See NODES.md for reference.

    Consider donating to the project to help me afford caffeine.

    Installation

    ComfyUI Manager, search for WAS Node Suite v3 and install v3.x.x. This is the recommended route.

    Manually, clone into custom_nodes:

    cd ComfyUI/custom_nodes
    git clone https://github.com/WASasquatch/was-node-suite-comfyui.git

    Requires ComfyUI 0.14.0 or newer and Python 3.10+.

    That is the whole install. Nothing is installed, downloaded or built, now or on any later start. The pack never runs pip on its own.

    The first start takes a second or two longer than the rest. Your config.yaml, the state database and the wildcard, LUT and view-extension folders are written under <ComfyUI user dir>/was-node-suite/, and python compiles the pack to bytecode. On the install this was measured on that is 1.4 seconds the first time and around 0.25 seconds on every start after. An update recompiles, so it happens once more each time you pull.

    One optional group wants packages and ships off: document_export, which lets Save DOC write .docx, .odt and .pdf.

    # portable ComfyUI, from the ComfyUI_windows_portable directory
    python_embeded\python.exe -m pip install -r ComfyUI\custom_nodes\was-node-suite-comfyui\requirements\document_export.txt

    Then set document_export: true under features: in config.yaml. docs/CONFIG.md has every group, what it needs and what it gates.


    What Changed in v3

    • Expanded from 220 to 457 nodes, adding 241 new nodes across the suite.

    • Zero packages installed by default, down from 20 in v2.

    • Zero dependencies installed from Git URLs, down from 3 in v2.

    • No automatic pip installs, downloads, or builds during installation or startup.

    • 216 of the original 220 node IDs remain unchanged, keeping the vast majority of existing workflows compatible.

    • Replaced dependency-heavy functionality with native Torch implementations running on ComfyUI's own device.

    • Removed default reliance on OpenCV, numba, rembg, timm, scipy, scikit-image, scikit-learn, and matplotlib.

    • Added 22 configurable optional node groups through config.yaml, with 8 disabled by default.

    • Added per-node disable controls for more granular installations.

    • Third-party resources are now bundled directly in the repository with their licenses, with nothing fetched from Git at runtime.

    241 New Nodes

    • 43 Three.js scene nodes — construct 3D scenes from nodes, preview them directly in ComfyUI, render/path trace to image batches, and export standalone browser scenes.

    • 28 file, archive, and document nodes — ZIP archives, folder processing, six document formats, and content viewing.

    • 24 logic and flow nodes — boolean reduction, condition chains, typed switches, for loops, and while loops.

    • 20 layer nodes — build and manipulate layer stacks with effects, arrangement tools, and an interactive node canvas.

    • 10 bounds nodes — represent image regions as values, measure them, draw them, crop to them, and paste processed results back.

    • 9 HDR and linear-light nodes — preserve values above white, process HDR data through filters, and read/write EXR and DNG.

    • 107 additional nodes covering image transforms, LUTs and color processing, masks, numbers, text, lists, dictionaries, samplers, LoRA stacks, animation, prompt terminology, and style libraries.

    Major Architecture Changes

    • Face detection now runs through Torch-based implementations instead of requiring OpenCV.

    • Gradient maps now run natively without OpenCV.

    • Background removal, frame interpolation, seamless textures, color matching, levels, palettes, masks, and deconvolution have been moved to Torch/ComfyUI-native processing.

    • Optional functionality is isolated behind feature groups instead of forcing every dependency onto every installation.

    • Bundled browser libraries, fonts, face cascades, model weights, and networks are stored locally with their respective licenses.

    • Network access is disabled by default; nodes requiring unavailable weights report what is missing instead of silently downloading files.

    Workflow Compatibility

    • No existing node ID was renamed.

    • 216 of 220 v2 node IDs continue unchanged.

    • Four retired nodes have direct replacements available through ComfyUI's missing-node replacement system.

    • Existing saved wiring and settings are migrated where applicable.

    • 36 true / false dropdowns have been modernized into checkboxes.

    • 14 nodes with limited input slots now support up to 24–26 slots dynamically.

    • Batch nodes now include a count output.

    • Several node display names were clarified to avoid collisions with core ComfyUI nodes while retaining their underlying IDs.

    Better In-Node Visualization

    • 188 nodes now visually display their work directly on the graph, including:

      • Image comparisons

      • Histograms

      • File and loader information

      • Color ramps

      • 3D scene previews

      • Text editors

      • Interactive contact sheets

      • Other task-specific visual interfaces

    Description

    • Changes name of file 'Canny_Filter_WAS.py' to 'Image_Canny_Filter_WAS.py` be sure to remove the old version.

    • Fixes the edge enhancement to be a range of 0 to 1 where 0 is no effect.

    • Fixes the Image Blend node to be a range of 0 to 1, where 0 is no effect (was reversed)

    • Adds Image Blank - Create blank images in any RGB color

    • Adds the Nova Filter - The nova filter uses some trig to break up a image into different RGB color components, which can be used with other nodes to create image style effects.

    • Adds Film Grain - Add film grain to images with highlighting and super sampling (for better quality noise)

    • Adds Image Flip - Flip horizontal or vertical

    • Adds Image Rotate - Rotate images

    FAQ

    Comments (23)

    ctdde466Mar 21, 2023· 2 reactions
    CivitAI

    Can you go to github and be a contributor to comfyui directly? I think the seed node is one of the most requested things. It should be standard. And the samplers should have an option to receive input from a seed node or not.

    I think having multiple samplers in one "pass" is one of the biggest advantages over other UIs like automatic.

    Great work.

    MeyrinkMar 21, 2023

    Multiple samplers is also why I stopped using automatic. ComfyUI let's you do amazing things. For instance, I don't even know if you can do area composition in automatic at all.

    ctdde466Mar 21, 2023· 4 reactions

    @Meyrink Yeah you can do sort of an area composition with automatic with an extension called latent couple, but its more like the latent composite of comfyUI and you get alot of bleeding of prompt text.

    I did some tests trying to recreate some of the stuff I was doing in comfy, but they both function so differently that its nearly impossible.

    In Auto you have to assign weights to the areas you specify where in comfy you can only do that if you set up all areas, including the background.

    Although I wish Comfy had a similar tool like automatic has. There is an overlay python program that calculates the areas with grids to use in the latent couple extension. With this https://github.com/Zuntan03/LatentCoupleHelper

    But since comfy is pretty new, I suspect there will be alot of changes and quality of life additions.

    Automatic is more of a oneshot UI where you have to send you image around to do certain things, whereas in comfy you can set everything up form the beginning and just click a button and it goes through all the steps.

    Hell, you can even make an img2img chain manipulating your picture with multiple different models. In automatic you would have to change the model manually every time for every picture for every step.

    WAS
    Author
    Mar 22, 2023

    @ctdde And the models load really fast when setting up a job utilizing multiple models, and AI models, etc.

    I have been watching the repo and seeing how it matures. I have some concerns. I don't understand the web and server side well, and it looks like the project is mainly abandoned by 2 years, while still lacking a lot of functionality, requests, and even some bug-level issues (like groups being draggable by anywhere instead of a header or some sort of triggering mechanism like holding a key down.

    MeyrinkMar 22, 2023
    CivitAI

    Would it be possible to host these on huggingface so I can use them with google colab?

    WAS
    Author
    Mar 22, 2023· 1 reaction

    I was going to host on github soon, you could then download the raw AIO node from there (new file with everything in it)

    Bunch more nodes coming with it too like text editing.

    MeyrinkMar 22, 2023· 1 reaction

    @WAS Awesome, thank you so much! You rock!

    gamertMar 22, 2023
    CivitAI

    Bug find : If batch_size>1,It will raise exception.

    Great Work!!!

    WAS
    Author
    Mar 22, 2023

    Ah, yes, most all these are for post processing, which expects a single image. I could add batching, but depending on what people are doing, like adding film grain, or nova, etc, it would take ages to do all the images if they had a batch of 6-12.

    Biggest issue is any operation requiring PIL/CV2 requires converting the tensors to images in a loop, but then there isn't a way that I am aware of to cat the tensors back together without knowing how many, and manually writing it.

    3DEMar 22, 2023

    @WAS maybe convert batch to single images? Like pick one you want from batch? Be more work but could then use batches

    gamertMar 23, 2023

    @WAS yeal, Such as Game-Concept-Art need batching 6-10 for a Color-Script-Contronet output :)

    WAS
    Author
    Mar 23, 2023

    @gamert I tried doing some batching on the heavy nodes and to test and it really isn't worth it from an end user perspective with single threaded operations like image editing. I think it's best to have a batch to image so you can select a image from a batch and run it through a post processing nodes setup.

    gamertMar 23, 2023

    @WAS Last night I had the same idea as your "converting the tensors to images in a loop", then vice versa . May be Itis the cheapest implemention. :)

    WAS
    Author
    Mar 23, 2023

    @gamert I made a request to not use tuple outputs since they can't be modified, added to, removed, etc and not suited for something like passing data to manipulate.

    WAS
    Author
    Mar 26, 2023

    @gamert I've added a node which you can use to select images out of a batch to do processing on. I have also add a Load Image Batch node.

    gamertApr 6, 2023

    @WAS aha, Great~ Thank you:)

    Ragamuffin20Aug 20, 2023

    @WAS is there a guide for the load image batch because im only ghetting single images with it

    WAS
    Author
    Aug 20, 2023

    @Ragamuffin20 No guide. But did you change it to increment and not Single Image mode?

    omar92Mar 23, 2023· 1 reaction
    CivitAI

    hi it is me , on my last update on my tool i was able to create text image , i wanted to use your canny filter with it so i can use the output on control net but all vea tools wont accept the canny output and gives weird error may i ask that you check it , i wanted to add reference to your tool as a requirement for that usecase

    WAS
    Author
    Mar 23, 2023

    Yeah I'll check it. Probably forgot to change it's mode or something.

    WAS
    Author
    Mar 23, 2023

    Can you post the error you got?

    omar92Mar 23, 2023· 1 reaction

    @WAS Traceback (most recent call last):

    File "F:\ComfyUI_windows_portable\ComfyUI\execution.py", line 174, in execute

    executed += recursive_execute(self.server, prompt, self.outputs, x, extra_data)

    File "F:\ComfyUI_windows_portable\ComfyUI\execution.py", line 54, in recursive_execute

    executed += recursive_execute(server, prompt, outputs, input_unique_id, extra_data)

    File "F:\ComfyUI_windows_portable\ComfyUI\execution.py", line 54, in recursive_execute

    executed += recursive_execute(server, prompt, outputs, input_unique_id, extra_data)

    File "F:\ComfyUI_windows_portable\ComfyUI\execution.py", line 63, in recursive_execute

    outputs[unique_id] = getattr(obj, obj.FUNCTION)(**input_data_all)

    File "F:\ComfyUI_windows_portable\ComfyUI\nodes.py", line 683, in sample

    return common_ksampler(model, seed, steps, cfg, sampler_name, scheduler, positive, negative, latent_image, denoise=denoise)

    File "F:\ComfyUI_windows_portable\ComfyUI\nodes.py", line 652, in common_ksampler

    samples = sampler.sample(noise, positive_copy, negative_copy, cfg=cfg, latent_image=latent_image, start_step=start_step, last_step=last_step, force_full_denoise=force_full_denoise, denoise_mask=noise_mask)

    File "F:\ComfyUI_windows_portable\ComfyUI\comfy\samplers.py", line 443, in sample

    samples = uni_pc.sample_unipc(self.model_wrap, noise, latent_image, sigmas, sampling_function=sampling_function, max_denoise=max_denoise, extra_args=extra_args, noise_mask=denoise_mask)

    File "F:\ComfyUI_windows_portable\ComfyUI\comfy\extra_samplers\uni_pc.py", line 880, in sample_unipc

    x = uni_pc.sample(img, timesteps=timesteps, skip_type="time_uniform", method="multistep", order=order, lower_order_final=True)

    File "F:\ComfyUI_windows_portable\ComfyUI\comfy\extra_samplers\uni_pc.py", line 731, in sample

    model_prev_list = [self.model_fn(x, vec_t)]

    File "F:\ComfyUI_windows_portable\ComfyUI\comfy\extra_samplers\uni_pc.py", line 422, in model_fn

    return self.data_prediction_fn(x, t)

    File "F:\ComfyUI_windows_portable\ComfyUI\comfy\extra_samplers\uni_pc.py", line 404, in data_prediction_fn

    noise = self.noise_prediction_fn(x, t)

    File "F:\ComfyUI_windows_portable\ComfyUI\comfy\extra_samplers\uni_pc.py", line 398, in noise_prediction_fn

    return self.model(x, t)

    File "F:\ComfyUI_windows_portable\ComfyUI\comfy\extra_samplers\uni_pc.py", line 330, in model_fn

    return noise_pred_fn(x, t_continuous)

    File "F:\ComfyUI_windows_portable\ComfyUI\comfy\extra_samplers\uni_pc.py", line 298, in noise_pred_fn

    output = sampling_function(model, x, t_input, **model_kwargs)

    File "F:\ComfyUI_windows_portable\ComfyUI\comfy\samplers.py", line 195, in sampling_function

    cond, uncond = calc_cond_uncond_batch(model_function, cond, uncond, x, timestep, max_total_area, cond_concat)

    File "F:\ComfyUI_windows_portable\ComfyUI\comfy\samplers.py", line 170, in calc_cond_uncond_batch

    c['control'] = control.get_control(input_x, timestep_, c['c_crossattn'], len(cond_or_uncond))

    File "F:\ComfyUI_windows_portable\ComfyUI\comfy\sd.py", line 454, in get_control

    self.cond_hint = resize_image_to(self.cond_hint_original, x_noisy, batched_number).to(self.control_model.dtype).to(self.device)

    File "F:\ComfyUI_windows_portable\ComfyUI\comfy\sd.py", line 413, in resize_image_to

    tensor = utils.common_upscale(tensor, target_latent_tensor.shape[3] 8, target_latent_tensor.shape[2] 8, 'nearest-exact', "center")

    File "F:\ComfyUI_windows_portable\ComfyUI\comfy\utils.py", line 5, in common_upscale

    old_width = samples.shape[3]

    IndexError: tuple index out of range

    WAS
    Author
    Mar 23, 2023· 1 reaction

    @omar92 Fixed in latest version. Reason was output wasn't correct.

    Should have been:
    return ( pil2tensor(image_canny), )

    Or:

    return ( torch.from_numpy(np.array(image_canny).astype(np.float32) / 255.0).unsqueeze(0), )