Skip to content

Commit 714c6b6

Browse files
committed
Added MikeyLatentTileSamplerCustom
1 parent 125888c commit 714c6b6

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed

mikey_nodes.py

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from textwrap import wrap
1515

1616
import html
17+
import latent_preview
1718
import requests
1819
import numpy as np
1920
from PIL import Image, ImageOps, ImageDraw, ImageFilter, ImageChops, ImageFont
@@ -41,6 +42,7 @@
4142
from nodes import LoraLoader, ConditioningAverage, common_ksampler, ImageScale, ImageScaleBy, VAEEncode, VAEDecode
4243
import comfy.utils
4344
from comfy_extras.chainner_models import model_loading
45+
from comfy_extras.nodes_custom_sampler import Noise_EmptyNoise, Noise_RandomNoise
4446
from comfy import model_management, model_base
4547

4648
def calculate_file_hash(file_path):
@@ -3264,6 +3266,66 @@ def sample(self, seed, base_model, samples, positive, negative,
32643266
latent["samples"] = stitch_latent_tensors(latent_samples.shape, resampled_tiles)
32653267
return (latent,)
32663268

3269+
class MikeyLatentTileSamplerCustom:
3270+
@classmethod
3271+
def INPUT_TYPES(s):
3272+
return {"required":
3273+
{"model": ("MODEL",),
3274+
"add_noise": ("BOOLEAN", {"default": True}),
3275+
"noise_seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}),
3276+
"cfg": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step":0.1, "round": 0.01}),
3277+
"positive": ("CONDITIONING", ),
3278+
"negative": ("CONDITIONING", ),
3279+
"sampler": ("SAMPLER", ),
3280+
"sigmas": ("SIGMAS", ),
3281+
"latent_image": ("LATENT", ),
3282+
"tile_size": ("INT", {"default": 1024, "min": 256, "max": 4096, "step": 64}),
3283+
}
3284+
}
3285+
3286+
RETURN_TYPES = ("LATENT", )
3287+
RETURN_NAMES = ("samples", )
3288+
FUNCTION = "tile_sample"
3289+
CATEGORY = "Mikey/Sampling"
3290+
3291+
def sample(self, model, add_noise, noise_seed, cfg, positive, negative, sampler, sigmas, latent_image):
3292+
latent = latent_image
3293+
latent_image = latent["samples"]
3294+
if not add_noise:
3295+
noise = Noise_EmptyNoise().generate_noise(latent)
3296+
else:
3297+
noise = Noise_RandomNoise(noise_seed).generate_noise(latent)
3298+
3299+
noise_mask = None
3300+
if "noise_mask" in latent:
3301+
noise_mask = latent["noise_mask"]
3302+
3303+
x0_output = {}
3304+
callback = latent_preview.prepare_callback(model, sigmas.shape[-1] - 1, x0_output)
3305+
3306+
disable_pbar = not comfy.utils.PROGRESS_BAR_ENABLED
3307+
samples = comfy.sample.sample_custom(model, noise, cfg, sampler, sigmas, positive, negative, latent_image, noise_mask=noise_mask, callback=callback, disable_pbar=disable_pbar, seed=noise_seed)
3308+
3309+
out = latent.copy()
3310+
out["samples"] = samples
3311+
if "x0" in x0_output:
3312+
out_denoised = latent.copy()
3313+
out_denoised["samples"] = model.model.process_latent_out(x0_output["x0"].cpu())
3314+
else:
3315+
out_denoised = out
3316+
return out_denoised
3317+
3318+
def tile_sample(self, model, add_noise, noise_seed, cfg, positive, negative, sampler, sigmas, latent_image, tile_size):
3319+
latent = latent_image.copy()
3320+
# split image into tiles
3321+
latent_samples = latent["samples"]
3322+
tiles = split_latent_tensor(latent_samples, tile_size)
3323+
# resample each tile using self.sample
3324+
resampled_tiles = [(coords, self.sample(model, add_noise, noise_seed, cfg, positive, negative, sampler, sigmas, {"samples": tile})["samples"]) for coords, tile in tiles]
3325+
# stitch the tiles to get the final upscaled latent tensor
3326+
latent["samples"] = stitch_latent_tensors(latent_samples.shape, resampled_tiles)
3327+
return (latent, )
3328+
32673329
class FaceFixerOpenCV:
32683330
@classmethod
32693331
def INPUT_TYPES(s):
@@ -5073,6 +5135,7 @@ def get_subdirectories(self, directory):
50735135
'Mikey Sampler Tiled': MikeySamplerTiled,
50745136
'Mikey Sampler Tiled Base Only': MikeySamplerTiledBaseOnly,
50755137
'MikeyLatentTileSampler': MikeyLatentTileSampler,
5138+
'MikeyLatentTileSamplerCustom': MikeyLatentTileSamplerCustom,
50765139
'FaceFixerOpenCV': FaceFixerOpenCV,
50775140
'AddMetaData': AddMetaData,
50785141
'SaveMetaData': SaveMetaData,
@@ -5141,6 +5204,7 @@ def get_subdirectories(self, directory):
51415204
'MikeySamplerTiledAdvancedBaseOnly': 'Mikey Sampler Tiled Advanced Base Only',
51425205
'Mikey Sampler Tiled Base Only': 'Mikey Sampler Tiled Base Only',
51435206
'MikeyLatentTileSampler': 'Latent Tile Sampler (Mikey)',
5207+
'MikeyLatentTileSamplerCustom': 'Latent Tile Sampler Custom (Mikey)',
51445208
'FaceFixerOpenCV': 'Face Fixer OpenCV (Mikey)',
51455209
'AddMetaData': 'AddMetaData (Mikey)',
51465210
'SaveMetaData': 'SaveMetaData (Mikey)',

0 commit comments

Comments
 (0)