RioShiina commited on
Commit
afb9aae
·
verified ·
1 Parent(s): aecae78

Upload folder using huggingface_hub

Browse files
chain_injectors/ipadapter_injector.py CHANGED
@@ -25,82 +25,127 @@ def inject(assembler, chain_definition, chain_items):
25
  model_type = final_settings.get('model_type', 'sdxl')
26
  megapixels = 1.05 if model_type == 'sdxl' else 0.39
27
 
28
- pos_embed_outputs = []
29
- neg_embed_outputs = []
30
 
31
- for i, item_data in enumerate(chain_items):
32
- loader_type = 'FaceID' if 'FACEID' in item_data.get('preset', '') else 'Unified'
33
-
34
- loader_template_name = "IPAdapterUnifiedLoader"
35
- if loader_type == 'FaceID':
36
- loader_template_name = "IPAdapterUnifiedLoaderFaceID"
37
-
38
- image_loader_id = assembler._get_unique_id()
39
- image_loader_node = assembler._get_node_template("LoadImage")
40
- image_loader_node['inputs']['image'] = item_data['image']
41
- assembler.workflow[image_loader_id] = image_loader_node
42
-
43
- image_scaler_id = assembler._get_unique_id()
44
- image_scaler_node = assembler._get_node_template("ImageScaleToTotalPixels")
45
- image_scaler_node['inputs']['image'] = [image_loader_id, 0]
46
- image_scaler_node['inputs']['megapixels'] = megapixels
47
- image_scaler_node['inputs']['upscale_method'] = "lanczos"
48
- assembler.workflow[image_scaler_id] = image_scaler_node
49
-
50
- ipadapter_loader_id = assembler._get_unique_id()
51
- ipadapter_loader_node = assembler._get_node_template(loader_template_name)
52
- ipadapter_loader_node['inputs']['model'] = current_model_connection
53
- ipadapter_loader_node['inputs']['preset'] = item_data['preset']
54
- if loader_type == 'FaceID':
55
- ipadapter_loader_node['inputs']['lora_strength'] = item_data.get('lora_strength', 0.6)
56
- assembler.workflow[ipadapter_loader_id] = ipadapter_loader_node
57
-
58
- encoder_id = assembler._get_unique_id()
59
- encoder_node = assembler._get_node_template("IPAdapterEncoder")
60
- encoder_node['inputs']['weight'] = item_data['weight']
61
- encoder_node['inputs']['ipadapter'] = [ipadapter_loader_id, 1]
62
- encoder_node['inputs']['image'] = [image_scaler_id, 0]
63
- assembler.workflow[encoder_id] = encoder_node
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
 
