Extraltodeus/ComfyUI-AutomaticCFG

TOIL: Comfy deprecated `comfy.samplers.calc_cond_uncond_batch`

tildebyte opened this issue · 5 comments

Deprecation text reads

WARNING: The comfy.samplers.calc_cond_uncond_batch function is deprecated please use the calc_cond_batch one instead.

I tried poking at it in

cond_pred, uncond_pred = comfy.samplers.calc_cond_uncond_batch(model, cond, uncond_, x, timestep, model_options)
but all I managed to do was break it 😝.

calc_cond_batch doesn't take an uncond (not surprising), but changing only that got me a TB involving a type mismatch:

Traceback
Traceback (most recent call last):
  File "C:\ComfyUI\execution.py", line 151, in recursive_execute
    output_data, output_ui = get_output_data(obj, input_data_all)
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\ComfyUI\execution.py", line 81, in get_output_data
    return_values = map_node_over_list(obj, input_data_all, obj.FUNCTION, allow_interrupt=True)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\ComfyUI\execution.py", line 74, in map_node_over_list
    results.append(getattr(obj, func)(**slice_dict(input_data_all, i)))
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\ComfyUI\custom_nodes\ssitu-restart_sampling\nodes.py", line 132, in sample
    return restart_sampling(
           ^^^^^^^^^^^^^^^^^
  File "C:\ComfyUI\custom_nodes\ssitu-restart_sampling\restart_sampling.py", line 249, in restart_sampling
    samples = sample_custom(
              ^^^^^^^^^^^^^^
  File "C:\ComfyUI\comfy\sample.py", line 113, in sample_custom
    samples = comfy.samplers.sample(real_model, noise, positive_copy, negative_copy, cfg, model.load_device, sampler, sigmas, model_options=model.model_options, latent_image=latent_image, denoise_mask=noise_mask, callback=callback, disable_pbar=disable_pbar, seed=seed)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\ComfyUI\comfy\samplers.py", line 607, in sample
    samples = sampler.sample(model_wrap, sigmas, extra_args, callback, noise, latent_image, denoise_mask, disable_pbar)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\ComfyUI\comfy\samplers.py", line 545, in sample
    samples = self.sampler_function(model_k, noise, sigmas, extra_args=extra_args, callback=k_callback, disable=disable_pbar, **self.extra_options)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\ComfyUI\.venv\lib\site-packages\torch\utils\_contextlib.py", line 115, in decorate_context
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "C:\ComfyUI\custom_nodes\ssitu-restart_sampling\restart_sampling.py", line 496, in ksampler_restart_wrapper
    x = pi.execute(x, do_sample, get_noise_sampler)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\ComfyUI\.venv\lib\site-packages\torch\utils\_contextlib.py", line 115, in decorate_context
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "C:\ComfyUI\custom_nodes\ssitu-restart_sampling\restart_sampling.py", line 304, in execute
    x = sample(x, self.sigmas, -1)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\ComfyUI\custom_nodes\ssitu-restart_sampling\restart_sampling.py", line 488, in do_sample
    return sampler_function(x, sigs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\ComfyUI\custom_nodes\ssitu-restart_sampling\restart_sampling.py", line 471, in sampler_function
    return ksampler.sampler_function(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\ComfyUI\.venv\lib\site-packages\torch\utils\_contextlib.py", line 115, in decorate_context
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "C:\ComfyUI\comfy\k_diffusion\sampling.py", line 580, in sample_dpmpp_2m
    denoised = model(x, sigmas[i] * s_in, **extra_args)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\ComfyUI\.venv\lib\site-packages\torch\nn\modules\module.py", line 1527, in _wrapped_call_impl
    return self._call_impl(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\ComfyUI\.venv\lib\site-packages\torch\nn\modules\module.py", line 1536, in _call_impl
    return forward_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\ComfyUI\comfy\samplers.py", line 283, in forward
    out = self.inner_model(x, sigma, cond=cond, uncond=uncond, cond_scale=cond_scale, model_options=model_options, seed=seed)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\ComfyUI\.venv\lib\site-packages\torch\nn\modules\module.py", line 1527, in _wrapped_call_impl
    return self._call_impl(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\ComfyUI\.venv\lib\site-packages\torch\nn\modules\module.py", line 1536, in _call_impl
    return forward_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\ComfyUI\comfy\samplers.py", line 270, in forward
    return self.apply_model(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\ComfyUI\comfy\samplers.py", line 267, in apply_model
    out = sampling_function(self.inner_model, x, timestep, uncond, cond, cond_scale, model_options=model_options, seed=seed)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\ComfyUI\custom_nodes\extraltodeus-AutomaticCFG\nodes.py", line 21, in sampling_function_patched
    cond_pred, uncond_pred = comfy.samplers.calc_cond_batch(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\ComfyUI\comfy\samplers.py", line 142, in calc_cond_batch
    p = get_area_and_mult(x, x_in, timestep)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\ComfyUI\comfy\samplers.py", line 58, in get_area_and_mult
    model_conds = conds["model_conds"]
                  ~~~~~^^^^^^^^^^^^^^^
TypeError: string indices must be integers, not 'str'
cond_pred, uncond_pred = comfy.samplers.calc_cond_uncond_batch(model, cond, uncond_, x, timestep, model_options) 
def calc_cond_uncond_batch(model, cond, uncond, x_in, timestep, model_options): #TODO: remove
    logging.warning("WARNING: The comfy.samplers.calc_cond_uncond_batch function is deprecated please use the calc_cond_batch one instead.")
    return tuple(calc_cond_batch(model, [cond, uncond], x_in, timestep, model_options))

Should be relatively easy to unwrap this, given that the calc_cond_uncond_batch method has a way of unwrapping burned in.

I'll give it a try this weekend and raise a PR if I get any success.

Woops, haven't updated yet. Will check soon!

Put up a pull request, basically just feeding in what the depreciated code does, I don't think anything extra needs to be done. #9

Great! Beat me to it.

Put up a pull request, basically just feeding in what the depreciated code does, I don't think anything extra needs to be done. #9

Only noticed after updating! Thank you ^^