| 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, |
| } |
|
|