|
|
|
|
|
from __future__ import annotations |
|
|
|
import os |
|
|
|
import gradio as gr |
|
|
|
from constants import MODEL_LIBRARY_ORG_NAME, UploadTarget |
|
from uploader import upload |
|
from utils import find_exp_dirs |
|
|
|
|
|
def load_local_model_list() -> dict: |
|
choices = find_exp_dirs() |
|
return gr.update(choices=choices, value=choices[0] if choices else None) |
|
|
|
|
|
def create_upload_demo(disable_run_button: bool = False) -> gr.Blocks: |
|
model_dirs = find_exp_dirs() |
|
|
|
with gr.Blocks() as demo: |
|
with gr.Box(): |
|
gr.Markdown("Local Models") |
|
reload_button = gr.Button("Reload Model List") |
|
model_dir = gr.Dropdown( |
|
label="Model names", choices=model_dirs, value=model_dirs[0] if model_dirs else None |
|
) |
|
with gr.Box(): |
|
gr.Markdown("Upload Settings") |
|
with gr.Row(): |
|
use_private_repo = gr.Checkbox(label="Private", value=True) |
|
delete_existing_repo = gr.Checkbox(label="Delete existing repo of the same name", value=False) |
|
upload_to = gr.Radio( |
|
label="Upload to", choices=[_.value for _ in UploadTarget], value=UploadTarget.MODEL_LIBRARY.value |
|
) |
|
model_name = gr.Textbox(label="Model Name") |
|
hf_token = gr.Text( |
|
label="Hugging Face Write Token", type="password", visible=os.getenv("HF_TOKEN") is None |
|
) |
|
upload_button = gr.Button("Upload", interactive=not disable_run_button) |
|
gr.Markdown( |
|
f""" |
|
- You can upload your trained model to your personal profile (i.e. `https://huggingface.co/{{your_username}}/{{model_name}}`) or to the public [Tune-A-Video Library](https://huggingface.co/{MODEL_LIBRARY_ORG_NAME}) (i.e. `https://huggingface.co/{MODEL_LIBRARY_ORG_NAME}/{{model_name}}`). |
|
""" |
|
) |
|
with gr.Box(): |
|
gr.Markdown("Output message") |
|
output_message = gr.Markdown() |
|
|
|
reload_button.click(fn=load_local_model_list, inputs=None, outputs=model_dir) |
|
upload_button.click( |
|
fn=upload, |
|
inputs=[ |
|
model_dir, |
|
model_name, |
|
upload_to, |
|
use_private_repo, |
|
delete_existing_repo, |
|
hf_token, |
|
], |
|
outputs=output_message, |
|
) |
|
return demo |
|
|
|
|
|
if __name__ == "__main__": |
|
demo = create_upload_demo() |
|
demo.queue(api_open=False, max_size=1).launch() |
|
|