CLICK EXPAND AND READ ME PLZ!
This ComfyUI workflow generates a Model Card for showcasing checkpoints or LoRAs.
A rewrite of the Model Card workflow by @Stevie2k8
V4 Beta 2
V4 Beta 2 is another complete rewrite to reduce memory usage and complexity.
This version uses Flow Control techniques together with Autoqueue in order to perform different actions separately in a controlled order.
Intermediary steps produce images that are saved into a project folder.
This version uses my custom IndustrialMagick node that requires you to install ImageMagick on your machine. This is an opensource command line application similar to photoshop or gimp, which is much more powerful and optimized than image manipulation within comfyUI.
Looking for feedbacks before adding more features.
Common issue resolution:
1. project folder not created
I use ComfyUI save node to create the project folder inside your ComfyUI output directory by saving an empty image.
The output directory path can be changed by modifying your run_cpu.bat or run_nvidia_gpu.bat start file. (these files only exist on ComfyUI Portable for windows)
By default, it is located in: `...\ComfyUI_windows_portable\ComfyUI\output`If the creation fails, which it should not, you can create the directory manually.
2. Error at the grid creation stage
You can check the actual image magick error in the logs in the comfyui cmd window before the same message as displayed in the error popup.
From my experience debugging the workflow, I believe the error will be because image magick cannot open one of the row_xx.png files listed in the rows.txt list file.
In that case, hit 0 or reset the view to go back to the control panel, below from the control flow group, you have a box to provide the absolute path to your comfyUI output directory. Please check that the path is valid.
You can also go to the project folder and open the rows.txt file to double check the paths of all row images.
3. Error at the card creation stage
This should not happen, but did happen in debugging and was corrected.
If the flow controls is not set properly or if you disable the random number generators, ComfyUI may skip the header or grid generation because their parameters did not change.
If this issue presents itself to you, you can disable the autoqueue, set the header and grid controllers to active, set the loopCount to the number of selected rows plus one (27 if you selected all 26 prompt groups) and queue. It will generate the header and grid, then you can set all values as before but also enable the card controller, generation will happen without error this time.
V4 Beta 2 Flow Control explanation:
Flow control serves two purposes in V4 beta 2.
Order of generation
You will notice a chain from the loop count value all the way to the autoqueue. That's called the signal. This is a technique to enforce that several steps happen before others.
Workflow routing
This workflow is designed to queue itself twice before starting to generate row images and once after. Before each queue the loop counter value will update and the workflow will activate or deactivate multiple stages.
Before I describe the order of operations, let's define some terms:
loopCount: is an integer value starting at -1. It keeps track of the current iteration. It acts as an index in a programmatic loop. It's maximum value will be one more than the number of prompt groups you select to generate, so if you select 3 it will be 4.
N: represents the number of prompt groups selected. loopCount maximum value will be N+1.
Controllers: ComfyUI has a specific order of operations. It will only execute nodes in a branch that ends with a saving or preview node.This allows us to activate or deactivate a route or diagram branch by disabling the saving or preview node at its end. I have put these nodes into separate groups called controllers.
In the following flow explanation, I will write [autoqueue] to represent the last action in a workflow. That action is different whether you have activated the autoqueue option in the workflow or not. In the former case, it corresponds to the last node in the workflow queueing itself, in the latter, it corresponds to you the user queueing the workflow at the end of its execution.
Flow control works as follow:
Before you queue for the first time, ensure that:
all controllers are set to NO (disabled).
the value of loopCount is set to -1
You queue once.
STEP -1
The workflow enables two controllers:
folder creation
rows.txt text file reset
The workflow updates the value of loopCount to 0.
[autoqueue]
STEP 0
The workflow runs:
folder creation
rows.txt text file reset
The workflow disables two controllers:
folder creation
rows.txt text file reset
The workflow enables three controllers:
row
row2
save row image name to rows.txt
The workflow updates the value of loopCount to 1.
[autoqueue]
STEP 1 to STEP N-1
The workflow runs:
row
row2
save row image name to rows.txt
The workflow updates the value of loopCount by 1.
[autoqueue]
STEP N
The workflow runs:
row
row2
save row image name to rows.txt
The workflow disables three controllers:
row
row2
save row image name to rows.txt
The workflow enables three controllers:
header
grid
card
The workflow updates the value of loopCount to N+1.
[autoqueue]
STEP N+1
The workflow runs:
header
grid
card
The workflow disables three controllers:
header
grid
card
The workflow updates the value of loopCount to -1.
No queue, the workflow executed completely.
V4 Beta 1
I am trying to reduce the memory load from V3.
In V4 I saw significant reduction of the RAM in use after an initial peak.
Looking for feedbacks before adding more features.
V3 Status
Issues:
Group Average gen times: check formula
Global generation times: not working, issue with lists
VRAM hungry
Description
This workflow generates a customizable Model Card.
Header
Can be toggled on or off entirely.
Logo to the left, toggable.
Generation info.
Baner to the right, toggable.
Grid body
Customizable number of columns (recommended values: 1 or 2).
Toggable prompt groups (26).
Customizable max number of images per group (recommended <8).
Supports groups of different sizes.
Each group prints one headline.
Each group may print one description.
Each image in group prints a label.
V3 exclusive
Each image may print a generation time, toggable.
(broken) Each group may print a total or average generation time.
(planned) Total or global average generation time may print to the header.
Use
You may clone this repository into the
pysssss-workflowsComfyUI subdirectory.Load the
.jsonfile.Install missing nodes using the ComfyUI Manager.
(V3) Install my custom node "KSamplerTimer" for Version 3.
Set checkpoint settings.
Set default sd1.5 & sdxl image sizes.
Set LoRA settings if needed.
Set template (columns).
Toggle groups to generate.
(V2) Toggle "just the right amount" of "batch"es.
(Recommended) Disable generation and dry fire.
Queue workflow
FAQ
I cannot find the custom node "workflow/xxx".
This workflow uses "group nodes" which is a built in feature that groups nodes together. If a group node is red, it's most likely because you are missing a custom node inside the group node. Try installing missing custom nodes from the ComfyUI Manager.
Alternatively, inspect the missing node errors in the ComfyUI console to find which custom nodes to install.
Changes
V 3.0.2
Updated Hair prompts
Updated Headlines
Updated Descriptions
Updated Labels
Fixed bugs:
Mismatched Headlines.
Mismatched negative prompts.
Mismatched labels.
V 3.0.1
Fixed bugs
V 3.0.0
Complete refactor.
Swapped native KSampler for custom KSamplerTimer.
Supports batch generation with checkpoints configuration from file.
Exposes negative prompts and seeds to user.
Generates all images in one sampler run (list not batch). => Always regenerates all images.
Adds ability to print generation times.
Improved GUI:
Toggles are black.
Anything Everywhere declarations are gold.
Number of column is red.
Save location controls moved to top.
Custom LoRA controls moved to top.
Reorganized variable columns.
Fixed bugs
V 2.0.0
Refactor.
Swapped multiple custom nodes (maths, simple & multiline strings).
Improved GUI:
Reorganized nodes in columns by functions.
Color coded node groups.
Annotations for users.
Removed save to jpg.
Description
Much lighter on memory.
Using Image Magick.
FAQ
Comments (17)
I really love that you have continued to update this workflow. There are many quality techniques used in it which can be learned and applied in other workflows. Keep it up :D
Thank you! I may not update often since I’m busy with other projects, but I still aim to get all V3 features into V4, without the memory issues.
By the way, my two custom nodes (ksampler timer & Industrial Magick) are now available from the Manager.
Feedback on V4 Beta 2 wanted!
I had trouble getting V3 working and eventually gave up on that version.
I appreciate the V4 beta updates have written instructions. I've encountered trouble at Step 4 when trying to generate my first model card. It looks like the specific folder for the model.card.checkpoint_name isn't automatically created. Since that folder isn't created it isn't able to read or write the rows.txt file. I got around that issue by manually creating the folder.
I am still a bit unclear on the flow control options. After the first queue prompt is run it looked like three options were selected for "Enable row controller", "Enable Generate Row Controller 2", and "Enable Save row image name to list file controller". I had enabled groups 14 and 15 for Foods and Animals. The first execution created row_14 output but subsequent runs did not appear to do anything. I manually disabled group 14 and row_15 was generated. Queuing the prompt again changed the flow control options to "Enable grid controller", "Enable header controller", and "Enable Generate card controller".
Error occurred when executing IndustrialMagick:
local variable 'image' referenced before assignment
File "C:\Users\epsc8\ComfyUI\execution.py", line 152, in recursive_execute
output_data, output_ui = get_output_data(obj, input_data_all)
File "C:\Users\epsc8\ComfyUI\execution.py", line 82, in get_output_data
return_values = map_node_over_list(obj, input_data_all, obj.FUNCTION, allow_interrupt=True)
File "C:\Users\epsc8\ComfyUI\execution.py", line 75, in map_node_over_list
results.append(getattr(obj, func)(**slice_dict(input_data_all, i)))
File "C:\Users\epsc8\ComfyUI\custom_nodes\ComfyUI_IndustrialMagick\industrial_magick.py", line 77, in execute
return (image,"","Error processing your command. Check ComfyUI logs.",)
I feel that my understanding of comfyUI is too shallow to provide better feedback on your workflow. I am still trying to learn.
@epsc8 Hello and thank you for your comment.
The folder should be created automatically. Perhaps you need to ensure that the absolute path you provide is the same as the output dir that you configured in your comfyUI install. (usually you can override the location in your run_xxxx.bat file (cpu or nvidia_gpu).
The error message you got only says that imagemagick run into an error. The exact error should be logged in your comfyui cmd window before the same message.
But from debugging the workflow, I am pretty sure this is because the grid generator or the card generator steps did not find previous steps outputs, namely, the rows for the former or the grid for the latter.
Flow control works as follow:
You start with all controllers disabled and loopcount at -1.
You queue once.
The workflow will do nothing but enable the controllers for the folder creation and for the rows.txt file reset.
Loop count updates to 0.
[autoqueue] (<- this means that you have autoqueue enabled in the workflow and it queues itself, or you have it disabled and you need to queue manually)
The workflow will run the folder creation and the rows.txt reset tasks.
The workflow will disable current controllers and enable 3 others: row, row2 and save row name.
Loop count updates to 1.
[autoqueue]
Let's say you have selected 2 prompt rows, then N will be the number of selected rows, that is N=2.
While loopcount is between 1 and N-1, the same steps will happen:
The workflow runs the row generation, saves the row image and writes the name of the row inside the rows.txt file.
No change to the states of controllers.
Loop count increments by one.
[autoqueue]
At loopcount == N, there is a change of controllers state before autoqueue:
Row, Row2 and save row name are disabled.
Header, grid and card are enabled.
At loopcount = N+1
The workflow will generate the header.
The workflow reads the list of rows from the rows.txt file and generates the grid. saving it as grid.png.
The workflow gets the header from the temp folder and the grid.png from the project folder to create the card that it saves as card.png (no embedded workflow as this is in image magick) then it saves the model_card_xxxxx_.png using comfyui save node to embed the workflow.
The workflow disables header, grid and card controllers.
Loop count resets to -1.
No queue.
I added a detailed explanation of how V4B2 works in the description. Click "show more" to read.
Also added some common issue resolutions.
V3 workflow: The Manager does not offer the means to install these nodes: Get latent size, workflowmathWrappedInteger, workflowmathWrappedFloat, workflowPrompt Processor, Integer. It's simply impossible to test the workflow unless you specify which extensions are required.
Update: After installing the first requirement of the V4 workflow, this V3 workflow shows this error on load:
Loading aborted due to error reloading workflow data
TypeError: self2.groupData.oldToNewWidgetMap[n] is undefinedGroupNodeHandler/this.node.onNodeCreated@http://127.0.0.1:8188/assets/index-Ba7IybyO.js:1708:32 createNode@http://127.0.0.1:8188/assets/index-CoOvI8ZH.js:39986:12 configure@http://127.0.0.1:8188/assets/index-CoOvI8ZH.js:39049:32 #addConfigureHandler/LGraph$1.prototype.configure@http://127.0.0.1:8188/assets/index-CoOvI8ZH.js:88029:26 init/LGraph.prototype.configure@http://127.0.0.1:8188/extensions/ComfyUI-Custom-Scripts/js/reroutePrimitive.js:14:29 loadGraphData@http://127.0.0.1:8188/assets/index-CoOvI8ZH.js:88529:18
Believe me when I tell you I've really tried to test the workflow, and I'm a PHP programmer, but the amount of third party nodes in this workflow is way beyond what we would call reasonable. Kindly double check if there are (new) core nodes that can do the same tasks as at least half a dozen of your current extensions please. Also, tips to get the missing nodes will be appreacited, thanks.
This is an old workflow now. With how updates on ComfyUI often break community nodes, I am not surprised that you may find it hard to set it up. Community nodes can also change without notice.
If I have time (which I doubt) I'll have a look one day to document all required dependencies for a clean install, including a specific ComfyUI commit (version).
V4 workflow: I've stopped trying to test it the second I found out it requires some external ImageMagic setup. A Lite version, just to test loras of different subjecs like a standard model card, would be really appreciated. If possible, not requiring more than 25 custom nodes. I'm sure out of the box core nodes should be enough for basic model cards with different prompts.
Working in ComfyUI only is quite a challenge really. ImageMagick solved a lot of issues with image manipulation, loading and memory. It's free and opensource. If you find alternatives using PIL in python you could swap the nodes.
I don't tihnk I could adapt this workflow to vanilla ComfyUI several custom nodes provides really useful features or hacks.
Man you tutorial video was a funny surprise, its awesome. How did you make the singer explain your tutorial with jazz music? i am curious to know :)
Hi.
I recorded and cut the video first recording a standard voice over to ensure enough time in each section.
I rewrote the tutorial text with a LLM to turn it into classic hip hop lyrics.
I used a text to music model to generate the backing track and vocals.
Once I had a satisfactory audio track, I had to rework the video cut.
@IndustrialVectors thanks the song reminded me a bit of this style https://www.youtube.com/watch?v=CeNKuLjgVrI#t=20s :)
@IndustrialVectors can you tell me the name of the text to music model you used?
is there a version for Flux?
No, but one could adapt this workflow to use Flux but I am not sure how it would help given how much more resources Flux requires.
For similar purposes at my day job, I have built a parametric SPA gallery and created CLI tools that will take a configuration file with up to 15 parameters, build prompts, build workflows, spin comfyui workers on rented servers and queue workflows on these servers. The results are later downloaded and opened in the grid using the configuration files used as input. The parametric grid allows to adapt the display similar to a pivot table. Our use case is benchmarking thought.
I built all that on company time and cannot share it publicly.