65
- pos_embed_outputs.append([encoder_id, 0])
66
- neg_embed_outputs.append([encoder_id, 1])
67
-
68
- pos_combiner_id = assembler._get_unique_id()
69
- pos_combiner_node = assembler._get_node_template("IPAdapterCombineEmbeds")
70
- pos_combiner_node['inputs']['method'] = final_settings.get('final_combine_method', 'concat')
71
- for i, conn in enumerate(pos_embed_outputs):
72
- pos_combiner_node['inputs'][f'embed{i+1}'] = conn
73
- assembler.workflow[pos_combiner_id] = pos_combiner_node
74
-
75
- neg_combiner_id = assembler._get_unique_id()
76
- neg_combiner_node = assembler._get_node_template("IPAdapterCombineEmbeds")
77
- neg_combiner_node['inputs']['method'] = final_settings.get('final_combine_method', 'concat')
78
- for i, conn in enumerate(neg_embed_outputs):
79
- neg_combiner_node['inputs'][f'embed{i+1}'] = conn
80
- assembler.workflow[neg_combiner_id] = neg_combiner_node
81
-
82
- final_loader_type = 'FaceID' if 'FACEID' in final_settings.get('final_preset', '') else 'Unified'
83
- final_loader_template_name = "IPAdapterUnifiedLoader"
84
- if final_loader_type == 'FaceID':
85
- final_loader_template_name = "IPAdapterUnifiedLoaderFaceID"
86
-
87
- final_loader_id = assembler._get_unique_id()
88
- final_loader_node = assembler._get_node_template(final_loader_template_name)
89
- final_loader_node['inputs']['model'] = current_model_connection
90
- final_loader_node['inputs']['preset'] = final_settings.get('final_preset', 'STANDARD (medium strength)')
91
- if final_loader_type == 'FaceID':
92
- final_loader_node['inputs']['lora_strength'] = final_settings.get('final_lora_strength', 0.6)
93
- assembler.workflow[final_loader_id] = final_loader_node
94
-
95
- apply_embeds_id = assembler._get_unique_id()
96
- apply_embeds_node = assembler._get_node_template("IPAdapterEmbeds")
97
- apply_embeds_node['inputs']['weight'] = final_settings.get('final_weight', 1.0)
98
- apply_embeds_node['inputs']['embeds_scaling'] = final_settings.get('final_embeds_scaling', 'V only')
99
- apply_embeds_node['inputs']['model'] = [final_loader_id, 0]
100
- apply_embeds_node['inputs']['ipadapter'] = [final_loader_id, 1]
101
- apply_embeds_node['inputs']['pos_embed'] = [pos_combiner_id, 0]
102
- apply_embeds_node['inputs']['neg_embed'] = [neg_combiner_id, 0]
103
- assembler.workflow[apply_embeds_id] = apply_embeds_node
104
-
105
- assembler.workflow[end_node_id]['inputs']['model'] = [apply_embeds_id, 0]
106
- print(f"IPAdapter injector applied. Redirected '{end_node_name}' model input through {len(chain_items)} reference images.")
 
25
  model_type = final_settings.get('model_type', 'sdxl')
26
  megapixels = 1.05 if model_type == 'sdxl' else 0.39
27
 
28
+ first_preset = chain_items[0].get('preset', '')
29
+ is_faceid_chain = 'FACEID' in first_preset.upper()
30
 
