Doss Node Suite
Custom ComfyUI nodes for practical image, LoRA, workflow timing, and LTX-2.5 motion-control workflows.
Nodes (7)
A/B test generations with a slide, right inside the node
The LTX control panel that stops you from counting frames by hand
Draw the motion path on the actual frame — LTX steering, minus the guesswork
Turning your scribbled motion paths into the one coordinate per frame LTX actually reads
Stop daisy-chaining LoRA loaders — this node stacks them in one place
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 Label Maker: adds fully customizable, resizable free-floating text to the workflow without entering prompt execution.
- Doss Image Comparer: compares two IMAGE inputs visually and passes IMAGE tensors through.
- Doss Motion Settings | LTX 2.5: exposes curated prompt, timing, seed, motion, adherence, and FPS controls with derived frame math.
- Doss Motion Studio | LTX 2.5: draws named motion paths over the upstream starting image before generation.
- Doss Resolve Motion Tracks | LTX 2.5: validates and converts normalized paths into one LTX coordinate per frame for the official LTX motion path.
- Doss Multi-LoRA Loader: adds, removes, enables, and weights an ordered stack of installed LoRAs inside one loader node.
- Doss Save Image: saves IMAGE batches to the ComfyUI output folder or an output subfolder, displays saved image previews inside the node, 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 <ComfyUI installation>\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 Doss Canvas Label, the Doss Image Comparer, Doss Multi-LoRA Loader, LTX Motion Studio, LTX Motion Settings, Doss Save Image, and Workflow Timer frontend interfaces.
Nodes
Doss Label Maker
Category: ⚡ Doss Node Suite
Display name: Doss Label Maker
Purpose: Add fully formatted free-floating text to the workflow canvas. The frontend-only virtual node is saved in workflow JSON but has no sockets, does not execute, and consumes no generation resources. When deselected, only its text is drawn. A single click shows a temporary selection outline and bottom-right resize handle; clicking elsewhere removes them. Double-click anywhere inside the text area to open the full editor for content, more than 80 curated installed-font choices, custom fonts, color, opacity, style, weight, explicit condensed/expanded stretch, case, alignment, direction, line height, letter/word spacing, indentation, wrapping, underline, strikethrough, small caps, kerning, text outline, and shadow. Explicit checkboxes enable Outline, Shadow, and Shadow Blur; enabling one provides a visible starting value and unlocks its related controls. Large text is scaled to fit the editor preview and the canvas bounds expand as needed to prevent clipping. See docs/doss_canvas_label.md.
Doss Motion Node | LTX 2.5
Category: ⚡ Doss Node Suite/LTX-2.5
The divider makes the ownership boundary explicit: Doss supplies the control nodes, while LTX 2.5 and the Motion Track workflow are Lightricks technology. Motion Settings, Motion Studio, and Resolve Motion Tracks form one companion set for that official workflow. Motion Studio displays the upstream Load Image selection before a run, stores portable normalized paths, and blocks stale or invalid plans. The resolver creates one official-format coordinate per frame. See docs/doss_ltx_motion.md for the full interface and compatibility boundary.
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 Multi-LoRA Loader
Category: ⚡ Doss Node Suite
Display name: Doss Multi-LoRA Loader
Purpose: Apply multiple compatible LoRAs to one MODEL and CLIP pair without chaining separate loader nodes.
- Click
+ Add LoRAto create a row. - Select an installed LoRA, set its separate MODEL and CLIP weights, and use the checkbox to enable or visibly subdue/bypass it.
- Remove rows with
×and reload the installed inventory withRefresh. - Rows execute from top to bottom and persist in the workflow JSON.
- Invalid JSON, missing files, unsupported stack versions, and incompatible LoRAs fail instead of silently substituting another file.
See docs/doss_multi_lora_loader.md.
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, show saved image previews inside the node, and pass the original IMAGE batch through unchanged.
Wire connections:
| Direction | Name | Type |
| --- | --- | --- |
| Input | image | IMAGE |
| Output | image | IMAGE |
Visible UI:
filename,save_location,file_format,save_metadata, andsave_metadata_text_filewidgets.Browsebutton for choosing output-relative folders.- Saved image previews below the widgets/parameters after execution, using ComfyUI's standard image preview payload.
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.
- Batches display every saved image in the node preview list after execution.
- JPEG and PDF flatten transparency onto white.
- PNG and WEBP preserve transparency when possible.
- ICO saves one 256x256
.icofile per batch image. - PDF and ICO files are returned in the standard preview payload, but ComfyUI/browser image preview support for those formats may be limited.
- 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.
- Confirm saved image previews display inside Doss Save Image below the widgets/parameters.
- Confirm downstream nodes still receive the original IMAGE through the
imageoutput. - 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.