diff --git a/CHANGELOG.md b/CHANGELOG.md index 286cf5776..3fade3459 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Change Log for SD.Next +## Update for 2026-01-21 + +- add `SD_DEVICE_DEBUG` env variable to trace rocm/xpu/directml init failures +- fix `all_seeds` +- improve `wrap_gradio` error handling + ## Update for 2026-01-20 ### Highlights for 2026-01-20 diff --git a/modules/call_queue.py b/modules/call_queue.py index 7ed03e5b9..ebfe58f0f 100644 --- a/modules/call_queue.py +++ b/modules/call_queue.py @@ -37,7 +37,6 @@ def wrap_gradio_gpu_call(func, extra_outputs=None, name=None): id_task = None with get_lock(): progress.start_task(id_task) - res = [None, '', '', ''] try: res = func(*args, **kwargs) progress.record_results(id_task, res) @@ -45,7 +44,8 @@ def wrap_gradio_gpu_call(func, extra_outputs=None, name=None): shared.log.error(f"Exception: {e}") shared.log.error(f"Arguments: args={str(args)[:10240]} kwargs={str(kwargs)[:10240]}") errors.display(e, 'gradio call') - res[-1] = f"
{html.escape(str(e))}
" + res = extra_outputs or [] + res.append(f"
{html.escape(str(e))}
") finally: progress.finish_task(id_task) return res @@ -70,7 +70,8 @@ def wrap_gradio_call(func, extra_outputs=None, add_stats=False, name=None): if res is None: msg = "No result returned from function" shared.log.warning(msg) - res = [None, '', '', f"
{html.escape(msg)}
"] + res = extra_outputs_array or [] + res.append(f"
{html.escape(msg)}
") else: res = list(res) if shared.cmd_opts.profile: @@ -78,9 +79,8 @@ def wrap_gradio_call(func, extra_outputs=None, add_stats=False, name=None): errors.profile(pr, 'Wrap') except Exception as e: errors.display(e, 'gradio call') - if extra_outputs_array is None: - extra_outputs_array = [None, ''] - res = extra_outputs_array + [f"
{html.escape(type(e).__name__+': '+str(e))}
"] + res = extra_outputs_array or [] + res.append(f"
{html.escape(type(e).__name__+': '+str(e))}
") shared.state.end(jobid) if not add_stats: return tuple(res) diff --git a/modules/video_models/video_run.py b/modules/video_models/video_run.py index 8f478fa15..a8603679a 100644 --- a/modules/video_models/video_run.py +++ b/modules/video_models/video_run.py @@ -11,6 +11,7 @@ debug = shared.log.trace if os.environ.get('SD_VIDEO_DEBUG', None) is not None e def generate(*args, **kwargs): task_id, ui_state, engine, model, prompt, negative, styles, width, height, frames, steps, sampler_index, sampler_shift, dynamic_shift, seed, guidance_scale, guidance_true, init_image, init_strength, last_image, vae_type, vae_tile_frames, mp4_fps, mp4_interpolate, mp4_codec, mp4_ext, mp4_opt, mp4_video, mp4_frames, mp4_sf, vlm_enhance, vlm_model, vlm_system_prompt, override_settings = args + if engine is None or model is None or engine == 'None' or model == 'None': return video_utils.queue_err('model not selected') # videojob = shared.state.begin('Video') diff --git a/modules/video_models/video_ui.py b/modules/video_models/video_ui.py index de0511d64..fdcefec46 100644 --- a/modules/video_models/video_ui.py +++ b/modules/video_models/video_ui.py @@ -190,7 +190,7 @@ def create_ui(prompt, negative, styles, overrides, init_image, init_strength, la ] video_dict = dict( - fn=call_queue.wrap_gradio_gpu_call(video_run.generate, extra_outputs=[None, '', ''], name='Video'), + fn=call_queue.wrap_gradio_gpu_call(video_run.generate, extra_outputs=[gr.update(), gr.update(), gr.update(), gr.update()], name='Video'), _js="submit_video", inputs=state_inputs + video_inputs, outputs=video_outputs,