mayuema commited on
Commit
d2dd1cd
1 Parent(s): c27592b

first release

Browse files
.gitignore ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ trash/*
2
+ tmp
3
+ gradio_cached_examples
.gitmodules ADDED
File without changes
.pre-commit-config.yaml ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ exclude: patch
2
+ repos:
3
+ - repo: https://github.com/pre-commit/pre-commit-hooks
4
+ rev: v4.2.0
5
+ hooks:
6
+ - id: check-executables-have-shebangs
7
+ - id: check-json
8
+ - id: check-merge-conflict
9
+ - id: check-shebang-scripts-are-executable
10
+ - id: check-toml
11
+ - id: check-yaml
12
+ - id: double-quote-string-fixer
13
+ - id: end-of-file-fixer
14
+ - id: mixed-line-ending
15
+ args: ['--fix=lf']
16
+ - id: requirements-txt-fixer
17
+ - id: trailing-whitespace
18
+ - repo: https://github.com/myint/docformatter
19
+ rev: v1.4
20
+ hooks:
21
+ - id: docformatter
22
+ args: ['--in-place']
23
+ - repo: https://github.com/pycqa/isort
24
+ rev: 5.12.0
25
+ hooks:
26
+ - id: isort
27
+ - repo: https://github.com/pre-commit/mirrors-mypy
28
+ rev: v0.991
29
+ hooks:
30
+ - id: mypy
31
+ args: ['--ignore-missing-imports']
32
+ additional_dependencies: ['types-python-slugify']
33
+ - repo: https://github.com/google/yapf
34
+ rev: v0.32.0
35
+ hooks:
36
+ - id: yapf
37
+ args: ['--parallel', '--in-place']
.style.yapf ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ [style]
2
+ based_on_style = pep8
3
+ blank_line_before_nested_class_or_def = false
4
+ spaces_before_comment = 2
5
+ split_before_logical_operator = true
Dockerfile ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM nvidia/cuda:11.7.1-cudnn8-devel-ubuntu22.04
2
+ ENV DEBIAN_FRONTEND=noninteractive
3
+ RUN apt-get update && \
4
+ apt-get upgrade -y && \
5
+ apt-get install -y --no-install-recommends \
6
+ git \
7
+ zip \
8
+ unzip \
9
+ git-lfs \
10
+ wget \
11
+ curl \
12
+ # ffmpeg \
13
+ ffmpeg \
14
+ x264 \
15
+ # python build dependencies \
16
+ build-essential \
17
+ libssl-dev \
18
+ zlib1g-dev \
19
+ libbz2-dev \
20
+ libreadline-dev \
21
+ libsqlite3-dev \
22
+ libncursesw5-dev \
23
+ xz-utils \
24
+ tk-dev \
25
+ libxml2-dev \
26
+ libxmlsec1-dev \
27
+ libffi-dev \
28
+ liblzma-dev && \
29
+ apt-get clean && \
30
+ rm -rf /var/lib/apt/lists/*
31
+ # RUN apt-get update && \
32
+ # apt-get install zip
33
+ # RUN wget https://github.com/ChenyangQiQi/FateZero/releases/download/v0.0.1/style.zip && unzip style.zip
34
+ RUN useradd -m -u 1000 user
35
+ USER user
36
+ ENV HOME=/home/user \
37
+ PATH=/home/user/.local/bin:${PATH}
38
+ WORKDIR ${HOME}/app
39
+
40
+ RUN curl https://pyenv.run | bash
41
+ ENV PATH=${HOME}/.pyenv/shims:${HOME}/.pyenv/bin:${PATH}
42
+ ENV PYTHON_VERSION=3.10.9
43
+ RUN pyenv install ${PYTHON_VERSION} && \
44
+ pyenv global ${PYTHON_VERSION} && \
45
+ pyenv rehash && \
46
+ pip install --no-cache-dir -U pip setuptools wheel
47
+
48
+ RUN pip install --no-cache-dir -U torch==1.13.1 torchvision==0.14.1
49
+ COPY --chown=1000 requirements.txt /tmp/requirements.txt
50
+ RUN pip install --no-cache-dir -U -r /tmp/requirements.txt
51
+
52
+ COPY --chown=1000 . ${HOME}/app
53
+ RUN ls -a
54
+ RUN cd ./FateZero/ckpt && bash download.sh
55
+ RUN cd ./FateZero/data && bash download.sh
56
+ ENV PYTHONPATH=${HOME}/app \
57
+ PYTHONUNBUFFERED=1 \
58
+ GRADIO_ALLOW_FLAGGING=never \
59
+ GRADIO_NUM_PORTS=1 \
60
+ GRADIO_SERVER_NAME=0.0.0.0 \
61
+ GRADIO_THEME=huggingface \
62
+ SYSTEM=spaces
63
+ CMD ["python", "app_fatezero.py"]
FollowYourPose ADDED
@@ -0,0 +1 @@
 
 
1
+ Subproject commit 40a333f7f1e3940903916c419b725a4a17f348a1
LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) 2022 hysts
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
app_followyourpose.py ADDED
@@ -0,0 +1,211 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python
2
+
3
+ from __future__ import annotations
4
+
5
+ import os
6
+
7
+ import gradio as gr
8
+
9
+ from inference_followyourpose import merge_config_then_run
10
+
11
+
12
+ # TITLE = '# [FateZero](http://fate-zero-edit.github.io/)'
13
+ HF_TOKEN = os.getenv('HF_TOKEN')
14
+ # pipe = InferencePipeline(HF_TOKEN)
15
+ pipe = merge_config_then_run()
16
+ # app = InferenceUtil(HF_TOKEN)
17
+
18
+ with gr.Blocks(css='style.css') as demo:
19
+ # gr.Markdown(TITLE)
20
+
21
+ gr.HTML(
22
+ """
23
+ <div style="text-align: center; max-width: 1200px; margin: 20px auto;">
24
+ <h1 style="font-weight: 900; font-size: 2rem; margin: 0rem">
25
+ 🕺🕺🕺 Follow Your Pose 💃💃💃 </font></center> <br> <center>Pose-Guided Text-to-Video Generation using Pose-Free Videos
26
+ </h1>
27
+ <h2 style="font-weight: 450; font-size: 1rem; margin: 0rem">
28
+ <a href="https://mayuelala.github.io/">Yue Ma*</a>
29
+ <a href="https://github.com/YingqingHe">Yingqing He*</a> , <a href="http://vinthony.github.io/">Xiaodong Cun</a>,
30
+ <a href="https://xinntao.github.io/"> Xintao Wang </a>,
31
+ <a href="https://scholar.google.com/citations?user=4oXBp9UAAAAJ&hl=zh-CN">Ying Shan</a>,
32
+ <a href="https://scholar.google.com/citations?user=Xrh1OIUAAAAJ&hl=zh-CN">Xiu Li</a>,
33
+ <a href="http://cqf.io">Qifeng Chen</a>
34
+ </h2>
35
+
36
+ <h2 style="font-weight: 450; font-size: 1rem; margin: 0rem">
37
+ <span class="link-block">
38
+ [<a href="https://arxiv.org/abs/2304.01186" target="_blank"
39
+ class="external-link ">
40
+ <span class="icon">
41
+ <i class="ai ai-arxiv"></i>
42
+ </span>
43
+ <span>arXiv</span>
44
+ </a>]
45
+ </span>
46
+
47
+ <!-- Github link -->
48
+ <span class="link-block">
49
+ [<a href="https://github.com/mayuelala/FollowYourPose" target="_blank"
50
+ class="external-link ">
51
+ <span class="icon">
52
+ <i class="fab fa-github"></i>
53
+ </span>
54
+ <span>Code</span>
55
+ </a>]
56
+ </span>
57
+
58
+ <!-- Github link -->
59
+ <span class="link-block">
60
+ [<a href="https://follow-your-pose.github.io/" target="_blank"
61
+ class="external-link ">
62
+ <span class="icon">
63
+ <i class="fab fa-github"></i>
64
+ </span>
65
+ <span>Homepage</span>
66
+ </a>]
67
+ </span>
68
+ </h2>
69
+ <h2 style="font-weight: 450; font-size: 1rem; margin-top: 0.5rem; margin-bottom: 0.5rem">
70
+ TL;DR: We tune 2D stable-diffusion to generate the character videos from pose and text description.
71
+ </h2>
72
+ </div>
73
+ """)
74
+
75
+
76
+ gr.HTML("""
77
+ <p>Alternatively, try our GitHub <a href=https://github.com/mayuelala/FollowYourPose> code </a> on your GPU.
78
+ </p>""")
79
+
80
+ with gr.Row():
81
+ with gr.Column():
82
+ with gr.Accordion('Input Video', open=True):
83
+ # user_input_video = gr.File(label='Input Source Video')
84
+ user_input_video = gr.Video(label='Input Source Video', source='upload', type='numpy', format="mp4", visible=True).style(height="auto")
85
+ with gr.Accordion('Temporal Crop offset and Sampling Stride', open=False):
86
+ n_sample_frame = gr.Slider(label='Number of Frames',
87
+ minimum=0,
88
+ maximum=32,
89
+ step=1,
90
+ value=8)
91
+ stride = gr.Slider(label='Temporal stride',
92
+ minimum=0,
93
+ maximum=20,
94
+ step=1,
95
+ value=1)
96
+ start_sample_frame = gr.Number(label='Start frame in the video',
97
+ value=0,
98
+ precision=0)
99
+
100
+ with gr.Accordion('Spatial Crop offset', open=False):
101
+ left_crop = gr.Number(label='Left crop',
102
+ value=0,
103
+ precision=0)
104
+ right_crop = gr.Number(label='Right crop',
105
+ value=0,
106
+ precision=0)
107
+ top_crop = gr.Number(label='Top crop',
108
+ value=0,
109
+ precision=0)
110
+ bottom_crop = gr.Number(label='Bottom crop',
111
+ value=0,
112
+ precision=0)
113
+ offset_list = [
114
+ left_crop,
115
+ right_crop,
116
+ top_crop,
117
+ bottom_crop,
118
+ ]
119
+
120
+ ImageSequenceDataset_list = [
121
+ start_sample_frame,
122
+ n_sample_frame,
123
+ stride
124
+ ] + offset_list
125
+
126
+ # model_id = gr.Dropdown(
127
+ # label='Model ID',
128
+ # choices=[
129
+ # 'CompVis/stable-diffusion-v1-4',
130
+ # # add shape editing ckpt here
131
+ # ],
132
+ # value='CompVis/stable-diffusion-v1-4')
133
+
134
+
135
+ with gr.Accordion('Text Prompt', open=True):
136
+
137
+ # source_prompt = gr.Textbox(label='Source Prompt',
138
+ # info='A good prompt describes each frame and most objects in video. Especially, it has the object or attribute that we want to edit or preserve.',
139
+ # max_lines=1,
140
+ # placeholder='Example: "a silver jeep driving down a curvy road in the countryside"',
141
+ # value='a silver jeep driving down a curvy road in the countryside')
142
+ target_prompt = gr.Textbox(label='Target Prompt',
143
+ info='A reasonable composition of video may achieve better results(e.g., "sunflower" video with "Van Gogh" prompt is better than "sunflower" with "Monet")',
144
+ max_lines=1,
145
+ placeholder='Example: "watercolor painting of a silver jeep driving down a curvy road in the countryside"',
146
+ value='watercolor painting of a silver jeep driving down a curvy road in the countryside')
147
+
148
+
149
+
150
+
151
+
152
+ run_button = gr.Button('Generate')
153
+
154
+ with gr.Column():
155
+ result = gr.Video(label='Result')
156
+ # result.style(height=512, width=512)
157
+ # with gr.Accordion('FateZero Parameters for attention fusing', open=True):
158
+ # cross_replace_steps = gr.Slider(label='Cross-att replace steps',
159
+ # info='More steps, replace more cross attention to preserve semantic layout.',
160
+ # minimum=0.0,
161
+ # maximum=1.0,
162
+ # step=0.1,
163
+ # value=0.7)
164
+
165
+ # self_replace_steps = gr.Slider(label='Self-att replace steps',
166
+ # info='More steps, replace more spatial-temporal self-attention to preserve geometry and motion.',
167
+ # minimum=0.0,
168
+ # maximum=1.0,
169
+ # step=0.1,
170
+ # value=0.7)
171
+
172
+ # enhance_words = gr.Textbox(label='Enhanced words',
173
+ # info='Amplify the target-words cross attention',
174
+ # max_lines=1,
175
+ # placeholder='Example: "watercolor "',
176
+ # value='watercolor')
177
+
178
+ # enhance_words_value = gr.Slider(label='Target cross-att amplification',
179
+ # info='larger value, more elements of target words',
180
+ # minimum=0.0,
181
+ # maximum=20.0,
182
+ # step=1,
183
+ # value=10)
184
+ with gr.Accordion('DDIM Parameters', open=True):
185
+ num_steps = gr.Slider(label='Number of Steps',
186
+ info='larger value has better editing capacity, but takes more time and memory.',
187
+ minimum=0,
188
+ maximum=50,
189
+ step=1,
190
+ value=50)
191
+ guidance_scale = gr.Slider(label='CFG Scale',
192
+ minimum=0,
193
+ maximum=50,
194
+ step=0.1,
195
+ value=12.5)
196
+ with gr.Row():
197
+ from example import style_example
198
+ examples = style_example
199
+
200
+
201
+ inputs = [
202
+ user_input_video,
203
+ target_prompt,
204
+ num_steps,
205
+ guidance_scale,
206
+ *ImageSequenceDataset_list
207
+ ]
208
+ target_prompt.submit(fn=pipe.run, inputs=inputs, outputs=result)
209
+ run_button.click(fn=pipe.run, inputs=inputs, outputs=result)
210
+
211
+ demo.queue().launch(share=False, server_name='0.0.0.0', server_port=80)
docs/OpenSans-Regular.ttf ADDED
Binary file (148 kB). View file
 
example.py ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ num_steps = 30
2
+ style_example = [
3
+ [
4
+ 'CompVis/stable-diffusion-v1-4',
5
+ 'FateZero/data/teaser_car-turn.mp4',
6
+ 'a silver jeep driving down a curvy road in the countryside',
7
+ 'watercolor painting of a silver jeep driving down a curvy road in the countryside',
8
+ 0.8,
9
+ 0.8,
10
+ "watercolor",
11
+ 10,
12
+ num_steps,
13
+ 7.5,
14
+ # input video argument
15
+ None, 0, 8, 1, 0,0,0,0
16
+
17
+ ]
18
+ # [
19
+ # 'CompVis/stable-diffusion-v1-4',
20
+ # 'FateZero/data/style/sunflower.mp4',
21
+ # 'a yellow sunflower',
22
+ # 'van gogh style painting of a yellow sunflower',
23
+ # 0.5,
24
+ # 0.5,
25
+ # 'van gogh',
26
+ # 10,
27
+ # num_steps,
28
+ # 7.5,
29
+ # None, 0, 8, 1, 0,0,0,0
30
+ # ],
31
+ # [
32
+ # 'CompVis/stable-diffusion-v1-4',
33
+ # 'FateZero/data/style/surf.mp4',
34
+ # 'a man with round helmet surfing on a white wave in blue ocean with a rope',
35
+ # 'The Ukiyo-e style painting of a man with round helmet surfing on a white wave in blue ocean with a rope',
36
+ # 0.9,
37
+ # 0.9,
38
+ # 'Ukiyo-e',
39
+ # 10,
40
+ # num_steps,
41
+ # 7.5,
42
+ # None, 0, 8, 1, 0,0,0,0
43
+ # ],
44
+ # [
45
+ # 'CompVis/stable-diffusion-v1-4',
46
+ # 'FateZero/data/style/train.mp4',
47
+ # 'a train traveling down tracks next to a forest filled with trees and flowers and a man on the side of the track',
48
+ # 'a train traveling down tracks next to a forest filled with trees and flowers and a man on the side of the track Makoto Shinkai style',
49
+ # 0.9,
50
+ # 0.9,
51
+ # 'Makoto Shinkai',
52
+ # 10,
53
+ # num_steps,
54
+ # 7.5,
55
+ # None, 0, 8, 28, 0,0,0,0
56
+ # ],
57
+
58
+ # [
59
+ # 'CompVis/stable-diffusion-v1-4',
60
+ # 'FateZero/data/attribute/swan_swarov.mp4',
61
+ # 'a black swan with a red beak swimming in a river near a wall and bushes',
62
+ # 'a Swarovski crystal swan with a red beak swimming in a river near a wall and bushes',
63
+ # 0.8,
64
+ # 0.6,
65
+ # 'Swarovski crystal',
66
+ # 10,
67
+ # num_steps,
68
+ # 7.5,
69
+ # None, 0, 8, 1, 0,0,0,0
70
+ # ],
71
+ # [
72
+ # 'CompVis/stable-diffusion-v1-4',
73
+ # 'FateZero/data/attribute/squirrel_carrot.mp4',
74
+ # 'A squirrel is eating a carrot',
75
+ # 'A rabbit is eating a eggplant',
76
+ # 0.5,
77
+ # 0.5,
78
+ # 'rabbit eggplant',
79
+ # 10,
80
+ # num_steps,
81
+ # 7.5,
82
+ # None, 0, 8, 1, 0,0,0,0
83
+ # ],
84
+
85
+ ]
inference_followyourpose.py ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ from FollowYourPose.test_followyourpose import *
3
+
4
+ import copy
5
+ import gradio as gr
6
+ from transformers import AutoTokenizer, CLIPTextModel
7
+
8
+
9
+ def get_time_string() -> str:
10
+ x = datetime.datetime.now()
11
+ return f"{(x.year - 2000):02d}{x.month:02d}{x.day:02d}-{x.hour:02d}{x.minute:02d}{x.second:02d}"
12
+
13
+
14
+ class merge_config_then_run():
15
+ def __init__(self) -> None:
16
+ # Load the tokenizer
17
+ # pretrained_model_path = 'FateZero/ckpt/stable-diffusion-v1-4'
18
+ self.tokenizer = None
19
+ self.text_encoder = None
20
+ self.vae = None
21
+ self.unet = None
22
+
23
+ # cache_ckpt = False
24
+ # if cache_ckpt:
25
+ # self.tokenizer = AutoTokenizer.from_pretrained(
26
+ # pretrained_model_path,
27
+ # # 'FateZero/ckpt/stable-diffusion-v1-4',
28
+ # subfolder="tokenizer",
29
+ # use_fast=False,
30
+ # )
31
+
32
+ # # Load models and create wrapper for stable diffusion
33
+ # self.text_encoder = CLIPTextModel.from_pretrained(
34
+ # pretrained_model_path,
35
+ # subfolder="text_encoder",
36
+ # )
37
+
38
+ # self.vae = AutoencoderKL.from_pretrained(
39
+ # pretrained_model_path,
40
+ # subfolder="vae",
41
+ # )
42
+ # model_config = {
43
+ # "lora": 160,
44
+ # # temporal_downsample_time: 4
45
+ # "SparseCausalAttention_index": ['mid'],
46
+ # "least_sc_channel": 640
47
+ # }
48
+ # self.unet = UNetPseudo3DConditionModel.from_2d_model(
49
+ # os.path.join(pretrained_model_path, "unet"), model_config=model_config
50
+ # )
51
+
52
+ def run(
53
+ self,
54
+ data_path,
55
+ target_prompt,
56
+ num_steps,
57
+ guidance_scale,
58
+ user_input_video=None,
59
+ start_sample_frame=0,
60
+ n_sample_frame=8,
61
+ stride=1,
62
+ left_crop=0,
63
+ right_crop=0,
64
+ top_crop=0,
65
+ bottom_crop=0,
66
+ ):
67
+ default_edit_config='FollowYourPose/configs/pose_sample.yaml'
68
+ Omegadict_default_edit_config = OmegaConf.load(default_edit_config)
69
+
70
+ dataset_time_string = get_time_string()
71
+ config_now = copy.deepcopy(Omegadict_default_edit_config)
72
+ # print(f"config_now['pretrained_model_path'] = model_id {model_id}")
73
+
74
+ offset_dict = {
75
+ "left": left_crop,
76
+ "right": right_crop,
77
+ "top": top_crop,
78
+ "bottom": bottom_crop,
79
+ }
80
+ ImageSequenceDataset_dict = {
81
+ "start_sample_frame" : start_sample_frame,
82
+ "n_sample_frame" : n_sample_frame,
83
+ "sampling_rate" : stride,
84
+ "offset": offset_dict,
85
+ }
86
+ config_now['validation_data'].update(ImageSequenceDataset_dict)
87
+ if user_input_video and data_path is None:
88
+ raise gr.Error('You need to upload a video or choose a provided video')
89
+ if user_input_video is not None:
90
+ if isinstance(user_input_video, str):
91
+ config_now['validation_data']['path'] = user_input_video
92
+ elif hasattr(user_input_video, 'name') and user_input_video.name is not None:
93
+ config_now['validation_data']['path'] = user_input_video.name
94
+ config_now['validation_data']['prompts'] = [target_prompt]
95
+ # ddim config
96
+ config_now['validation_data']['guidance_scale'] = guidance_scale
97
+ config_now['validation_data']['num_inference_steps'] = num_steps
98
+ config_now['skeleton_path'] = data_path
99
+
100
+ save_path = test(**config_now)
101
+ mp4_path = save_path.replace('_0.gif', '_0_0_0.mp4')
102
+ return mp4_path
103
+
packages.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ ffmpeg
requirements.txt ADDED
@@ -0,0 +1,133 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # This file may be used to create an environment using:
2
+ # $ conda create --name <env> --file <this file>
3
+ # platform: linux-64
4
+ _libgcc_mutex=0.1=main
5
+ _openmp_mutex=5.1=1_gnu
6
+ absl-py=1.4.0=pypi_0
7
+ accelerate=0.16.0=pypi_0
8
+ aiofiles=23.1.0=pypi_0
9
+ aiohttp=3.8.4=pypi_0
10
+ aiosignal=1.3.1=pypi_0
11
+ altair=4.2.2=pypi_0
12
+ antlr4-python3-runtime=4.9.3=pypi_0
13
+ anyio=3.6.2=pypi_0
14
+ async-timeout=4.0.2=pypi_0
15
+ attrs=22.2.0=pypi_0
16
+ av=10.0.0=pypi_0
17
+ bitsandbytes=0.35.4=pypi_0
18
+ ca-certificates=2023.01.10=h06a4308_0
19
+ cachetools=5.3.0=pypi_0
20
+ certifi=2022.12.7=py38h06a4308_0
21
+ charset-normalizer=3.0.1=pypi_0
22
+ click=8.1.3=pypi_0
23
+ contourpy=1.0.7=pypi_0
24
+ cycler=0.11.0=pypi_0
25
+ decord=0.6.0=pypi_0
26
+ diffusers=0.11.1=pypi_0
27
+ einops=0.6.0=pypi_0
28
+ entrypoints=0.4=pypi_0
29
+ fastapi=0.95.0=pypi_0
30
+ ffmpy=0.3.0=pypi_0
31
+ filelock=3.9.0=pypi_0
32
+ fonttools=4.39.3=pypi_0
33
+ frozenlist=1.3.3=pypi_0
34
+ fsspec=2023.3.0=pypi_0
35
+ ftfy=6.1.1=pypi_0
36
+ google-auth=2.16.1=pypi_0
37
+ google-auth-oauthlib=0.4.6=pypi_0
38
+ gradio=3.24.1=pypi_0
39
+ gradio-client=0.0.7=pypi_0
40
+ grpcio=1.51.3=pypi_0
41
+ h11=0.14.0=pypi_0
42
+ httpcore=0.16.3=pypi_0
43
+ httpx=0.23.3=pypi_0
44
+ huggingface-hub=0.13.3=pypi_0
45
+ idna=3.4=pypi_0
46
+ imageio=2.25.1=pypi_0
47
+ importlib-metadata=6.0.0=pypi_0
48
+ importlib-resources=5.12.0=pypi_0
49
+ jinja2=3.1.2=pypi_0
50
+ jsonschema=4.17.3=pypi_0
51
+ kiwisolver=1.4.4=pypi_0
52
+ ld_impl_linux-64=2.38=h1181459_1
53
+ libffi=3.4.2=h6a678d5_6
54
+ libgcc-ng=11.2.0=h1234567_1
55
+ libgomp=11.2.0=h1234567_1
56
+ libstdcxx-ng=11.2.0=h1234567_1
57
+ linkify-it-py=2.0.0=pypi_0
58
+ markdown=3.4.1=pypi_0
59
+ markdown-it-py=2.2.0=pypi_0
60
+ markupsafe=2.1.2=pypi_0
61
+ matplotlib=3.7.1=pypi_0
62
+ mdit-py-plugins=0.3.3=pypi_0
63
+ mdurl=0.1.2=pypi_0
64
+ modelcards=0.1.6=pypi_0
65
+ multidict=6.0.4=pypi_0
66
+ mypy-extensions=1.0.0=pypi_0
67
+ ncurses=6.4=h6a678d5_0
68
+ numpy=1.24.2=pypi_0
69
+ nvidia-cublas-cu11=11.10.3.66=pypi_0
70
+ nvidia-cuda-nvrtc-cu11=11.7.99=pypi_0
71
+ nvidia-cuda-runtime-cu11=11.7.99=pypi_0
72
+ nvidia-cudnn-cu11=8.5.0.96=pypi_0
73
+ oauthlib=3.2.2=pypi_0
74
+ omegaconf=2.3.0=pypi_0
75
+ opencv-python=4.7.0.72=pypi_0
76
+ openssl=1.1.1t=h7f8727e_0
77
+ orjson=3.8.9=pypi_0
78
+ packaging=23.0=pypi_0
79
+ pandas=1.5.3=pypi_0
80
+ pillow=9.4.0=pypi_0
81
+ pip=22.3.1=py38h06a4308_0
82
+ pkgutil-resolve-name=1.3.10=pypi_0
83
+ protobuf=4.22.0=pypi_0
84
+ psutil=5.9.4=pypi_0
85
+ pyasn1=0.4.8=pypi_0
86
+ pyasn1-modules=0.2.8=pypi_0
87
+ pydantic=1.10.7=pypi_0
88
+ pydub=0.25.1=pypi_0
89
+ pyparsing=3.0.9=pypi_0
90
+ pyre-extensions=0.0.23=pypi_0
91
+ pyrsistent=0.19.3=pypi_0
92
+ python=3.8.16=h7a1cb2a_2
93
+ python-dateutil=2.8.2=pypi_0
94
+ python-multipart=0.0.6=pypi_0
95
+ pytz=2022.7.1=pypi_0
96
+ pyyaml=6.0=pypi_0
97
+ readline=8.2=h5eee18b_0
98
+ regex=2022.10.31=pypi_0
99
+ requests=2.28.2=pypi_0
100
+ requests-oauthlib=1.3.1=pypi_0
101
+ rfc3986=1.5.0=pypi_0
102
+ rsa=4.9=pypi_0
103
+ semantic-version=2.10.0=pypi_0
104
+ setuptools=65.6.3=py38h06a4308_0
105
+ six=1.16.0=pypi_0
106
+ sniffio=1.3.0=pypi_0
107
+ sqlite=3.40.1=h5082296_0
108
+ starlette=0.26.1=pypi_0
109
+ tensorboard=2.12.0=pypi_0
110
+ tensorboard-data-server=0.7.0=pypi_0
111
+ tensorboard-plugin-wit=1.8.1=pypi_0
112
+ tk=8.6.12=h1ccaba5_0
113
+ tokenizers=0.13.2=pypi_0
114
+ toolz=0.12.0=pypi_0
115
+ torch=1.13.1=pypi_0
116
+ torchvision=0.14.1=pypi_0
117
+ tqdm=4.64.1=pypi_0
118
+ transformers=4.26.1=pypi_0
119
+ triton=1.1.1=pypi_0
120
+ typing-extensions=4.5.0=pypi_0
121
+ typing-inspect=0.8.0=pypi_0
122
+ uc-micro-py=1.0.1=pypi_0
123
+ urllib3=1.26.14=pypi_0
124
+ uvicorn=0.21.1=pypi_0
125
+ wcwidth=0.2.6=pypi_0
126
+ websockets=11.0=pypi_0
127
+ werkzeug=2.2.3=pypi_0
128
+ wheel=0.38.4=py38h06a4308_0
129
+ xformers=0.0.16=pypi_0
130
+ xz=5.2.10=h5eee18b_1
131
+ yarl=1.8.2=pypi_0
132
+ zipp=3.14.0=pypi_0
133
+ zlib=1.2.13=h5eee18b_0
style.css ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ h1 {
2
+ text-align: center;
3
+ }