diff --git a/README.MD b/README.MD
index 009f22f..4430e65 100644
--- a/README.MD
+++ b/README.MD
@@ -83,6 +83,7 @@ When this error has occurred, please check the network environment.
## Update
**If the dependency package error after updating, please reinstall the relevant dependency packages. for details, please refer to [here](https://github.com/chflame163/ComfyUI_LayerStyle/issues/5).
+* Commit [ImageHub](#ImageHub) node, supports up to 9 sets of Image and Mask switching output, and supports random output.
* Commit [TextJoin](#TextJoin) node.
* Commit [PromptEmbellish](#PromptEmbellish) node. it output polished prompt words, and support inputting images as references.
* Ultra nodes have been fully upgraded to V2 version, with the addition of VITMatte edge processing method, which is suitable for handling semi transparent areas. Include [MaskEdgeUltraDetailV2](#MaskEdgeUltraDetailV2), [SegmentAnythingUltraV2](#SegmentAnythingUltraV2), [RmBgUltraV2](#RmBgUltraV2) and [PersonMaskUltraV2](#PersonMaskUltraV2) nodes.
@@ -884,6 +885,15 @@ Output:
* height: The height of image.
* original_size: The original size data of the image is used for subsequent node recovery.
+### ImageHub
+Switch output from multiple input images and masks, supporting 9 sets of inputs. All input items are optional. if there is only image or mask in a set of input, the missing item will be output as None.
+
+
+Node options:
+
+* output: Switch output. the value is the corresponding input group. when the ```random-output``` option is True, this setting will be ignored.
+* random_output: When this is true, the ```output``` setting will be ignored and a random set will be output among all valid inputs.
+
### TextJoin

Combine multiple paragraphs of text into one.
diff --git a/README_CN.MD b/README_CN.MD
index 73022af..c7f0421 100644
--- a/README_CN.MD
+++ b/README_CN.MD
@@ -83,6 +83,7 @@ git clone https://github.com/chflame163/ComfyUI_LayerStyle.git
## 更新说明
**如果本插件更新后出现依赖包错误,请重新安装相关依赖包。详情见[这里](https://github.com/chflame163/ComfyUI_LayerStyle/issues/5)。
+* 添加 [ImageHub](#ImageHub) 节点,支持最多9组Image和Mask切换,支持随机输出。
* 添加 [TextJoin](#TextJoin) 节点。
* 添加 [PromptEmbellish](#PromptEmbellish) 节点, 对简单的提示词润色,支持图片输入参考,支持中文输入。
* Ultra 节点全面升级到V2版本,增加了VITMatte边缘处理方法,此方法适合处理半透明区域。包括 [MaskEdgeUltraDetailV2](#MaskEdgeUltraDetailV2), [SegmentAnythingUltraV2](#SegmentAnythingUltraV2), [RmBgUltraV2](#RmBgUltraV2) 以及 [PersonMaskUltraV2](#PersonMaskUltraV2) 节点。
@@ -879,6 +880,16 @@ cropped_mask: 裁切后的遮罩。
* height: 图像高度。
* original_size: 图像的原始大小数据,用于后续节点进行恢复。
+### ImageHub
+从多路输入图片和遮罩中切换其中一组输出,支持9组输入。所有的输入项都是可选项。如果一组输入中只有image或者只有mask, 缺失项将输出为None。
+
+
+节点选项说明:
+
+* output: 切换输出。数值是对应的输入组。当```random_output```选项为True时,此项设置将被忽略。
+* random_output: 当此项为True时, 将忽略```output```设置,在所有的有效输入中随机输出一组。
+
+
### TextJoin

将多段文字组合为一段。
diff --git a/image/image_hub_example.png b/image/image_hub_example.png
new file mode 100644
index 0000000..a170b31
Binary files /dev/null and b/image/image_hub_example.png differ
diff --git a/image/image_hub_node.png b/image/image_hub_node.png
new file mode 100644
index 0000000..7fa5309
Binary files /dev/null and b/image/image_hub_node.png differ
diff --git a/workflow/image_hub_example.json b/workflow/image_hub_example.json
new file mode 100644
index 0000000..08f7589
--- /dev/null
+++ b/workflow/image_hub_example.json
@@ -0,0 +1,379 @@
+{
+ "last_node_id": 13,
+ "last_link_id": 47,
+ "nodes": [
+ {
+ "id": 12,
+ "type": "LoadImage",
+ "pos": [
+ 390,
+ 570
+ ],
+ "size": {
+ "0": 315,
+ "1": 314
+ },
+ "flags": {},
+ "order": 0,
+ "mode": 0,
+ "outputs": [
+ {
+ "name": "IMAGE",
+ "type": "IMAGE",
+ "links": [
+ 39
+ ],
+ "shape": 3,
+ "slot_index": 0
+ },
+ {
+ "name": "MASK",
+ "type": "MASK",
+ "links": [],
+ "shape": 3,
+ "slot_index": 1
+ }
+ ],
+ "properties": {
+ "Node name for S&R": "LoadImage"
+ },
+ "widgets_values": [
+ "1024x640_cat.png",
+ "image"
+ ]
+ },
+ {
+ "id": 2,
+ "type": "PreviewImage",
+ "pos": [
+ 1640,
+ 510
+ ],
+ "size": [
+ 445.1518020629883,
+ 307.4849090576172
+ ],
+ "flags": {},
+ "order": 5,
+ "mode": 0,
+ "inputs": [
+ {
+ "name": "images",
+ "type": "IMAGE",
+ "link": 32
+ }
+ ],
+ "properties": {
+ "Node name for S&R": "PreviewImage"
+ }
+ },
+ {
+ "id": 6,
+ "type": "LoadImage",
+ "pos": [
+ 390,
+ 930
+ ],
+ "size": {
+ "0": 315,
+ "1": 314
+ },
+ "flags": {},
+ "order": 1,
+ "mode": 0,
+ "outputs": [
+ {
+ "name": "IMAGE",
+ "type": "IMAGE",
+ "links": [
+ 44,
+ 47
+ ],
+ "shape": 3,
+ "slot_index": 0
+ },
+ {
+ "name": "MASK",
+ "type": "MASK",
+ "links": [],
+ "shape": 3,
+ "slot_index": 1
+ }
+ ],
+ "properties": {
+ "Node name for S&R": "LoadImage"
+ },
+ "widgets_values": [
+ "1344x768_hair (3).png",
+ "image"
+ ]
+ },
+ {
+ "id": 13,
+ "type": "LayerColor: HSV",
+ "pos": [
+ 830,
+ 720
+ ],
+ "size": {
+ "0": 315,
+ "1": 106
+ },
+ "flags": {},
+ "order": 3,
+ "mode": 0,
+ "inputs": [
+ {
+ "name": "image",
+ "type": "IMAGE",
+ "link": 44
+ }
+ ],
+ "outputs": [
+ {
+ "name": "image",
+ "type": "IMAGE",
+ "links": [
+ 45
+ ],
+ "shape": 3,
+ "slot_index": 0
+ }
+ ],
+ "properties": {
+ "Node name for S&R": "LayerColor: HSV"
+ },
+ "widgets_values": [
+ 0,
+ -82,
+ -10
+ ]
+ },
+ {
+ "id": 10,
+ "type": "LayerUtility: ImageHub",
+ "pos": [
+ 1220,
+ 520
+ ],
+ "size": {
+ "0": 315,
+ "1": 422
+ },
+ "flags": {},
+ "order": 4,
+ "mode": 0,
+ "inputs": [
+ {
+ "name": "input1_image",
+ "type": "IMAGE",
+ "link": 31
+ },
+ {
+ "name": "input1_mask",
+ "type": "MASK",
+ "link": null
+ },
+ {
+ "name": "input2_image",
+ "type": "IMAGE",
+ "link": 39
+ },
+ {
+ "name": "input2_mask",
+ "type": "MASK",
+ "link": null
+ },
+ {
+ "name": "input3_image",
+ "type": "IMAGE",
+ "link": null
+ },
+ {
+ "name": "input3_mask",
+ "type": "MASK",
+ "link": null
+ },
+ {
+ "name": "input4_image",
+ "type": "IMAGE",
+ "link": null
+ },
+ {
+ "name": "input4_mask",
+ "type": "MASK",
+ "link": null
+ },
+ {
+ "name": "input5_image",
+ "type": "IMAGE",
+ "link": null
+ },
+ {
+ "name": "input5_mask",
+ "type": "MASK",
+ "link": null
+ },
+ {
+ "name": "input6_image",
+ "type": "IMAGE",
+ "link": 45
+ },
+ {
+ "name": "input6_mask",
+ "type": "MASK",
+ "link": null
+ },
+ {
+ "name": "input7_image",
+ "type": "IMAGE",
+ "link": null
+ },
+ {
+ "name": "input7_mask",
+ "type": "MASK",
+ "link": null
+ },
+ {
+ "name": "input8_image",
+ "type": "IMAGE",
+ "link": null
+ },
+ {
+ "name": "input8_mask",
+ "type": "MASK",
+ "link": null
+ },
+ {
+ "name": "input9_image",
+ "type": "IMAGE",
+ "link": 47
+ },
+ {
+ "name": "input9_mask",
+ "type": "MASK",
+ "link": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "image",
+ "type": "IMAGE",
+ "links": [
+ 32
+ ],
+ "shape": 3,
+ "slot_index": 0
+ },
+ {
+ "name": "mask",
+ "type": "MASK",
+ "links": [],
+ "shape": 3,
+ "slot_index": 1
+ }
+ ],
+ "properties": {
+ "Node name for S&R": "LayerUtility: ImageHub"
+ },
+ "widgets_values": [
+ 6,
+ false
+ ]
+ },
+ {
+ "id": 4,
+ "type": "LoadImage",
+ "pos": [
+ 400,
+ 200
+ ],
+ "size": {
+ "0": 315,
+ "1": 314
+ },
+ "flags": {},
+ "order": 2,
+ "mode": 0,
+ "outputs": [
+ {
+ "name": "IMAGE",
+ "type": "IMAGE",
+ "links": [
+ 31
+ ],
+ "shape": 3,
+ "slot_index": 0
+ },
+ {
+ "name": "MASK",
+ "type": "MASK",
+ "links": [],
+ "shape": 3,
+ "slot_index": 1
+ }
+ ],
+ "properties": {
+ "Node name for S&R": "LoadImage"
+ },
+ "widgets_values": [
+ "1024x1024_girl_face.png",
+ "image"
+ ]
+ }
+ ],
+ "links": [
+ [
+ 31,
+ 4,
+ 0,
+ 10,
+ 0,
+ "IMAGE"
+ ],
+ [
+ 32,
+ 10,
+ 0,
+ 2,
+ 0,
+ "IMAGE"
+ ],
+ [
+ 39,
+ 12,
+ 0,
+ 10,
+ 2,
+ "IMAGE"
+ ],
+ [
+ 44,
+ 6,
+ 0,
+ 13,
+ 0,
+ "IMAGE"
+ ],
+ [
+ 45,
+ 13,
+ 0,
+ 10,
+ 10,
+ "IMAGE"
+ ],
+ [
+ 47,
+ 6,
+ 0,
+ 10,
+ 16,
+ "IMAGE"
+ ]
+ ],
+ "groups": [],
+ "config": {},
+ "extra": {},
+ "version": 0.4
+}
\ No newline at end of file