| 
							 | 
						import torch | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						class InstructPixToPixConditioning: | 
					
					
						
						| 
							 | 
						    @classmethod | 
					
					
						
						| 
							 | 
						    def INPUT_TYPES(s): | 
					
					
						
						| 
							 | 
						        return {"required": {"positive": ("CONDITIONING", ), | 
					
					
						
						| 
							 | 
						                             "negative": ("CONDITIONING", ), | 
					
					
						
						| 
							 | 
						                             "vae": ("VAE", ), | 
					
					
						
						| 
							 | 
						                             "pixels": ("IMAGE", ), | 
					
					
						
						| 
							 | 
						                             }} | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						    RETURN_TYPES = ("CONDITIONING","CONDITIONING","LATENT") | 
					
					
						
						| 
							 | 
						    RETURN_NAMES = ("positive", "negative", "latent") | 
					
					
						
						| 
							 | 
						    FUNCTION = "encode" | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						    CATEGORY = "conditioning/instructpix2pix" | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						    def encode(self, positive, negative, pixels, vae): | 
					
					
						
						| 
							 | 
						        x = (pixels.shape[1] // 8) * 8 | 
					
					
						
						| 
							 | 
						        y = (pixels.shape[2] // 8) * 8 | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						        if pixels.shape[1] != x or pixels.shape[2] != y: | 
					
					
						
						| 
							 | 
						            x_offset = (pixels.shape[1] % 8) // 2 | 
					
					
						
						| 
							 | 
						            y_offset = (pixels.shape[2] % 8) // 2 | 
					
					
						
						| 
							 | 
						            pixels = pixels[:,x_offset:x + x_offset, y_offset:y + y_offset,:] | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						        concat_latent = vae.encode(pixels) | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						        out_latent = {} | 
					
					
						
						| 
							 | 
						        out_latent["samples"] = torch.zeros_like(concat_latent) | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						        out = [] | 
					
					
						
						| 
							 | 
						        for conditioning in [positive, negative]: | 
					
					
						
						| 
							 | 
						            c = [] | 
					
					
						
						| 
							 | 
						            for t in conditioning: | 
					
					
						
						| 
							 | 
						                d = t[1].copy() | 
					
					
						
						| 
							 | 
						                d["concat_latent_image"] = concat_latent | 
					
					
						
						| 
							 | 
						                n = [t[0], d] | 
					
					
						
						| 
							 | 
						                c.append(n) | 
					
					
						
						| 
							 | 
						            out.append(c) | 
					
					
						
						| 
							 | 
						        return (out[0], out[1], out_latent) | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						NODE_CLASS_MAPPINGS = { | 
					
					
						
						| 
							 | 
						    "InstructPixToPixConditioning": InstructPixToPixConditioning, | 
					
					
						
						| 
							 | 
						} | 
					
					
						
						| 
							 | 
						
 |