mirror of
https://github.com/Wan-Video/Wan2.1.git
synced 2025-11-04 14:16:57 +00:00
no more pain
This commit is contained in:
parent
f2db023a3d
commit
959ab9e0c1
@ -20,7 +20,7 @@ WanGP supports the Wan (and derived models), Hunyuan Video and LTV Video models
|
|||||||
**Follow DeepBeepMeep on Twitter/X to get the Latest News**: https://x.com/deepbeepmeep
|
**Follow DeepBeepMeep on Twitter/X to get the Latest News**: https://x.com/deepbeepmeep
|
||||||
|
|
||||||
## 🔥 Latest Updates :
|
## 🔥 Latest Updates :
|
||||||
### September 2 2025: WanGP v8.3 - At last the pain stops
|
### September 2 2025: WanGP v8.31 - At last the pain stops
|
||||||
|
|
||||||
- This single new feature should give you the strength to face all the potential bugs of this new release:
|
- This single new feature should give you the strength to face all the potential bugs of this new release:
|
||||||
**Images Management (multiple additions or deletions, reordering) for Start Images / End Images / Images References.**
|
**Images Management (multiple additions or deletions, reordering) for Start Images / End Images / Images References.**
|
||||||
@ -30,6 +30,7 @@ WanGP supports the Wan (and derived models), Hunyuan Video and LTV Video models
|
|||||||
- **Experimental Sage 3 Attention support**: you will need to deserve this one, first you need a Blackwell GPU (RTX50xx), then you will have to compile Sage 3, install it and cross your fingers that there isn't any crash.
|
- **Experimental Sage 3 Attention support**: you will need to deserve this one, first you need a Blackwell GPU (RTX50xx), then you will have to compile Sage 3, install it and cross your fingers that there isn't any crash.
|
||||||
|
|
||||||
|
|
||||||
|
*update 8.31: one shouldnt talk about bugs if one dont want to attract bugs*
|
||||||
|
|
||||||
### August 29 2025: WanGP v8.21 - Here Goes Your Weekend
|
### August 29 2025: WanGP v8.21 - Here Goes Your Weekend
|
||||||
|
|
||||||
|
|||||||
@ -224,7 +224,9 @@ class AdvancedMediaGallery:
|
|||||||
n = len(get_list(gallery))
|
n = len(get_list(gallery))
|
||||||
sel = idx if (idx is not None and 0 <= idx < n) else None
|
sel = idx if (idx is not None and 0 <= idx < n) else None
|
||||||
st["selected"] = sel
|
st["selected"] = sel
|
||||||
return gr.update(selected_index=sel), st
|
# return gr.update(selected_index=sel), st
|
||||||
|
# return gr.update(), st
|
||||||
|
return st
|
||||||
|
|
||||||
def _on_gallery_change(self, value: List[Any], state: Dict[str, Any]) :
|
def _on_gallery_change(self, value: List[Any], state: Dict[str, Any]) :
|
||||||
# Fires when users add/drag/drop/delete via the Gallery itself.
|
# Fires when users add/drag/drop/delete via the Gallery itself.
|
||||||
@ -238,8 +240,10 @@ class AdvancedMediaGallery:
|
|||||||
else:
|
else:
|
||||||
new_sel = old_sel
|
new_sel = old_sel
|
||||||
st["selected"] = new_sel
|
st["selected"] = new_sel
|
||||||
return gr.update(value=items_filtered, selected_index=new_sel), st
|
# return gr.update(value=items_filtered, selected_index=new_sel), st
|
||||||
|
# return gr.update(value=items_filtered), st
|
||||||
|
|
||||||
|
return gr.update(), st
|
||||||
|
|
||||||
def _on_add(self, files_payload: Any, state: Dict[str, Any], gallery):
|
def _on_add(self, files_payload: Any, state: Dict[str, Any], gallery):
|
||||||
"""
|
"""
|
||||||
@ -338,7 +342,8 @@ class AdvancedMediaGallery:
|
|||||||
return gr.update(value=[], selected_index=None), st
|
return gr.update(value=[], selected_index=None), st
|
||||||
new_sel = min(sel, len(items) - 1)
|
new_sel = min(sel, len(items) - 1)
|
||||||
st["items"] = items; st["selected"] = new_sel
|
st["items"] = items; st["selected"] = new_sel
|
||||||
return gr.update(value=items, selected_index=new_sel), st
|
# return gr.update(value=items, selected_index=new_sel), st
|
||||||
|
return gr.update(value=items), st
|
||||||
|
|
||||||
def _on_move(self, delta: int, state: Dict[str, Any], gallery) :
|
def _on_move(self, delta: int, state: Dict[str, Any], gallery) :
|
||||||
st = get_state(state); items: List[Any] = get_list(gallery); sel = st.get("selected", None)
|
st = get_state(state); items: List[Any] = get_list(gallery); sel = st.get("selected", None)
|
||||||
@ -352,8 +357,8 @@ class AdvancedMediaGallery:
|
|||||||
return gr.update(value=items, selected_index=j), st
|
return gr.update(value=items, selected_index=j), st
|
||||||
|
|
||||||
def _on_clear(self, state: Dict[str, Any]) :
|
def _on_clear(self, state: Dict[str, Any]) :
|
||||||
st = {"items": [], "selected": None, "single": state.get("single", False), "mode": self.media_mode}
|
st = {"items": [], "selected": None, "single": get_state(state).get("single", False), "mode": self.media_mode}
|
||||||
return gr.update(value=[], selected_index=None), st
|
return gr.update(value=[], selected_index=0), st
|
||||||
|
|
||||||
def _on_toggle_single(self, to_single: bool, state: Dict[str, Any]) :
|
def _on_toggle_single(self, to_single: bool, state: Dict[str, Any]) :
|
||||||
st = get_state(state); st["single"] = bool(to_single)
|
st = get_state(state); st["single"] = bool(to_single)
|
||||||
@ -397,7 +402,8 @@ class AdvancedMediaGallery:
|
|||||||
columns=self.columns,
|
columns=self.columns,
|
||||||
show_label=self.show_label,
|
show_label=self.show_label,
|
||||||
preview= True,
|
preview= True,
|
||||||
type="pil",
|
# type="pil",
|
||||||
|
file_types= list(IMAGE_EXTS) if self.media_mode == "image" else list(VIDEO_EXTS),
|
||||||
selected_index=self._initial_state["selected"], # server-side selection
|
selected_index=self._initial_state["selected"], # server-side selection
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -424,7 +430,7 @@ class AdvancedMediaGallery:
|
|||||||
self.gallery.select(
|
self.gallery.select(
|
||||||
self._on_select,
|
self._on_select,
|
||||||
inputs=[self.state, self.gallery],
|
inputs=[self.state, self.gallery],
|
||||||
outputs=[self.gallery, self.state],
|
outputs=[self.state],
|
||||||
)
|
)
|
||||||
|
|
||||||
# Gallery value changed by user actions (click-to-add, drag-drop, internal remove, etc.)
|
# Gallery value changed by user actions (click-to-add, drag-drop, internal remove, etc.)
|
||||||
|
|||||||
30
wgp.py
30
wgp.py
@ -60,7 +60,7 @@ AUTOSAVE_FILENAME = "queue.zip"
|
|||||||
PROMPT_VARS_MAX = 10
|
PROMPT_VARS_MAX = 10
|
||||||
|
|
||||||
target_mmgp_version = "3.5.11"
|
target_mmgp_version = "3.5.11"
|
||||||
WanGP_version = "8.3"
|
WanGP_version = "8.31"
|
||||||
settings_version = 2.28
|
settings_version = 2.28
|
||||||
max_source_video_frames = 3000
|
max_source_video_frames = 3000
|
||||||
prompt_enhancer_image_caption_model, prompt_enhancer_image_caption_processor, prompt_enhancer_llm_model, prompt_enhancer_llm_tokenizer = None, None, None, None
|
prompt_enhancer_image_caption_model, prompt_enhancer_image_caption_processor, prompt_enhancer_llm_model, prompt_enhancer_llm_tokenizer = None, None, None, None
|
||||||
@ -186,6 +186,17 @@ def compute_sliding_window_no(current_video_length, sliding_window_size, discard
|
|||||||
return 1 + math.ceil(left_after_first_window / (sliding_window_size - discard_last_frames - reuse_frames))
|
return 1 + math.ceil(left_after_first_window / (sliding_window_size - discard_last_frames - reuse_frames))
|
||||||
|
|
||||||
|
|
||||||
|
def clean_image_list(gradio_list):
|
||||||
|
if not isinstance(gradio_list, list): gradio_list = [gradio_list]
|
||||||
|
gradio_list = [ tup[0] if isinstance(tup, tuple) else tup for tup in gradio_list ]
|
||||||
|
|
||||||
|
if any( not isinstance(image, (Image.Image, str)) for image in gradio_list): return None
|
||||||
|
if any( isinstance(image, str) and not has_image_file_extension(image) for image in gradio_list): return None
|
||||||
|
gradio_list = [ convert_image( Image.open(img) if isinstance(img, str) else img ) for img in gradio_list ]
|
||||||
|
return gradio_list
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def process_prompt_and_add_tasks(state, model_choice):
|
def process_prompt_and_add_tasks(state, model_choice):
|
||||||
|
|
||||||
if state.get("validate_success",0) != 1:
|
if state.get("validate_success",0) != 1:
|
||||||
@ -436,11 +447,10 @@ def process_prompt_and_add_tasks(state, model_choice):
|
|||||||
if image_refs == None or len(image_refs) == 0:
|
if image_refs == None or len(image_refs) == 0:
|
||||||
gr.Info("You must provide at least one Refererence Image")
|
gr.Info("You must provide at least one Refererence Image")
|
||||||
return
|
return
|
||||||
if any(isinstance(image[0], str) for image in image_refs) :
|
image_refs = clean_image_list(image_refs)
|
||||||
|
if image_refs == None :
|
||||||
gr.Info("A Reference Image should be an Image")
|
gr.Info("A Reference Image should be an Image")
|
||||||
return
|
return
|
||||||
if isinstance(image_refs, list):
|
|
||||||
image_refs = [ convert_image(tup[0]) for tup in image_refs ]
|
|
||||||
else:
|
else:
|
||||||
image_refs = None
|
image_refs = None
|
||||||
|
|
||||||
@ -497,12 +507,10 @@ def process_prompt_and_add_tasks(state, model_choice):
|
|||||||
if image_start == None or isinstance(image_start, list) and len(image_start) == 0:
|
if image_start == None or isinstance(image_start, list) and len(image_start) == 0:
|
||||||
gr.Info("You must provide a Start Image")
|
gr.Info("You must provide a Start Image")
|
||||||
return
|
return
|
||||||
if not isinstance(image_start, list):
|
image_start = clean_image_list(image_start)
|
||||||
image_start = [image_start]
|
if image_start == None :
|
||||||
if not all( not isinstance(img[0], str) for img in image_start) :
|
|
||||||
gr.Info("Start Image should be an Image")
|
gr.Info("Start Image should be an Image")
|
||||||
return
|
return
|
||||||
image_start = [ convert_image(tup[0]) for tup in image_start ]
|
|
||||||
else:
|
else:
|
||||||
image_start = None
|
image_start = None
|
||||||
|
|
||||||
@ -510,15 +518,13 @@ def process_prompt_and_add_tasks(state, model_choice):
|
|||||||
if image_end == None or isinstance(image_end, list) and len(image_end) == 0:
|
if image_end == None or isinstance(image_end, list) and len(image_end) == 0:
|
||||||
gr.Info("You must provide an End Image")
|
gr.Info("You must provide an End Image")
|
||||||
return
|
return
|
||||||
if not isinstance(image_end, list):
|
image_end = clean_image_list(image_end)
|
||||||
image_end = [image_end]
|
if image_end == None :
|
||||||
if not all( not isinstance(img[0], str) for img in image_end) :
|
|
||||||
gr.Info("End Image should be an Image")
|
gr.Info("End Image should be an Image")
|
||||||
return
|
return
|
||||||
if len(image_start) != len(image_end):
|
if len(image_start) != len(image_end):
|
||||||
gr.Info("The number of Start and End Images should be the same ")
|
gr.Info("The number of Start and End Images should be the same ")
|
||||||
return
|
return
|
||||||
image_end = [ convert_image(tup[0]) for tup in image_end ]
|
|
||||||
else:
|
else:
|
||||||
image_end = None
|
image_end = None
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user