Doss-Node-Suite
Free public ComfyUI custom nodes for the James Doss AI channel.
Nodes (3)
A/B test generations with a slide, right inside the node
Save to an output subfolder, auto-numbered, without breaking the chain
A stopwatch on the canvas that beeps when the render is actually done
Doss Node Suite
Doss Node Suite is a public ComfyUI custom node pack focused on practical visual workflow tools.
GitHub: https://github.com/JamesDanielDoss/Doss-Node-Suite
Current shipped nodes:
- Doss Image Comparer: compares two IMAGE inputs visually and passes IMAGE tensors through.
- Doss Save Image: saves IMAGE batches to the ComfyUI output folder or an output subfolder and passes IMAGE tensors through.
- Doss Workflow Timer and Alarm: displays a live workflow timer on the canvas and optionally plays a completion alarm.
Installation
Clone this repository into your ComfyUI custom nodes folder:
cd C:\AI\ComfyUI\custom_nodes
git clone https://github.com/JamesDanielDoss/Doss-Node-Suite.git ComfyUI-Doss-Node-Suite
Then restart ComfyUI.
Find the nodes by searching for Doss, or browse:
⚡ Doss Node Suite
The node pack loads through the top-level __init__.py and exports:
NODE_CLASS_MAPPINGSNODE_DISPLAY_NAME_MAPPINGSWEB_DIRECTORY
WEB_DIRECTORY points to ./js for the Doss Image Comparer frontend canvas widget, the Doss Save Image Browse button, and the Doss Workflow Timer and Alarm canvas widget.
Nodes
Doss Image Comparer
Category: ⚡ Doss Node Suite
Display name: Doss Image Comparer
Purpose: Compare two ComfyUI IMAGE inputs visually while keeping the node chainable.
Input fields:
| Input | Type | Notes |
| --- | --- | --- |
| image_a | IMAGE | Required first image input. Displays on the left as A / Original. |
| image_b | IMAGE | Optional second image input. Displays on the right as B / Result. |
| comparer_mode | dropdown | Side By Side or Slider. |
Output fields:
| Output | Type | Notes |
| --- | --- | --- |
| image_a | IMAGE | Pass-through first comparison image. |
| image_b | IMAGE | Pass-through second comparison image. Mirrors image_a if no second image is available. |
Behavior:
- If
image_bis connected, the node comparesimage_aandimage_b. - If
image_bis not connected andimage_ahas a batch of at least two images, the node compares the first two images fromimage_a. - If only one image is available, the node shows and returns
image_asafely. Side By Sidedisplaysimage_aon the left andimage_bon the right.Sliderdisplaysimage_aon the left side of the split andimage_bon the right side.Slidershows corner labels:A: Originalat top-left andB: Resultat top-right.- The comparer does not create a persistent floating center preview.
Doss Save Image
Category: ⚡ Doss Node Suite
Display name: Doss Save Image
Purpose: Save images to the normal ComfyUI output folder or an output subfolder while passing the original IMAGE batch through unchanged.
Wire connections:
| Direction | Name | Type |
| --- | --- | --- |
| Input | image | IMAGE |
| Output | image | IMAGE |
Visible UI:
- Large timer dashboard card.
Customizebutton.- Double-click the timer card to open
Customize. - Settings are edited in a popup and stored internally so they persist with the workflow.
Display-only modehides the visible button, keeps internal widgets collapsed, and minimizes the normal ComfyUI node shell as much as LiteGraph allows while keeping double-click customization available.
Stored settings:
| Widget | Type | Notes |
| --- | --- | --- |
| filename | STRING | Default ComfyUI. Invalid Windows filename characters are replaced with _. |
| save_location | STRING | Default output, which means the normal ComfyUI output folder. Subfolders are output-relative, such as Doss Test or portraits/session_01. |
| file_format | dropdown | JPEG, PNG, PDF, WEBP, TIFF, ICO, or BMP. |
| save_metadata | boolean | Attempts to embed available metadata when the selected format supports it. |
| save_metadata_text_file | boolean | Writes a .txt sidecar tied to the full saved image filename, such as ComfyUI.png.txt, with available generation metadata and save details. |
Behavior:
- The Browse button only browses folders inside the normal ComfyUI output directory.
output,output/, and an empty value all resolve to the base ComfyUI output folder.- Absolute paths, drive letters,
..traversal, and paths outside output are rejected. - Existing files are not overwritten; names auto-increment like
ComfyUI.png,ComfyUI(1).png,ComfyUI(2).png. - Batches save every image using the same settings.
- JPEG and PDF flatten transparency onto white.
- PNG and WEBP preserve transparency when possible.
- ICO saves one 256x256
.icofile per batch image. - No quality or compression sliders are exposed.
Doss Workflow Timer and Alarm
Category: ⚡ Doss Node Suite
Display name: Doss Workflow Timer and Alarm
Purpose: Display a live workflow timer directly on the ComfyUI canvas and optionally play a generated completion alarm.
Wire connections:
None. This is a visual utility/display node only.
Widgets:
| Widget | Type | Notes |
| --- | --- | --- |
| timer_label | STRING | Default Workflow Timer. |
| show_timer_label | boolean | Shows or hides the small title/label text on the timer card. |
| show_status | boolean | Shows Ready, Running, Complete, Error, or Canceled. |
| show_milliseconds | boolean | Adds milliseconds to the timer display. |
| hide_node_ui | boolean | Internal persisted setting for user-facing Display-only mode. |
| font_size | integer | Timer value size, range 12 to 96. |
| font_color | STRING | Default #ffffff; edited with preset swatches including transparent. |
| background_color | STRING | Default #111111; edited with preset swatches including transparent. |
| background_opacity | float | Default 0.85, range 0.0 to 1.0. |
| border_color | STRING | Default #3b82f6; edited with preset swatches including transparent. |
| border_radius | integer | Default 8, range 0 to 32. |
| alarm_enabled | boolean | Plays a completion sound after successful workflow completion. |
| alarm_sound | dropdown | Ping or Beep. |
| alarm_volume | integer | Default 70, range 0 to 100. |
Behavior:
- Starts on ComfyUI
execution_start. - Updates live while the workflow is running.
- Stops on ComfyUI
execution_successand shows the final elapsed time. - Shows Error or Canceled when ComfyUI emits those states.
- Does not treat
executingwith a null node as workflow completion. - Transparent background skips the card fill, and transparent border skips the border stroke.
Show title/labelcontrols whether the small timer label text is drawn; the main timer remains visible.- Display-only mode tightens the node size, hides the title text/button, minimizes the normal node shell, allows dragging from the timer card, and keeps double-click customization available.
- Uses generated browser audio only; no external audio files are required.
- Does not play audio if the alarm is disabled or volume is
0.
Example Workflow
A minimal placement/test example is included at:
examples/doss_image_comparer_example.json
examples/doss_save_image_example.json
This example is only for placing and testing the node. It is not a production workflow pack.
Validation
Run the unit tests from the repository root:
python -m unittest discover -s tests
python -m pytest
Manual ComfyUI validation:
- Install the repo into
ComfyUI/custom_nodes/ComfyUI-Doss-Node-Suite. - Restart ComfyUI and confirm no import errors appear in the console.
- Search for
Doss Image Comparer. - Connect two IMAGE outputs to
image_aandimage_b. - Queue the prompt and confirm the node displays Side By Side inside the node.
- Switch to
Sliderand confirm the slider stays inside the node. - Confirm no
Clickmode appears and noselected_imageoutput exists. - Confirm no console errors prevent ComfyUI from loading.
- Search for
Doss Save Image. - Confirm only
imageinput andimageoutput wire connections exist. - Click Browse and confirm only ComfyUI output folders can be selected.
- Save a PNG batch and confirm auto-incremented filenames.
- Try invalid filename characters and confirm this warning appears:
Bad filename due to special characters. Characters have been changed to underscores "_". - Search for
Doss Workflow Timer and Alarm. - Confirm it has no input or output wire connections.
- Confirm the node shows a large clean timer display and a
Customizebutton. - Confirm
Customizeopens a modal with color swatches instead of browser color picker inputs. - Confirm double-clicking the timer card opens
Customize. - Confirm transparent background and transparent border work.
- Confirm
Display-only modehides the button, minimizes the normal node chrome, and double-click still opensCustomize. - Queue a workflow and confirm the timer changes Ready -> Running -> Complete only after the workflow is truly complete.
- Confirm the completion alarm plays only when enabled and volume is above
0.
License
MIT. See LICENSE.