31
+ if is_faceid_chain:
32
+ for i, item_data in enumerate(chain_items):
33
+ image_loader_id = assembler._get_unique_id()
34
+ image_loader_node = assembler._get_node_template("LoadImage")
35
+ image_loader_node['inputs']['image'] = item_data['image']
36
+ assembler.workflow[image_loader_id] = image_loader_node
37
+
38
+ image_scaler_id = assembler._get_unique_id()
39
+ image_scaler_node = assembler._get_node_template("ImageScaleToTotalPixels")
40
+ image_scaler_node['inputs']['image'] = [image_loader_id, 0]
41
+ image_scaler_node['inputs']['megapixels'] = megapixels
42
+ image_scaler_node['inputs']['upscale_method'] = "lanczos"
43
+ assembler.workflow[image_scaler_id] = image_scaler_node
44
+
45
+ ipadapter_loader_id = assembler._get_unique_id()
46
+ ipadapter_loader_node = assembler._get_node_template("IPAdapterUnifiedLoaderFaceID")
47
+ ipadapter_loader_node['inputs']['model'] = current_model_connection
48
+ ipadapter_loader_node['inputs']['preset'] = item_data['preset']
49
+ ipadapter_loader_node['inputs']['lora_strength'] = item_data.get('lora_strength', 0.6)
50
+ ipadapter_loader_node['inputs']['provider'] = "CUDA"
51
+ assembler.workflow[ipadapter_loader_id] = ipadapter_loader_node
52
+
53
+ apply_id = assembler._get_unique_id()
54
+ apply_node = assembler._get_node_template("IPAdapterFaceID")
55
+ apply_node['inputs']['model'] = [ipadapter_loader_id, 0]
56
+ apply_node['inputs']['ipadapter'] = [ipadapter_loader_id, 1]
57
+ apply_node['inputs']['image'] = [image_scaler_id, 0]
58
+ apply_node['inputs']['weight'] = item_data['weight']
59
+ apply_node['inputs']['weight_faceidv2'] = final_settings.get('final_lora_strength', 0.6)
60
+ apply_node['inputs']['weight_type'] = "linear"
61
+ apply_node['inputs']['combine_embeds'] = final_settings.get('final_combine_method', 'concat')
62
+ apply_node['inputs']['start_at'] = item_data.get('start_percent', 0.0)
63
+ apply_node['inputs']['end_at'] = item_data.get('end_percent', 1.0)
64
+ apply_node['inputs']['embeds_scaling'] = final_settings.get('final_embeds_scaling', 'V only')
65
+
66
+ assembler.workflow[apply_id] = apply_node
67
+ current_model_connection = [apply_id, 0]
68
+
69
+ assembler.workflow[end_node_id]['inputs']['model'] = current_model_connection
70
+ print(f"IPAdapter FaceID injector applied (Direct Apply). Redirected '{end_node_name}' model input through {len(chain_items)} FaceID node(s).")
71
+ return
72
+
73
+ else:
74
+ pos_embed_outputs = []
75
+ neg_embed_outputs = []
76
+
77
+ for i, item_data in enumerate(chain_items):
78
+ loader_type = 'FaceID' if 'FACEID' in item_data.get('preset', '') else 'Unified'
79
+ loader_template_name = "IPAdapterUnifiedLoader"
80
+ if loader_type == 'FaceID':
81
+ loader_template_name = "IPAdapterUnifiedLoaderFaceID"
82
+
83
+ image_loader_id = assembler._get_unique_id()
84
+ image_loader_node = assembler._get_node_template("LoadImage")
85
+ image_loader_node['inputs']['image'] = item_data['image']
86
+ assembler.workflow[image_loader_id] = image_loader_node
87
+
88
+ image_scaler_id = assembler._get_unique_id()
89
+ image_scaler_node = assembler._get_node_template("ImageScaleToTotalPixels")
90
+ image_scaler_node['inputs']['image'] = [image_loader_id, 0]
91
+ image_scaler_node['inputs']['megapixels'] = megapixels
92
+ image_scaler_node['inputs']['upscale_method'] = "lanczos"
93
+ assembler.workflow[image_scaler_id] = image_scaler_node
94
+
95
+ ipadapter_loader_id = assembler._get_unique_id()
96
+ ipadapter_loader_node = assembler._get_node_template(loader_template_name)
97
+ ipadapter_loader_node['inputs']['model'] = current_model_connection
98
+ ipadapter_loader_node['inputs']['preset'] = item_data['preset']
99
+ if loader_type == 'FaceID':
100
+ ipadapter_loader_node['inputs']['lora_strength'] = item_data.get('lora_strength', 0.6)
101
+ assembler.workflow[ipadapter_loader_id] = ipadapter_loader_node
102
+
103
+ encoder_id = assembler._get_unique_id()
104
+ encoder_node = assembler._get_node_template("IPAdapterEncoder")
105
+ encoder_node['inputs']['weight'] = item_data['weight']
106
+ encoder_node['inputs']['ipadapter'] = [ipadapter_loader_id, 1]
107
+ encoder_node['inputs']['image'] = [image_scaler_id, 0]
108
+ assembler.workflow[encoder_id] = encoder_node
109
+
110
+ pos_embed_outputs.append([encoder_id, 0])
111
+ neg_embed_outputs.append([encoder_id, 1])
112
+
113
+ pos_combiner_id = assembler._get_unique_id()
114
+ pos_combiner_node = assembler._get_node_template("IPAdapterCombineEmbeds")
115
+ pos_combiner_node['inputs']['method'] = final_settings.get('final_combine_method', 'concat')
116
+ for i, conn in enumerate(pos_embed_outputs):
117
+ pos_combiner_node['inputs'][f'embed{i+1}'] = conn
118
+ assembler.workflow[pos_combiner_id] = pos_combiner_node
119
+
120
+ neg_combiner_id = assembler._get_unique_id()
121
+ neg_combiner_node = assembler._get_node_template("IPAdapterCombineEmbeds")
122
+ neg_combiner_node['inputs']['method'] = final_settings.get('final_combine_method', 'concat')
123
+ for i, conn in enumerate(neg_embed_outputs):
124
+ neg_combiner_node['inputs'][f'embed{i+1}'] = conn
125
+ assembler.workflow[neg_combiner_id] = neg_combiner_node
126
 
