diff --git a/app.py b/app.py
index 1dd62db7..2f87a0cb 100644
--- a/app.py
+++ b/app.py
@@ -228,18 +228,7 @@ def animate(
controller = AnimateController()
-
-def ui():
- with gr.Blocks(css=css) as demo:
- gr.Markdown(
- """
- # AnimateDiff: Animate Your Personalized Text-to-Image Diffusion Models without Specific Tuning
- Yuwei Guo, Ceyuan Yang*, Anyi Rao, Yaohui Wang, Yu Qiao, Dahua Lin, Bo Dai (*Corresponding Author)
- [Arxiv Report](https://arxiv.org/abs/2307.04725) | [Project Page](https://animatediff.github.io/) | [Github](https://github.com/guoyww/animatediff/)
- """
- )
- gr.Markdown(
- """
+quick_start_en = """
### Quick Start
1. Select desired `Base DreamBooth Model`.
2. Select `Motion Module` from `mm_sd_v14.ckpt` and `mm_sd_v15.ckpt`. We recommend trying both of them for the best results.
@@ -251,7 +240,71 @@ def ui():
- [`realisticVisionV20_v20.safetensors`](https://civitai.com/models/4201?modelVersionId=29460)
4. Click `Generate`, wait for ~1 min, and enjoy.
"""
- )
+
+quick_start_cn = """
+ ### 快速开始
+ 1. 选择所需的`基础DreamBooth模型`。
+ 2. 从mm_sd_v14.ckpt和mm_sd_v15.ckpt中选择Motion模块。我们建议尝试两者取得最佳效果。
+ 3. 为每个模型提供`提示`和`负提示`。鼓励您参考CivitAI上的每个模型的网页,以了解如何为它们编写提示。以下是此演示中的DreamBooth模型,点击访问他们的主页:
+ - [`toonyou_beta3.safetensors`](https://civitai.com/models/30240?modelVersionId=78775)
+ - [`lyriel_v16.safetensors`](https://civitai.com/models/22922/lyriel)
+ - [`rcnzCartoon3d_v10.safetensors`](https://civitai.com/models/66347?modelVersionId=71009)
+ - [`majicmixRealistic_v5Preview.safetensors`](https://civitai.com/models/43331?modelVersionId=79068)
+ - [`realisticVisionV20_v20.safetensors`](https://civitai.com/models/4201?modelVersionId=29460)
+ 4. 点击`生成`按钮,等待约1分钟,然后享受生成的结果。
+ """
+
+def change_language(lang):
+ if lang == '中文':
+ lang = gr.Button(value='English')
+ quick_start_controller = gr.Markdown(value=quick_start_cn)
+ base_model_dropdown = gr.Dropdown(label="基础DreamBooth模型")
+ motion_module_dropdown = gr.Dropdown(label="Motion模块")
+ prompt_textbox = gr.Textbox(label="提示")
+ negative_prompt_textbox = gr.Textbox(label="负提示")
+ width_slider = gr.Slider(label="宽度")
+ height_slider = gr.Slider(label="高度")
+ seed_textbox = gr.Textbox(label="种子")
+ generate_button = gr.Button(value="生成")
+ result_video = gr.Video(label="已生成的动画")
+ json_config = gr.JSON(label="配置")
+ advance_settings = gr.Accordion(label="高级设置")
+ elif lang == 'English':
+ lang = gr.Button(value='中文')
+ quick_start_controller = gr.Markdown(value=quick_start_en)
+ base_model_dropdown = gr.Dropdown(label="Base DreamBooth Model")
+ motion_module_dropdown = gr.Dropdown(label="Motion Module")
+ prompt_textbox = gr.Textbox(label="Prompt")
+ negative_prompt_textbox = gr.Textbox(label="Negative Prompt")
+ width_slider = gr.Slider(label="Width")
+ height_slider = gr.Slider(label="Height")
+ seed_textbox = gr.Textbox(label="Seed")
+ generate_button = gr.Button(value="Generate")
+ result_video = gr.Video(label="Generated Animation")
+ json_config = gr.JSON(label="Config")
+ advance_settings = gr.Accordion(label="Advance")
+
+ return [lang, quick_start_controller, base_model_dropdown,
+ motion_module_dropdown, prompt_textbox, negative_prompt_textbox, width_slider, height_slider,
+ seed_textbox, generate_button, result_video, json_config, advance_settings]
+
+
+def ui():
+ with gr.Blocks(css=css) as demo:
+ with gr.Row():
+ with gr.Column(scale=20):
+ gr.Markdown(
+ """
+ # AnimateDiff: Animate Your Personalized Text-to-Image Diffusion Models without Specific Tuning
+ Yuwei Guo, Ceyuan Yang*, Anyi Rao, Yaohui Wang, Yu Qiao, Dahua Lin, Bo Dai (*Corresponding Author)
+ [Arxiv Report](https://arxiv.org/abs/2307.04725) | [Project Page](https://animatediff.github.io/) | [Github](https://github.com/guoyww/animatediff/)
+ """
+ )
+ with gr.Column(scale=1, min_width=100):
+ lang_btn = gr.Button(value="中文")
+
+ quick_start_controller = gr.Markdown(quick_start_en)
+
with gr.Row():
with gr.Column():
base_model_dropdown = gr.Dropdown( label="Base DreamBooth Model", choices=controller.base_model_list, value=controller.base_model_list[0], interactive=True )
@@ -263,7 +316,7 @@ def ui():
prompt_textbox = gr.Textbox( label="Prompt", lines=3 )
negative_prompt_textbox = gr.Textbox( label="Negative Prompt", lines=3, value="worst quality, low quality, nsfw, logo")
- with gr.Accordion("Advance", open=False):
+ with gr.Accordion("Advance", open=False) as advance_settings:
with gr.Row():
width_slider = gr.Slider( label="Width", value=512, minimum=256, maximum=1024, step=64 )
height_slider = gr.Slider( label="Height", value=512, minimum=256, maximum=1024, step=64 )
@@ -284,11 +337,18 @@ def ui():
generate_button.click( fn=controller.animate, inputs=inputs, outputs=outputs )
gr.Examples( fn=controller.animate, examples=examples, inputs=inputs, outputs=outputs, cache_examples=True )
+ lang_btn.click(change_language, inputs=lang_btn, outputs=[lang_btn, quick_start_controller, base_model_dropdown, motion_module_dropdown,
+ prompt_textbox, negative_prompt_textbox, width_slider, height_slider,
+ seed_textbox, generate_button, result_video, json_config, advance_settings])
return demo
if __name__ == "__main__":
demo = ui()
- demo.queue(max_size=20)
- demo.launch()
+ queue_max_size = int(os.environ.get("queue_max_size", 16))
+ queue_concurrency_count = int(os.environ.get("queue_concurrency_count", 2))
+ max_threads = int(os.environ.get("max_threads", 20))
+ api_open = bool(os.environ.get("api_open", False))
+ demo.queue(max_size=queue_max_size, concurrency_count=queue_concurrency_count, api_open=api_open)
+ demo.launch(max_threads=max_threads)
diff --git a/requirements.txt b/requirements.txt
index eae99794..6575d885 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -9,7 +9,7 @@ gdown
einops
omegaconf
safetensors
-gradio
+gradio==3.45.1
imageio[ffmpeg]
imageio[pyav]
accelerate
\ No newline at end of file