@@ -221,6 +221,55 @@ def tonemap_reinhard(latent, **kwargs):
221221 return normalized_latent * new_magnitude
222222 return (tonemap_reinhard ,)
223223
224+ class LatentOperationSharpen :
225+ @classmethod
226+ def INPUT_TYPES (s ):
227+ return {"required" : {
228+ "sharpen_radius" : ("INT" , {
229+ "default" : 9 ,
230+ "min" : 1 ,
231+ "max" : 31 ,
232+ "step" : 1
233+ }),
234+ "sigma" : ("FLOAT" , {
235+ "default" : 1.0 ,
236+ "min" : 0.1 ,
237+ "max" : 10.0 ,
238+ "step" : 0.1
239+ }),
240+ "alpha" : ("FLOAT" , {
241+ "default" : 0.1 ,
242+ "min" : 0.0 ,
243+ "max" : 5.0 ,
244+ "step" : 0.01
245+ }),
246+ }}
247+
248+ RETURN_TYPES = ("LATENT_OPERATION" ,)
249+ FUNCTION = "op"
250+
251+ CATEGORY = "latent/advanced/operations"
252+ EXPERIMENTAL = True
253+
254+ def op (self , sharpen_radius , sigma , alpha ):
255+ def sharpen (latent , ** kwargs ):
256+ luminance = (torch .linalg .vector_norm (latent , dim = (1 )) + 1e-6 )[:,None ]
257+ normalized_latent = latent / luminance
258+ channels = latent .shape [1 ]
259+
260+ kernel_size = sharpen_radius * 2 + 1
261+ kernel = comfy_extras .nodes_post_processing .gaussian_kernel (kernel_size , sigma , device = luminance .device )
262+ center = kernel_size // 2
263+
264+ kernel *= alpha * - 10
265+ kernel [center , center ] = kernel [center , center ] - kernel .sum () + 1.0
266+
267+ padded_image = torch .nn .functional .pad (normalized_latent , (sharpen_radius ,sharpen_radius ,sharpen_radius ,sharpen_radius ), 'reflect' )
268+ sharpened = torch .nn .functional .conv2d (padded_image , kernel .repeat (channels , 1 , 1 ).unsqueeze (1 ), padding = kernel_size // 2 , groups = channels )[:,:,sharpen_radius :- sharpen_radius , sharpen_radius :- sharpen_radius ]
269+
270+ return luminance * sharpened
271+ return (sharpen ,)
272+
224273NODE_CLASS_MAPPINGS = {
225274 "LatentAdd" : LatentAdd ,
226275 "LatentSubtract" : LatentSubtract ,
@@ -231,4 +280,5 @@ def tonemap_reinhard(latent, **kwargs):
231280 "LatentApplyOperation" : LatentApplyOperation ,
232281 "LatentApplyOperationCFG" : LatentApplyOperationCFG ,
233282 "LatentOperationTonemapReinhard" : LatentOperationTonemapReinhard ,
283+ "LatentOperationSharpen" : LatentOperationSharpen ,
234284}
0 commit comments