| def inject(assembler, chain_definition, chain_items): | |
| if not chain_items: | |
| return | |
| ksampler_name = chain_definition.get('ksampler_node', 'ksampler') | |
| if ksampler_name not in assembler.node_map: | |
| print(f"Warning: KSampler node '{ksampler_name}' not found for HiDream-O1 Reference chain. Skipping.") | |
| return | |
| ksampler_id = assembler.node_map[ksampler_name] | |
| if 'positive' not in assembler.workflow[ksampler_id]['inputs'] or 'negative' not in assembler.workflow[ksampler_id]['inputs']: | |
| print(f"Warning: KSampler node '{ksampler_name}' missing positive/negative inputs. Skipping.") | |
| return | |
| current_pos_conditioning = assembler.workflow[ksampler_id]['inputs']['positive'] | |
| current_neg_conditioning = assembler.workflow[ksampler_id]['inputs']['negative'] | |
| ref_images_id = assembler._get_unique_id() | |
| ref_images_node = assembler._get_node_template("HiDreamO1ReferenceImages") | |
| if 'images' in ref_images_node['inputs']: | |
| del ref_images_node['inputs']['images'] | |
| ref_images_node['inputs']['positive'] = current_pos_conditioning | |
| ref_images_node['inputs']['negative'] = current_neg_conditioning | |
| for i, img_filename in enumerate(chain_items): | |
| if i >= 10: | |
| break | |
| load_id = assembler._get_unique_id() | |
| load_node = assembler._get_node_template("LoadImage") | |
| load_node['inputs']['image'] = img_filename | |
| load_node['_meta']['title'] = f"Load Reference Image {i+1}" | |
| assembler.workflow[load_id] = load_node | |
| scale_id = assembler._get_unique_id() | |
| scale_node = assembler._get_node_template("ImageScaleToTotalPixels") | |
| scale_node['inputs']['megapixels'] = 1.0 | |
| scale_node['inputs']['upscale_method'] = "lanczos" | |
| scale_node['inputs']['image'] = [load_id, 0] | |
| scale_node['_meta']['title'] = f"Scale Reference {i+1}" | |
| assembler.workflow[scale_id] = scale_node | |
| ref_images_node['inputs'][f'images.image_{i+1}'] = [scale_id, 0] | |
| assembler.workflow[ref_images_id] = ref_images_node | |
| assembler.workflow[ksampler_id]['inputs']['positive'] = [ref_images_id, 0] | |
| assembler.workflow[ksampler_id]['inputs']['negative'] = [ref_images_id, 1] | |
| print(f"HiDream-O1 Reference injector applied. Re-routed inputs through {min(len(chain_items), 10)} reference images.") |