| 178 | |
| 179 | |
| 180 | class PipelineUnitRunner: |
| 181 | def __init__(self): |
| 182 | pass |
| 183 | |
| 184 | def __call__(self, unit: PipelineUnit, pipe: BasePipeline, inputs_shared: dict, inputs_posi: dict, inputs_nega: dict) -> tuple[dict, dict]: |
| 185 | if unit.take_over: |
| 186 | # Let the pipeline unit take over this function. |
| 187 | inputs_shared, inputs_posi, inputs_nega = unit.process(pipe, inputs_shared=inputs_shared, inputs_posi=inputs_posi, inputs_nega=inputs_nega) |
| 188 | elif unit.seperate_cfg: |
| 189 | # Positive side |
| 190 | processor_inputs = {name: inputs_posi.get(name_) for name, name_ in unit.input_params_posi.items()} |
| 191 | if unit.input_params is not None: |
| 192 | for name in unit.input_params: |
| 193 | processor_inputs[name] = inputs_shared.get(name) |
| 194 | processor_outputs = unit.process(pipe, **processor_inputs) |
| 195 | inputs_posi.update(processor_outputs) |
| 196 | # Negative side |
| 197 | if inputs_shared["cfg_scale"] != 1: |
| 198 | processor_inputs = {name: inputs_nega.get(name_) for name, name_ in unit.input_params_nega.items()} |
| 199 | if unit.input_params is not None: |
| 200 | for name in unit.input_params: |
| 201 | processor_inputs[name] = inputs_shared.get(name) |
| 202 | processor_outputs = unit.process(pipe, **processor_inputs) |
| 203 | inputs_nega.update(processor_outputs) |
| 204 | else: |
| 205 | inputs_nega.update(processor_outputs) |
| 206 | else: |
| 207 | processor_inputs = {name: inputs_shared.get(name) for name in unit.input_params} |
| 208 | processor_outputs = unit.process(pipe, **processor_inputs) |
| 209 | inputs_shared.update(processor_outputs) |
| 210 | return inputs_shared, inputs_posi, inputs_nega |