From b727d5174f8aaeac96881e424443dba2d6693914 Mon Sep 17 00:00:00 2001 From: Chris Malone Date: Wed, 19 Mar 2025 12:46:42 +1100 Subject: [PATCH 1/4] added output path to config --- gradio_server.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/gradio_server.py b/gradio_server.py index 777e51a..57ab19b 100644 --- a/gradio_server.py +++ b/gradio_server.py @@ -269,6 +269,7 @@ if not Path(server_config_filename).is_file(): "transformer_filename": transformer_choices_t2v[0], "transformer_filename_i2v": transformer_choices_i2v[1], ######## "text_encoder_filename" : text_encoder_choices[1], + "save_path": os.path.join(os.getcwd(), "gradio_outputs"), "compile" : "", "default_ui": "t2v", "boost" : 1, @@ -643,6 +644,7 @@ def apply_changes( state, transformer_t2v_choice, transformer_i2v_choice, text_encoder_choice, + save_path_choice, attention_choice, compile_choice, profile_choice, @@ -660,6 +662,7 @@ def apply_changes( state, "transformer_filename": transformer_choices_t2v[transformer_t2v_choice], "transformer_filename_i2v": transformer_choices_i2v[transformer_i2v_choice], ########## "text_encoder_filename" : text_encoder_choices[text_encoder_choice], + "save_path" : save_path_choice, "compile" : compile_choice, "profile" : profile_choice, "vae_config" : vae_config_choice, @@ -1088,7 +1091,8 @@ def generate_video( file_list = [] state["file_list"] = file_list - save_path = os.path.join(os.getcwd(), "gradio_outputs") + global save_path + save_path = server_config.get("save_path", os.path.join(os.getcwd(), "gradio_outputs")) os.makedirs(save_path, exist_ok=True) video_no = 0 total_video = repeat_generation * len(prompts) @@ -1229,7 +1233,7 @@ def generate_video( file_name = f"{time_flag}_seed{seed}_{sanitize_file_name(prompt[:50]).strip()}.mp4" else: file_name = f"{time_flag}_seed{seed}_{sanitize_file_name(prompt[:100]).strip()}.mp4" - video_path = os.path.join(os.getcwd(), "gradio_outputs", file_name) + video_path = os.path.join(save_path, file_name) cache_video( tensor=sample[None], save_file=video_path, @@ -1675,6 +1679,10 @@ def create_demo(): value= index, label="Text Encoder model" ) + save_path_choice = gr.Textbox( + label="Output Folder for Generated Videos", + value=server_config.get("save_path", os.path.join(os.getcwd(), "gradio_outputs")) + ) def check(mode): if not mode in attention_modes_supported: return " (NOT INSTALLED)" @@ -2030,6 +2038,7 @@ def create_demo(): transformer_t2v_choice, transformer_i2v_choice, text_encoder_choice, + save_path_choice, attention_choice, compile_choice, profile_choice, From f1699212d61719c94933412a1fa74f5ad9817524 Mon Sep 17 00:00:00 2001 From: Chris Malone Date: Wed, 19 Mar 2025 13:58:14 +1100 Subject: [PATCH 2/4] added --res --teacache --skip-guidance args --- gradio_server.py | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/gradio_server.py b/gradio_server.py index 57ab19b..13c1c7a 100644 --- a/gradio_server.py +++ b/gradio_server.py @@ -219,6 +219,27 @@ def _parse_args(): help="vae config mode" ) + parser.add_argument( + "--res", + type=str, + default="480p", + choices=["480p", "720p", "823p", "1024p", "1280p"], + help="Default resolution for the video (480p, 720p, 823p, 1024p or 1280p)" + ) + + parser.add_argument( + "--teacache", + type=str, + default="0", + choices=["0", "1.5", "1.75", "2.0", "2.25", "2.5"], + help="Default teacache setting" + ) + + parser.add_argument( + "--skip-guidance", + action="store_true", + help="Enable skip guidance" + ) args = parser.parse_args() @@ -331,7 +352,7 @@ else: root_lora_dir = lora_dir lora_dir = get_lora_dir(root_lora_dir) lora_preselected_preset = args.lora_preset -default_tea_cache = 0 +default_tea_cache = float(args.teacache) # if args.fast : #or args.fastest # transformer_filename_t2v = transformer_choices_t2v[2] # attention_mode="sage2" if "sage2" in attention_modes_supported else "sage" @@ -1825,6 +1846,7 @@ def create_demo(): state = gr.State(state_dict) with gr.Row(): + res = args.res if use_image2video: resolution = gr.Dropdown( choices=[ @@ -1832,7 +1854,7 @@ def create_demo(): ("720p", "1280x720"), ("480p", "832x480"), ], - value="832x480", + value="1280x720" if res == "720p" else "832x480", label="Resolution (video will have the same height / width ratio than the original image)" ) @@ -1853,7 +1875,7 @@ def create_demo(): # ("624x832 (3:4, 540p)", "624x832"), # ("720x720 (1:1, 540p)", "720x720"), ], - value="832x480", + value={"480p": "832x480","720p": "1280x720","823p": "480x832","1024p": "1024x1024","1280p": "720x1280",}.get(res, "832x480"), label="Resolution" ) @@ -1940,7 +1962,7 @@ def create_demo(): ("OFF", 0), ("ON", 1), ], - value= 0, + value= 1 if args.skip_guidance else 0, visible=True, scale = 1, label="Skip Layer guidance" From 675663584dddc7257d7bb1be555bac9860df6ba7 Mon Sep 17 00:00:00 2001 From: Chris Malone Date: Thu, 20 Mar 2025 04:09:16 +1100 Subject: [PATCH 3/4] added alternate metadata saving modes and config options --- gradio_server.py | 32 +++++++++++++++++++++++++++----- requirements.txt | 3 ++- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/gradio_server.py b/gradio_server.py index 13c1c7a..94d8fcb 100644 --- a/gradio_server.py +++ b/gradio_server.py @@ -292,6 +292,7 @@ if not Path(server_config_filename).is_file(): "text_encoder_filename" : text_encoder_choices[1], "save_path": os.path.join(os.getcwd(), "gradio_outputs"), "compile" : "", + "metadata_type": "metadata", "default_ui": "t2v", "boost" : 1, "vae_config": 0, @@ -325,6 +326,8 @@ if len(args.vae_config) > 0: vae_config = int(args.vae_config) default_ui = server_config.get("default_ui", "t2v") +metadata = server_config.get("metadata_type", "metadata") +save_path = server_config.get("save_path", os.path.join(os.getcwd(), "gradio_outputs")) use_image2video = default_ui != "t2v" if args.t2v: use_image2video = False @@ -670,6 +673,7 @@ def apply_changes( state, compile_choice, profile_choice, vae_config_choice, + metadata_choice, default_ui_choice ="t2v", boost_choice = 1 ): @@ -687,6 +691,7 @@ def apply_changes( state, "compile" : compile_choice, "profile" : profile_choice, "vae_config" : vae_config_choice, + "metadata_choice": metadata_choice, "default_ui" : default_ui_choice, "boost" : boost_choice, } @@ -910,6 +915,7 @@ def generate_video( slg_start, slg_end, state, + metadata_choice, progress=gr.Progress() #track_tqdm= True ): @@ -1113,7 +1119,6 @@ def generate_video( file_list = [] state["file_list"] = file_list global save_path - save_path = server_config.get("save_path", os.path.join(os.getcwd(), "gradio_outputs")) os.makedirs(save_path, exist_ok=True) video_no = 0 total_video = repeat_generation * len(prompts) @@ -1272,9 +1277,14 @@ def generate_video( 'num_inference_steps': num_inference_steps, } - # Save the configs as json format - with open(video_path.replace('.mp4', '.json'), 'w') as f: - json.dump(configs, f, indent=4) + if metadata_choice == "json": + with open(video_path.replace('.mp4', '.json'), 'w') as f: + json.dump(configs, f, indent=4) + elif metadata_choice == "metadata": + from mutagen.mp4 import MP4 + file = MP4(video_path) + file.tags['©cmt'] = [json.dumps(configs)] + file.save() print(f"New video saved to Path: "+video_path) file_list.append(video_path) @@ -1702,7 +1712,7 @@ def create_demo(): ) save_path_choice = gr.Textbox( label="Output Folder for Generated Videos", - value=server_config.get("save_path", os.path.join(os.getcwd(), "gradio_outputs")) + value=server_config.get("save_path", save_path) ) def check(mode): if not mode in attention_modes_supported: @@ -1777,6 +1787,16 @@ def create_demo(): # visible= True ############ ) + metadata_choice = gr.Dropdown( + choices=[ + ("Export JSON files", "json"), + ("Add metadata to video", "metadata"), + ("Neither", "none") + ], + value=metadata, + label="Metadata Handling" + ) + msg = gr.Markdown() apply_btn = gr.Button("Apply Changes") @@ -2044,6 +2064,7 @@ def create_demo(): slg_start_perc, slg_end_perc, state, + metadata_choice, ], outputs= [gen_status] #,state @@ -2065,6 +2086,7 @@ def create_demo(): compile_choice, profile_choice, vae_config_choice, + metadata_choice, default_ui_choice, boost_choice, ], diff --git a/requirements.txt b/requirements.txt index de6be58..a9c9baf 100644 --- a/requirements.txt +++ b/requirements.txt @@ -17,4 +17,5 @@ numpy>=1.23.5,<2 einops moviepy==1.0.3 mmgp==3.2.8 -peft==0.14.0 \ No newline at end of file +peft==0.14.0 +mutagen \ No newline at end of file From ac18ec6b4f930997f924c4cd5c71fab88857d231 Mon Sep 17 00:00:00 2001 From: Chris Malone Date: Thu, 20 Mar 2025 08:46:30 +1100 Subject: [PATCH 4/4] added output path to allowed_paths to prevent gradio errors on external paths --- gradio_server.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradio_server.py b/gradio_server.py index 94d8fcb..a8f179f 100644 --- a/gradio_server.py +++ b/gradio_server.py @@ -2122,6 +2122,6 @@ if __name__ == "__main__": url = "http://" + server_name webbrowser.open(url + ":" + str(server_port), new = 0, autoraise = True) - demo.launch(server_name=server_name, server_port=server_port, share=args.share) + demo.launch(server_name=server_name, server_port=server_port, share=args.share, allowed_paths=[save_path])