127
+ final_loader_type = 'FaceID' if 'FACEID' in final_settings.get('final_preset', '') else 'Unified'
128
+ final_loader_template_name = "IPAdapterUnifiedLoader"
129
+ if final_loader_type == 'FaceID':
130
+ final_loader_template_name = "IPAdapterUnifiedLoaderFaceID"
131
+
132
+ final_loader_id = assembler._get_unique_id()
133
+ final_loader_node = assembler._get_node_template(final_loader_template_name)
134
+ final_loader_node['inputs']['model'] = current_model_connection
135
+ final_loader_node['inputs']['preset'] = final_settings.get('final_preset', 'STANDARD (medium strength)')
136
+ if final_loader_type == 'FaceID':
137
+ final_loader_node['inputs']['lora_strength'] = final_settings.get('final_lora_strength', 0.6)
138
+ assembler.workflow[final_loader_id] = final_loader_node
139
+
140
+ apply_embeds_id = assembler._get_unique_id()
141
+ apply_embeds_node = assembler._get_node_template("IPAdapterEmbeds")
142
+ apply_embeds_node['inputs']['weight'] = final_settings.get('final_weight', 1.0)
143
+ apply_embeds_node['inputs']['embeds_scaling'] = final_settings.get('final_embeds_scaling', 'V only')
144
+ apply_embeds_node['inputs']['model'] = [final_loader_id, 0]
145
+ apply_embeds_node['inputs']['ipadapter'] = [final_loader_id, 1]
146
+ apply_embeds_node['inputs']['pos_embed'] = [pos_combiner_id, 0]
147
+ apply_embeds_node['inputs']['neg_embed'] = [neg_combiner_id, 0]
148
+ assembler.workflow[apply_embeds_id] = apply_embeds_node
149
+
150
+ assembler.workflow[end_node_id]['inputs']['model'] = [apply_embeds_id, 0]
151
+ print(f"IPAdapter Unified injector applied. Redirected '{end_node_name}' model input through {len(chain_items)} reference image(s).")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
requirements.txt CHANGED
@@ -22,7 +22,7 @@ alembic
22
  SQLAlchemy>=2.0.0
23
  filelock
24
  av>=16.0.0
25
- comfy-kitchen==0.2.12
26
  comfy-aimdo==0.4.10
27
  requests
28
  simpleeval>=1.0.0
@@ -33,12 +33,13 @@ kornia>=0.7.1
33
  spandrel
34
  pydantic~=2.0
35
  pydantic-settings~=2.0
36
- PyOpenGL
37
- glfw
38
 
39
 
40
  diffusers
41
  protobuf
 
42
  huggingface-hub
43
  imageio
44
  spaces
 
22
  SQLAlchemy>=2.0.0
23
  filelock
24
  av>=16.0.0
25
+ comfy-kitchen==0.2.13
26
  comfy-aimdo==0.4.10
27
  requests
28
  simpleeval>=1.0.0
 
33
  spandrel
34
  pydantic~=2.0
35
  pydantic-settings~=2.0
36
+ PyOpenGL>=3.1.8
37
+ comfy-angle
38
 
39
 
40
  diffusers
41
  protobuf
42
+ insightface
43
  huggingface-hub
44
  imageio
45
  spaces