diff --git a/.images/repo_banner.jpg b/.images/repo_banner.jpg
new file mode 100755
index 0000000..0ccf796
Binary files /dev/null and b/.images/repo_banner.jpg differ
diff --git a/.images/repo_icon.jpg b/.images/repo_icon.jpg
new file mode 100755
index 0000000..c6f4f6e
Binary files /dev/null and b/.images/repo_icon.jpg differ
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..6602fdf
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,13 @@
+# CHANGELOG
+
+# v0
+
+## v0.0
+
+## v0.0.1 (2025-01-21): initial version
+
+Very first version:
+
+- 29 nodes: XY Plot, Output Config, Format String, List utils, Queue, Input utils, and a few others
+- wiki initiated, with some tutorials and node references
+- init project description and prepare for registration
diff --git a/README.md b/README.md
index c170c47..3295098 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,115 @@
-# ComfyLab-Pack
-A collection of carefully crafted nodes, to improve your Comfy UX.
+
+ ComfyLab Pack
+
+
+
+
+
+ A collection of carefully experimented nodes, to improve your Comfy UX.
+
+
+
+
+# Node overview
+
+**The complete list of nodes can be found in the [wiki / node reference](./wiki/node%20reference/)**
+
+## XY Plot - build beautiful and unique grids
+
+**Auto-queue**, make virtually **anything vary** (checkpoints, LoRAs, ...), **not restricted to KSampler**, pagination, ...\
+**Many configuration options**: page header / footer, custom fonts (even your own), background,...\
+**Make it RGBA** and add a custom background image for a very unique look.
+
+
+Detailed features (click to show)
+
+- simple to use by default: **only 2 nodes**
+ - **optional configuration nodes** to customize the grid, or the **page header / footer**
+ - with possible **pagination, row / column switch**
+- **auto-queuing** (very simple to use, automatic error / interruption detection)
+- you can virtually **make anything vary**: CFG, seed, checkpoint / sampler / LoRA / ...
+- **not restricted to KSampler**: can be adapted to any process generating images
+- **many configuration options**:
+ - custom row/col headers, with string templating
+ - font (type / size / color)
+ - in row / column headers, and/or page header / footer (each configurable differently)
+ - either one of the 4 fonts shipped with the extension, or any other TTF font on your disk
+ - background color:
+ - make **your grid transparent (RGBA)** to add a custom background image
+ - padding, wrap, ...
+- mix any image resolution / aspect ratio
+- ...
+
+
+> For a quick start, it is advised to read the [core concepts](./wiki/node%20reference/xy%20plot/00%20-%20core%20concepts.md).\
+> More information in the [XY Plot node reference](./wiki/node%20reference/xy%20plot/) and the [dedicated tutorials](./wiki/tutorials/XY%20Plot/), from simple to advanced.\
+> You can also check the [examples](./wiki/examples/), they will be frequently extended.
+
+## Output Config - dynamic outputs from a config file
+
+The `Output Config` nodes allow you to load custom config files, to **dynamically create any number of custom outputs**, that you can later connect to other nodes before executing the workflow.\
+Very **useful to standardize your workflows**, and keep a collection of configurations / test cases separately. Or many more, depending on you specific case...
+
+
+Detailed features (click to show)
+
+- **any number of outputs**, you decide what you need for your speific cases
+- **very simple** config file, by default, only `output: value` is needed
+- optionally configure the **shape, color, and even the type** of each output
+- available in **JSON / JSON5 / YAML** (with comments if you wish)
+- strictly validated with a **JSON Schema**, with **detailed visual report** in case of errors
+
+
+> More information in the [Output Config node reference](./wiki/node%20reference/output%20config.md) and the [dedicated tutorials](./wiki/tutorials/Output%20Config/).\
+> You can also check the [examples](./wiki/examples/), they will be frequently extended.
+
+## Format String - one node to rule them all
+
+Take advantage of the powerful **Python string `format()`** method, to build strings using placeholders.\
+Very useful for many operations: **replace, concatenate, prefix / append, pad, limit**, ...\
+**Any number of inputs** _(credits to [@melMass](https://github.com/melMass) and his [comfy_mtb](https://github.com/melMass/comfy_mtb) extension for the trick!)_.\
+Compatible with **integers, floats, booleans.**\
+Exist in 2 flavors: **simple string and multiline**.\
+Safe to use (no arbitary code execution, ...): a well-proven, standard Python method.
+
+> More information in the [Format String node reference](./wiki/node%20reference/format.md) and the [dedicated tutorials](./wiki/tutorials/Format/).\
+> You can also check the [examples](./wiki/examples/), they will be frequently extended.
+
+## Queue - efficient and simple to use
+
+Exist in 3 flavors: **Generic**, **File**, **Image**.\
+Very simple to use: **auto-queuing** (with error / interruption detection), no counter to reset or batch size to set.
+
+## List utilities - make lists as you want
+
+A set of nodes to **create lists** (from string, file, individual elements).\
+**Parse and convert** strings to integers, floats, ...\
+**Merge / limit** lists.
+
+# Documentation
+
+Important note: all nodes in this extension has been adjusted with custom tooltips.\
+By simply **moving the mouse pointer over** a node or its inputs / widgets / outputs, you can get useful **contextual information**.
+
+In addition, more detailed information in the [wiki](./wiki/):
+
+- [Node reference](./wiki/node%20reference/)
+- [Tutorials](./wiki/tutorials/)
+- [Examples](./wiki/examples/)
+
+# Installation
+
+Preferred installation method via the [ComfyUI Manager](https://github.com/ltdrdata/ComfyUI-Manager): search and install `ComfyLab Pack`
+
+Manual installation (from the ComfyUI directory):
+
+```bash
+source venv/bin/activate # adjust to your env
+cd custom_nodes
+git clone https://github.com/bugltd/ComfyLab-Pack.git
+cd ComfyLab-Pack
+pip install -r requirements.txt
+cd ../..
+deactivate
+# run ComfyUI as usual
+```
diff --git a/package.json b/package.json
index 9c3b17b..63f819b 100644
--- a/package.json
+++ b/package.json
@@ -1,29 +1,29 @@
{
- "name": "confylab-pack",
- "private": true,
- "version": "0.0.0",
- "type": "module",
- "scripts": {
- "watch": "tsc-watch -p tsconfig.json --onSuccess 'tsc-alias -p tsconfig.json -r build/replacers.js/mock.js'",
- "build": "rimraf ./dist/js && tsc -p tsconfig.prod.json && tsc-alias -p tsconfig.prod.json -r build/replacers.js/mock.js",
- "build:replacers": "tsc -p build/replacers.js/tsconfig.replacers.json",
- "lint": "eslint .",
- "format": "prettier --write ."
- },
- "devDependencies": {
- "@comfyorg/comfyui-frontend-types": "^1.6.8",
- "@comfyorg/litegraph": "^0.8.50",
- "@eslint/js": "^9.17.0",
- "eslint": "^9.17.0",
- "eslint-config-prettier": "^9.1.0",
- "eslint-plugin-prettier": "^5.2.1",
- "globals": "^15.14.0",
- "prettier": "^3.4.2",
- "rimraf": "^6.0.1",
- "tsc-alias": "^1.8.10",
- "tsc-watch": "6.2.1",
- "typescript": "^5.7.2",
- "typescript-eslint": "^8.18.2"
- },
- "packageManager": "yarn@4.5.3+sha512.3003a14012e2987072d244c720506549c1aab73ee728208f1b2580a9fd67b92d61ba6b08fe93f6dce68fd771e3af1e59a0afa28dd242dd0940d73b95fedd4e90"
+ "name": "confylab-pack",
+ "private": true,
+ "version": "0.0.1",
+ "type": "module",
+ "scripts": {
+ "watch": "tsc-watch -p tsconfig.json --onSuccess 'tsc-alias -p tsconfig.json -r build/replacers.js/mock.js'",
+ "build": "rimraf ./dist/js && tsc -p tsconfig.prod.json && tsc-alias -p tsconfig.prod.json -r build/replacers.js/mock.js",
+ "build:replacers": "tsc -p build/replacers.js/tsconfig.replacers.json",
+ "lint": "eslint .",
+ "format": "prettier --write ."
+ },
+ "devDependencies": {
+ "@comfyorg/comfyui-frontend-types": "^1.6.8",
+ "@comfyorg/litegraph": "^0.8.50",
+ "@eslint/js": "^9.17.0",
+ "eslint": "^9.17.0",
+ "eslint-config-prettier": "^9.1.0",
+ "eslint-plugin-prettier": "^5.2.1",
+ "globals": "^15.14.0",
+ "prettier": "^3.4.2",
+ "rimraf": "^6.0.1",
+ "tsc-alias": "^1.8.10",
+ "tsc-watch": "6.2.1",
+ "typescript": "^5.7.2",
+ "typescript-eslint": "^8.18.2"
+ },
+ "packageManager": "yarn@4.5.3+sha512.3003a14012e2987072d244c720506549c1aab73ee728208f1b2580a9fd67b92d61ba6b08fe93f6dce68fd771e3af1e59a0afa28dd242dd0940d73b95fedd4e90"
}
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000..42441c2
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,21 @@
+[project]
+name = "comfylab-pack"
+description = "A collection of carefully experimented nodes, to improve your Comfy UX."
+version = "0.0.1"
+authors = [{ name = "bugltd" }]
+license = {file = "LICENSE"}
+readme = "README.md"
+dependencies = ["jsonschema", "json5", "python-dotenv", "pyyaml", "pyaml"]
+
+[project.urls]
+Homepage = "https://github.com/bugltd/ComfyLab-Pack"
+Documentation = "https://github.com/bugltd/ComfyLab-Pack/wiki"
+Repository = "https://github.com/bugltd/ComfyLab-Pack"
+Issues = "https://github.com/bugltd/ComfyLab-Pack/issues"
+Changelog = "https://github.com/bugltd/ComfyLab-Pack/blob/main/CHANGELOG.md"
+# Used by Comfy Registry https://comfyregistry.org
+
+[tool.comfy]
+PublisherId = "bugltd"
+DisplayName = "ComfyLab Pack"
+Icon = "https://avatars.githubusercontent.com/u/194549623?s=400&&v=4"
diff --git a/wiki/node reference/format.md b/wiki/node reference/format.md
index 9262b58..b621342 100644
--- a/wiki/node reference/format.md
+++ b/wiki/node reference/format.md
@@ -8,7 +8,7 @@ The `Format` nodes are very simple yet powerful nodes, that are based on the **s
They exist in 2 flavors: `String` or `Multiline`.
They are useful to create a string from a template, and **any number of inputs**.\
-Inputs can be of the following ConfyUI types: `STRING`, `INT`, `FLOAT`, `BOOLEAN`.
+Inputs can be of the following ComfyUI types: `STRING`, `INT`, `FLOAT`, `BOOLEAN`.
## How to use
@@ -18,7 +18,7 @@ Here we will just cover the most basic usage, but please note that Python string
The node takes any number of inputs, that are automatically incremented: `arg0`, `arg1`, ...
-Given the following template: `first arg by name: {arg0}, second by index: {1}`, and 2 input string (`tata` and `toto`), we will get the resulting string: `first arg by name: tata, second by index: toto`.
+Given the following template: `first arg by name: {arg0}, second by index: {1}`, and 2 input strings (`tata` and `toto`), we will get the resulting string: `first arg by name: tata, second by index: toto`.
Here we see that **we can reference the inputs either by their name (`argN`), or by their index (starting at 0)**.\
Straightforward, isn't it?
diff --git a/wiki/tutorials/XY Plot/01 - the basics/README.md b/wiki/tutorials/XY Plot/01 - the basics/README.md
index 746bab4..3af32a3 100644
--- a/wiki/tutorials/XY Plot/01 - the basics/README.md
+++ b/wiki/tutorials/XY Plot/01 - the basics/README.md
@@ -12,7 +12,7 @@ Tutorial sections:
To keep it simple, we will not detail the core concepts here. But if you are interested, now or later, you can check the [dedicated page](../../../node%20reference/xy%20plot/00%20-%20core%20concepts.md).
-> As for all nodes in this extension, you can get useful contextual information, by just **putting the mouse pointer over a node or its inputs / widgets / outputs**. This should help you understand some details, without reading the more detailed wiki pages (yet).
+> As for all nodes in this extension, you can get useful contextual information, by just **moving the mouse pointer over a node or its inputs / widgets / outputs**. This should help you understand some details, without reading the more detailed wiki pages (yet).
And as always, if you do not want to follow all the steps, you can jump directly to [the conclusion](#tldr--conclusion).
diff --git a/wiki/tutorials/XY Plot/02 - pimp my grid/README.md b/wiki/tutorials/XY Plot/02 - pimp my grid/README.md
index d8b3589..cf40df2 100644
--- a/wiki/tutorials/XY Plot/02 - pimp my grid/README.md
+++ b/wiki/tutorials/XY Plot/02 - pimp my grid/README.md
@@ -13,7 +13,7 @@ Tutorial sections:
- [TL;DR / Conclusion](#tldr--conclusion)
- [Going further (advanced)](#going-further-advanced)
-> As for all nodes in this extension, you can get useful contextual information, by just **putting the mouse pointer over a node or its inputs / widgets / outputs**. This should help you understand some details, without reading the more detailed wiki pages (yet).
+> As for all nodes in this extension, you can get useful contextual information, by just **moving the mouse pointer over a node or its inputs / widgets / outputs**. This should help you understand some details, without reading the more detailed wiki pages (yet).
And as always, if you do not want to follow all the steps, you can jump directly to [the conclusion](#tldr--conclusion).
diff --git a/wiki/tutorials/XY Plot/03 - advanced techniques/README.md b/wiki/tutorials/XY Plot/03 - advanced techniques/README.md
index 587de56..6077e51 100644
--- a/wiki/tutorials/XY Plot/03 - advanced techniques/README.md
+++ b/wiki/tutorials/XY Plot/03 - advanced techniques/README.md
@@ -14,7 +14,7 @@ Tutorial sections:
- [Part 2 - Various resolutions and aspect ratios](#part-2---various-resolutions-and-aspect-ratios)
- [TL;DR / Conclusion](#tldr--conclusion)
-> As for all nodes in this extension, you can get useful contextual information, by just **putting the mouse pointer over a node or its inputs / widgets / outputs**. This should help you understand some details, without reading the more detailed wiki pages (yet).
+> As for all nodes in this extension, you can get useful contextual information, by just **moving the mouse pointer over a node or its inputs / widgets / outputs**. This should help you understand some details, without reading the more detailed wiki pages (yet).
And as always, if you do not want to follow all the steps, you can jump directly to [the conclusion](#tldr--conclusion).
diff --git a/wiki/tutorials/XY Plot/README.md b/wiki/tutorials/XY Plot/README.md
index 465c0e4..28181da 100644
--- a/wiki/tutorials/XY Plot/README.md
+++ b/wiki/tutorials/XY Plot/README.md
@@ -5,12 +5,13 @@ The `XY Plot` nodes allow you to create the grids you want, with virtually no li
- simple to use by default: only 2 nodes
- optional configuration nodes to customize the grid, or the page header / footer
- with possible pagination, row / column switch
-- auto-queuing
+- auto-queuing (with error / interruption detection)
- you can virtually make anything vary: CFG, seed, checkpoint / sampler / LoRA / ...
- not restricted to KSampler: can be adapted to any process generating images
- many configuration options:
- font (type / size / color)
- in row / column headers, and/or page header / footer
+ - either one of the 4 fonts shipped with the extension, or any other TTF font on your disk
- background color:
- make your grid transparent (RGBA) to add a custom background image
- padding, wrap, ...