Spaces:
Runtime error
Runtime error
xunsong.li
commited on
Commit
Β·
172285b
1
Parent(s):
ae534d1
update readme
Browse filesfix download
partial download
fix
fix
fix
fix
fix
fix
fix
update
update
Update app.py
Update app.py
Update app.py
- README.md +11 -0
- app.py +23 -8
- src/utils/download_models.py +40 -0
README.md
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
# π€ Introduction
|
| 2 |
|
| 3 |
This repository reproduces [AnimateAnyone](https://github.com/HumanAIGC/AnimateAnyone). To align the results demonstrated by the original paper, we adopt various approaches and tricks, which may differ somewhat from the paper and another [implementation](https://github.com/guoqincode/Open-AnimateAnyone).
|
|
|
|
| 1 |
+
---
|
| 2 |
+
title: Moore AnimateAnyone
|
| 3 |
+
emoji: π
|
| 4 |
+
colorFrom: indigo
|
| 5 |
+
colorTo: red
|
| 6 |
+
sdk: gradio
|
| 7 |
+
sdk_version: 4.14.0
|
| 8 |
+
app_file: app.py
|
| 9 |
+
pinned: false
|
| 10 |
+
license: apache-2.0
|
| 11 |
+
---
|
| 12 |
# π€ Introduction
|
| 13 |
|
| 14 |
This repository reproduces [AnimateAnyone](https://github.com/HumanAIGC/AnimateAnyone). To align the results demonstrated by the original paper, we adopt various approaches and tricks, which may differ somewhat from the paper and another [implementation](https://github.com/guoqincode/Open-AnimateAnyone).
|
app.py
CHANGED
|
@@ -7,7 +7,7 @@ import numpy as np
|
|
| 7 |
import torch
|
| 8 |
from diffusers import AutoencoderKL, DDIMScheduler
|
| 9 |
from einops import repeat
|
| 10 |
-
from huggingface_hub import snapshot_download
|
| 11 |
from omegaconf import OmegaConf
|
| 12 |
from PIL import Image
|
| 13 |
from torchvision import transforms
|
|
@@ -17,16 +17,26 @@ from src.models.pose_guider import PoseGuider
|
|
| 17 |
from src.models.unet_2d_condition import UNet2DConditionModel
|
| 18 |
from src.models.unet_3d import UNet3DConditionModel
|
| 19 |
from src.pipelines.pipeline_pose2vid_long import Pose2VideoPipeline
|
|
|
|
| 20 |
from src.utils.util import get_fps, read_frames, save_videos_grid
|
| 21 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 22 |
snapshot_download(
|
| 23 |
-
repo_id="
|
| 24 |
-
local_dir="./pretrained_weights/stable-diffusion-v1-5",
|
| 25 |
)
|
| 26 |
snapshot_download(
|
| 27 |
-
repo_id="
|
|
|
|
| 28 |
)
|
| 29 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 30 |
|
| 31 |
|
| 32 |
class AnimateController:
|
|
@@ -226,9 +236,13 @@ def ui():
|
|
| 226 |
return Image.fromarray(image)
|
| 227 |
|
| 228 |
# when user uploads a new video
|
| 229 |
-
motion_sequence.upload(
|
|
|
|
|
|
|
| 230 |
# when `first_frame` is updated
|
| 231 |
-
reference_image.upload(
|
|
|
|
|
|
|
| 232 |
# when the `submit` button is clicked
|
| 233 |
submit.click(
|
| 234 |
controller.animate,
|
|
@@ -270,4 +284,5 @@ def ui():
|
|
| 270 |
|
| 271 |
|
| 272 |
demo = ui()
|
| 273 |
-
demo.
|
|
|
|
|
|
| 7 |
import torch
|
| 8 |
from diffusers import AutoencoderKL, DDIMScheduler
|
| 9 |
from einops import repeat
|
| 10 |
+
from huggingface_hub import hf_hub_download, snapshot_download
|
| 11 |
from omegaconf import OmegaConf
|
| 12 |
from PIL import Image
|
| 13 |
from torchvision import transforms
|
|
|
|
| 17 |
from src.models.unet_2d_condition import UNet2DConditionModel
|
| 18 |
from src.models.unet_3d import UNet3DConditionModel
|
| 19 |
from src.pipelines.pipeline_pose2vid_long import Pose2VideoPipeline
|
| 20 |
+
from src.utils.download_models import prepare_base_model, prepare_image_encoder
|
| 21 |
from src.utils.util import get_fps, read_frames, save_videos_grid
|
| 22 |
|
| 23 |
+
# Partial download
|
| 24 |
+
prepare_base_model()
|
| 25 |
+
prepare_image_encoder()
|
| 26 |
+
|
| 27 |
snapshot_download(
|
| 28 |
+
repo_id="stabilityai/sd-vae-ft-mse", local_dir="./pretrained_weights/sd-vae-ft-mse"
|
|
|
|
| 29 |
)
|
| 30 |
snapshot_download(
|
| 31 |
+
repo_id="patrolli/AnimateAnyone",
|
| 32 |
+
local_dir="./pretrained_weights",
|
| 33 |
)
|
| 34 |
+
is_spaces = True if "SPACE_ID" in os.environ else False
|
| 35 |
+
true_for_shared_ui = False # This will be true only if you are in a shared UI
|
| 36 |
+
if is_spaces:
|
| 37 |
+
true_for_shared_ui = (
|
| 38 |
+
True if "xunsong/Moore-AnimateAnyone" in os.environ["SPACE_ID"] else False
|
| 39 |
+
)
|
| 40 |
|
| 41 |
|
| 42 |
class AnimateController:
|
|
|
|
| 236 |
return Image.fromarray(image)
|
| 237 |
|
| 238 |
# when user uploads a new video
|
| 239 |
+
motion_sequence.upload(
|
| 240 |
+
read_video, motion_sequence, motion_sequence, queue=False
|
| 241 |
+
)
|
| 242 |
# when `first_frame` is updated
|
| 243 |
+
reference_image.upload(
|
| 244 |
+
read_image, reference_image, reference_image, queue=False
|
| 245 |
+
)
|
| 246 |
# when the `submit` button is clicked
|
| 247 |
submit.click(
|
| 248 |
controller.animate,
|
|
|
|
| 284 |
|
| 285 |
|
| 286 |
demo = ui()
|
| 287 |
+
demo.queue(max_size=10)
|
| 288 |
+
demo.launch(share=True, show_api=False)
|
src/utils/download_models.py
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import os
|
| 2 |
+
from pathlib import Path, PurePosixPath
|
| 3 |
+
|
| 4 |
+
from huggingface_hub import hf_hub_download
|
| 5 |
+
|
| 6 |
+
|
| 7 |
+
def prepare_base_model():
|
| 8 |
+
local_dir = "./pretrained_weights/stable-diffusion-v1-5"
|
| 9 |
+
os.makedirs(local_dir, exist_ok=True)
|
| 10 |
+
for hub_file in ["unet/config.json", "unet/diffusion_pytorch_model.bin"]:
|
| 11 |
+
path = Path(hub_file)
|
| 12 |
+
saved_path = local_dir / path
|
| 13 |
+
if os.path.exists(saved_path):
|
| 14 |
+
continue
|
| 15 |
+
hf_hub_download(
|
| 16 |
+
repo_id="runwayml/stable-diffusion-v1-5",
|
| 17 |
+
subfolder=PurePosixPath(path.parent),
|
| 18 |
+
filename=PurePosixPath(path.name),
|
| 19 |
+
local_dir=local_dir,
|
| 20 |
+
)
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
def prepare_image_encoder():
|
| 24 |
+
local_dir = "./pretrained_weights"
|
| 25 |
+
os.makedirs(local_dir, exist_ok=True)
|
| 26 |
+
for hub_file in ["image_encoder/config.json", "image_encoder/pytorch_model.bin"]:
|
| 27 |
+
path = Path(hub_file)
|
| 28 |
+
saved_path = local_dir / path
|
| 29 |
+
if os.path.exists(saved_path):
|
| 30 |
+
continue
|
| 31 |
+
hf_hub_download(
|
| 32 |
+
repo_id="lambdalabs/sd-image-variations-diffusers",
|
| 33 |
+
subfolder=PurePosixPath(path.parent),
|
| 34 |
+
filename=PurePosixPath(path.name),
|
| 35 |
+
local_dir=local_dir,
|
| 36 |
+
)
|
| 37 |
+
|
| 38 |
+
|
| 39 |
+
def prepare_dwpose():
|
| 40 |
+
...
|