If IS_CHANGED returns exception delete the output instead of crashing.

This commit is contained in:
comfyanonymous 2023-04-26 02:13:56 -04:00
parent 951c0c2bbe
commit 3a1f9dba20
1 changed files with 25 additions and 21 deletions

View File

@ -97,40 +97,44 @@ def recursive_output_delete_if_changed(prompt, old_prompt, outputs, current_item
is_changed_old = '' is_changed_old = ''
is_changed = '' is_changed = ''
to_delete = False
if hasattr(class_def, 'IS_CHANGED'): if hasattr(class_def, 'IS_CHANGED'):
if unique_id in old_prompt and 'is_changed' in old_prompt[unique_id]: if unique_id in old_prompt and 'is_changed' in old_prompt[unique_id]:
is_changed_old = old_prompt[unique_id]['is_changed'] is_changed_old = old_prompt[unique_id]['is_changed']
if 'is_changed' not in prompt[unique_id]: if 'is_changed' not in prompt[unique_id]:
input_data_all = get_input_data(inputs, class_def, unique_id, outputs) input_data_all = get_input_data(inputs, class_def, unique_id, outputs)
if input_data_all is not None: if input_data_all is not None:
is_changed = class_def.IS_CHANGED(**input_data_all) try:
prompt[unique_id]['is_changed'] = is_changed is_changed = class_def.IS_CHANGED(**input_data_all)
prompt[unique_id]['is_changed'] = is_changed
except:
to_delete = True
else: else:
is_changed = prompt[unique_id]['is_changed'] is_changed = prompt[unique_id]['is_changed']
if unique_id not in outputs: if unique_id not in outputs:
return True return True
to_delete = False if not to_delete:
if is_changed != is_changed_old: if is_changed != is_changed_old:
to_delete = True to_delete = True
elif unique_id not in old_prompt: elif unique_id not in old_prompt:
to_delete = True to_delete = True
elif inputs == old_prompt[unique_id]['inputs']: elif inputs == old_prompt[unique_id]['inputs']:
for x in inputs: for x in inputs:
input_data = inputs[x] input_data = inputs[x]
if isinstance(input_data, list): if isinstance(input_data, list):
input_unique_id = input_data[0] input_unique_id = input_data[0]
output_index = input_data[1] output_index = input_data[1]
if input_unique_id in outputs: if input_unique_id in outputs:
to_delete = recursive_output_delete_if_changed(prompt, old_prompt, outputs, input_unique_id) to_delete = recursive_output_delete_if_changed(prompt, old_prompt, outputs, input_unique_id)
else: else:
to_delete = True to_delete = True
if to_delete: if to_delete:
break break
else: else:
to_delete = True to_delete = True
if to_delete: if to_delete:
d = outputs.pop(unique_id) d = outputs.pop(unique_id)