| """ |
| Simple latent generator for ComfyUI. |
| The ``MagicSeedLatent`` class creates a random latent tensor of the specified size. |
| If ``mix_image`` is enabled, the input image is encoded with a VAE and mixed with noise. |
| """ |
|
|
| from __future__ import annotations |
|
|
| import torch |
|
|
|
|
| class MagicSeedLatent: |
| """Generate a latent tensor with optional image mixing.""" |
|
|
| @classmethod |
| def INPUT_TYPES(cls): |
| return { |
| "required": { |
| "width": ("INT", {"default": 512, "min": 8, "max": 4096, "step": 8}), |
| "height": ("INT", {"default": 512, "min": 8, "max": 4096, "step": 8}), |
| "batch_size": ("INT", {"default": 1, "min": 1, "max": 64}), |
| "sigma": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.1}), |
| "bias": ("FLOAT", {"default": 0.0, "min": -10.0, "max": 10.0, "step": 0.1}), |
| "mix_image": ("BOOLEAN", {"default": False}), |
| }, |
| "optional": { |
| "vae": ("VAE", {}), |
| "image": ("IMAGE", {}), |
| }, |
| } |
|
|
| RETURN_TYPES = ("LATENT",) |
| RETURN_NAMES = ("LATENT",) |
| FUNCTION = "generate" |
| CATEGORY = "MagicNodes" |
|
|
| def generate( |
| self, |
| width: int, |
| height: int, |
| batch_size: int, |
| sigma: float, |
| bias: float, |
| mix_image: bool = False, |
| vae=None, |
| image=None, |
| ): |
| """Generate a random latent tensor and optionally mix it with an image.""" |
|
|
| lat = torch.randn(batch_size, 4, height // 8, width // 8) * sigma + bias |
| if mix_image and vae is not None and image is not None: |
| encoded = vae.encode(image[:, :, :, :3]) |
| lat = encoded + lat |
| return ({"samples": lat},) |