diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..352e7b31919b08b9bd6b602bc23b2174ff7d300f --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +__pycache__/utils.cpython-310.pyc diff --git a/README.md b/README.md index 7d5334344e3138d8320b425f77f6348f8cb80945..f8258119b1bb5742a16ba0bea701fb143a4d1241 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ sdk_version: 5.38.0 app_file: app.py pinned: false license: apache-2.0 -short_description: Transform your videos with different Anime styles and have f +short_description: Transfer your videos with different AnimeStyles & havefun! --- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference diff --git a/app.py b/app.py new file mode 100644 index 0000000000000000000000000000000000000000..3d8531b309da4e5a3b36018dccf5a1c5492b3e49 --- /dev/null +++ b/app.py @@ -0,0 +1,148 @@ +import gradio as gr +import json +from moviepy.video.io.VideoFileClip import VideoFileClip +import threading +import time +global_lock = threading.Lock() +ip_records = {} + +def get_video_duration(video_path): + clip = VideoFileClip(video_path) + duration = clip.duration + clip.close() + return duration + +from utils import processing + +with open("sorted.json", "r") as f: + style_dicts = json.load(f) + +styles = list(style_dicts.keys()) +style_images = {k: v['thumbnailUrl'] for k, v in style_dicts.items() if v is not None} + +def get_client_info(request: gr.Request): + clientHost = request.client.host + print("IP address:", clientHost) + return clientHost + +def check_ip_limit(client_ip): + current_time = time.time() + if client_ip not in ip_records: + ip_records[client_ip] = [current_time] + return True + else: + times = ip_records[client_ip] + times = [t for t in times if current_time - t < 5 * 60] + if len(times) < 2: + times.append(current_time) + ip_records[client_ip] = times + return True + else: + return False + +def fn(in_video, style, aspect_ratio, transfer_duration, request: gr.Request): + client_host = get_client_info(request) + flag = check_ip_limit(client_host) + if not flag: + raise gr.Error(f"Exceed the request limit of 1 requests per five minute.") + + print(f"Received video: {in_video}, aspect_ratio: {aspect_ratio}, style: {style}, transfer_duration: {transfer_duration}") + + if in_video is None: + raise Exception("input_video is None") + + if aspect_ratio not in ["16:9", "9:16", "1:1"]: + raise Exception('aspect_ratio not in ["16:9", "9:16", "1:1"]') + if aspect_ratio == "16:9": + width, height = 1280, 720 + elif aspect_ratio == "9:16": + width, height = 720, 1280 + elif aspect_ratio == "1:1": + width, height = 960, 960 + + style_id = style_dicts[style]['id'] + if style not in styles: + raise Exception("style not in styles") + + video_duration = get_video_duration(in_video) + if video_duration < 3: + raise Exception("video_duration < 3") + + transfer_duration = 3 + + res = None + try: + global_lock.acquire() + res = processing(in_video, width, height, style_id, transfer_duration) + if not res: + raise Exception("Processing failed") + finally: + global_lock.release() + + return res + +def load_description(fp): + with open(fp, 'r', encoding='utf-8') as f: + content = f.read() + return content + +with gr.Blocks(theme=gr.themes.Ocean()) as demo: + # Transform your videos with different Anime styles and have fun! + gr.HTML(load_description("title.md")) + with gr.Tab("Video Processing"): + with gr.Row(): + in_video = gr.Video(label="1. Input Video (Please provide a clear video clip)", interactive=True) + out_video = gr.Video(label="Final Output Video") + + with gr.Row(): + style = gr.Radio( + choices=styles, + label="2. Style, for more styles, please join our [Discord](https://discord.gg/cN8geBsBmu)", + value="ClayStyle1", + interactive=True + ) + preview = gr.Image( + value=style_images["ClayStyle1"], + label="Style Preview", + show_label=True, + interactive=False + ) + + def update_preview(choice): + return style_images[choice] + + style.change(fn=update_preview, inputs=style, outputs=preview) + + with gr.Row(): + + aspect_ratio = gr.Radio(["16:9", "9:16", "1:1"], label="3. Aspect Ratio(Width:Height)", value="16:9", interactive=True) + transfer_duration = gr.Slider( + minimum=0, + maximum=3, + step=1, + value=3, + label="Transfer Duration (seconds), for more than 3 seconds, please join our Discord(https://discord.gg/cN8geBsBmu) or website", + interactive=True + ) + submit_button = gr.Button("Generate", interactive=True) + + examples = gr.Examples( + [ + ["test32.mp4", "ClayStyle1", "9:16" ], + ["test32.mp4", "3D P1", "9:16" ], + ], + inputs=[in_video, style, aspect_ratio, transfer_duration], + outputs=[out_video], + fn=fn, + ) + + submit_button.click( + fn, + inputs=[in_video, style, aspect_ratio, transfer_duration], + outputs=[out_video], + ) + gr.HTML(load_description("end.md")) + + +if __name__ == "__main__": + demo.launch(show_error=True, share=False) \ No newline at end of file diff --git a/end.md b/end.md new file mode 100644 index 0000000000000000000000000000000000000000..bb7abc69e54f9b56aada3e0e5d544373095898d3 --- /dev/null +++ b/end.md @@ -0,0 +1,10 @@ +
+
+
+   +   + +
+
+
+ diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..8b4a6e049600c8d5ad257f0aee15b204595b6b73 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +gradio +moviepy +qiniu \ No newline at end of file diff --git a/sorted.json b/sorted.json new file mode 100644 index 0000000000000000000000000000000000000000..a653d058226f39921d501478b2870c3c23ae56af --- /dev/null +++ b/sorted.json @@ -0,0 +1,162 @@ +{ + "ClayStyle1": { + "id": "vid2vid_clay1", + "thumbnailUrl": "vid2vid/Clay.png.avif" + }, + "PVC": { + "id": "vid2vid_pvc", + "thumbnailUrl": "vid2vid/PVC.jpg.avif" + }, + "FlatanimeV4-3": { + "id": "vid2vid_flatanimeV4-3", + "thumbnailUrl": "vid2vid/F2D.jpg.avif" + }, + "FlatanimeV4 Delicated": { + "id": "vid2vid_flatanimeV4-delicated", + "thumbnailUrl": "vid2vid/suv.png.avif" + }, + "illustrationV4-1": { + "id": "vid2vid_illustrationV4-1", + "thumbnailUrl": "vid2vid/flatCJ.png.avif" + }, + "Pixels": { + "id": "vid2vid_pixels", + "thumbnailUrl": "vid2vid/Pixels.jpg.avif" + }, + "cutefaceV4 style1": { + "id": "vid2vid_flatanimeV4-cuteface1", + "thumbnailUrl": "vid2vid/TY.png.avif" + }, + "Western Comic": { + "id": "vid2vid_comic-western", + "thumbnailUrl": "vid2vid/Western.png.avif" + }, + "flatanime-gibli": { + "id": "vid2vid_flatanime-ghibli1", + "thumbnailUrl": "vid2vid/ghibli1.png.avif" + }, + "Comic Style1": { + "id": "vid2vid_comic-style1", + "thumbnailUrl": "vid2vid/hcomic.png.avif" + }, + "painting": { + "id": "vid2vid_painting-chinese", + "thumbnailUrl": "vid2vid/painting.png.avif" + }, + "Manga Q": { + "id": "vid2vid_manga-Q", + "thumbnailUrl": "vid2vid/symanga.png.avif" + }, + "IllustrationV4-2": { + "id": "vid2vid_illustrationV4-2", + "thumbnailUrl": "vid2vid/flatillustration.png.avif" + }, + "Flat Anime V4-4": { + "id": "vid2vid_flatanimeV4-4", + "thumbnailUrl": "vid2vid/hf.png.avif" + }, + "Flat Anime V4-2": { + "id": "vid2vid_flatanimeV4-2", + "thumbnailUrl": "vid2vid/awp2.png.avif" + }, + "Color Ink Painting": { + "id": "vid2vid_colorink-painting", + "thumbnailUrl": "vid2vid/chinese_ink.png.avif" + }, + "anime2.5d-style1": { + "id": "vid2vid_anime2.5d-style1", + "thumbnailUrl": "vid2vid/RC.png.avif" + }, + "2.5D Style2": { + "id": "vid2vid_anime2.5d-style2", + "thumbnailUrl": "vid2vid/kingmix.png.avif" + }, + "Ink Painting BW": { + "id": "vid2vid_ink-painting-bw", + "thumbnailUrl": "vid2vid/chinese_black_ink_painting.png.avif" + }, + "IllustrationV4-4": { + "id": "vid2vid_illustrationV4-4", + "thumbnailUrl": "vid2vid/japanese.png.avif" + }, + "Comic BW": { + "id": "vid2vid_comic-black-white", + "thumbnailUrl": "vid2vid/black-white-comic.png.avif" + }, + "flatanime G3": { + "id": "vid2vid_flatanime-ghibli3", + "thumbnailUrl": "vid2vid/hm2.png.avif" + }, + "3D P2": { + "id": "vid2vid_3d-pixar-v2", + "thumbnailUrl": "vid2vid/P2.png.avif" + }, + "Comic Rough": { + "id": "vid2vid_comic-rough", + "thumbnailUrl": "vid2vid/jojo.png.avif" + }, + "Child Crayon Drawing": { + "id": "vid2vid_drawing-child-crayon1", + "thumbnailUrl": "vid2vid/child-crayon.png.avif" + }, + "Porcelain": { + "id": "vid2vid_porcelain", + "thumbnailUrl": "vid2vid/vid2vid_porcelain.png.avif" + }, + "flatanime G2": { + "id": "vid2vid_flatanime-ghibli2", + "thumbnailUrl": "vid2vid/hm1.png.avif" + }, + "Lineart Style1": { + "id": "vid2vid_lineart-style1", + "thumbnailUrl": "vid2vid/LineartStyle1.png.avif" + }, + "3D P1": { + "id": "vid2vid_3d-pixar", + "thumbnailUrl": "vid2vid/P1.png.avif" + }, + "2.5D Style3": { + "id": "vid2vid_anime2.5d_style3", + "thumbnailUrl": "vid2vid/ast.png.avif" + }, + "Hand Drawing": { + "id": "vid2vid_hand-drawing", + "thumbnailUrl": "vid2vid/chinese_lineart.png.avif" + }, + "flatanimeV4-1": { + "id": "vid2vid_flatanimeV4-1", + "thumbnailUrl": "vid2vid/V4AWP.jpg.avif" + }, + "flatanimev1-1": { + "id": "vid2vid_flatanimev1-1", + "thumbnailUrl": "vid2vid/animem.png.avif" + }, + "Toy": { + "id": "vid2vid_toy", + "thumbnailUrl": "vid2vid/TOY.jpg.avif" + }, + "flatanime1": { + "id": "vid2vid_flatanime1", + "thumbnailUrl": "vid2vid/aniflat.png.avif" + }, + "3D-Q": { + "id": "vid2vid_3dQ", + "thumbnailUrl": "vid2vid/3dQ.png.avif" + }, + "3D C": { + "id": "vid2vid_3dcw1", + "thumbnailUrl": "vid2vid/3dC.png.avif" + }, + "Lineart-Bold": { + "id": "vid2vid_lineart-bold", + "thumbnailUrl": "vid2vid/Lineart-Bold.png.avif" + }, + "cutefaceV1": { + "id": "vid2vid_flatanime-cute-cartoon", + "thumbnailUrl": "vid2vid/cute-cartoon.png.avif" + }, + "Flat Anime-Y": { + "id": "vid2vid_flatanime-Y", + "thumbnailUrl": "vid2vid/ym.png.avif" + } +} \ No newline at end of file diff --git a/title.md b/title.md new file mode 100644 index 0000000000000000000000000000000000000000..6e99c1c12c90777e84c6f6b8721aed57f22110a8 --- /dev/null +++ b/title.md @@ -0,0 +1,25 @@ +
+
+
+ 🎨 Multi-Style Video-to-Anime Generator +
+
+
+   +   + +
+
+
+ HF Space by PexelDance. +
+
+
+

1. Select a video clip

+

2. Select a style

+

3. Select an aspect ratio

+

4. click Generate button

+
+
+
+ diff --git a/utils.py b/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..70fd8387107de80f645c955702c71b4d160825e7 --- /dev/null +++ b/utils.py @@ -0,0 +1,237 @@ +import os +import requests +import json +import time +from qiniu import put_file +import tempfile +import shutil +import random + +API_KEY = os.environ['API_KEY'] + +headers = { + "User-Agent": "PexelDance Sdk/1.0", + 'Authorization': 'Bearer %s' % API_KEY, + 'Content-Type': 'application/json' +} + +def get_endpoint(): + hosts = [ + "https://api-01.pexeldance.com", + "https://api-02.pexeldance.com", + "https://api-03.pexeldance.com", + "https://api-04.pexeldance.com", + "https://api-05.pexeldance.com", + "https://api-06.pexeldance.com", + "https://api-07.pexeldance.com", + "https://api-08.pexeldance.com", + "https://api-09.pexeldance.com", + "https://api-10.pexeldance.com", + # "https://api-11.pexeldance.com", + # "https://api-12.pexeldance.com", + # "https://api-13.pexeldance.com", + # "https://api-14.pexeldance.com", + # "https://api-15.pexeldance.com", + # "https://api-16.pexeldance.com", + # "https://api-17.pexeldance.com", + # "https://api-18.pexeldance.com", + # "https://api-19.pexeldance.com", + # "https://api-20.pexeldance.com", + ] + return random.choice(hosts) + + +def get_upload_token(extension="mp4"): + endpoint = get_endpoint() + url = endpoint + "/api/upload/token" + + payload = json.dumps({ + "file_ext": extension, + }) + + response = requests.request("POST", url, headers=headers, data=bytes(payload, "utf-8")) + if 200<= response.status_code < 300: + return response.json() + return None + +def upload_file(local_file, file_key, token): + ret, info = put_file(token, file_key, local_file) + if info.status_code == 200: + return ret + else: + return None + +def confirm_upload(key, name, hash_, fsize, bucket): + endpoint = get_endpoint() + url = endpoint + "/api/upload/confirm" + + payload = json.dumps({ + "key": key, + "name": name, + "hash": hash_, + "fsize": fsize, + "bucket": bucket, + }) + + response = requests.request("POST", url, headers=headers, data=payload) + if 200<= response.status_code < 300: + return response.json() + return None + +def upload_video(file): + ext = file.split(".")[-1] + if not os.path.exists(file): + return False + token_res = get_upload_token(ext) + upload_data = token_res.get('data') + if not upload_data: + return False + upload_token = upload_data.get('token') + if not upload_token: + return False + + bucket_key = upload_data.get('bucket_key') + if not bucket_key: + return False + + ret = upload_file(file, bucket_key, upload_token) + if not ret: + return False + key, name, hash_, fsize, bucket = ret.get('key'), upload_data.get('c_string'), ret.get('hash'), ret.get('fsize'), ret.get('bucket') + upload_res = confirm_upload(key, name, hash_, fsize, bucket) + if not upload_res: + return False + return upload_res.get('data') + +def generate(item_id, style_id, width, height, ): + endpoint = get_endpoint() + url = endpoint + "/api/job/common" + payload = json.dumps({ + "user_content": { + "item_id": item_id, + "seed": 11111, + "width": width, + "height": height + }, + "unit": 3, + "use_credit_type": "credit", + "name": style_id + }) + response = requests.request("POST", url, headers=headers, data=payload) + if 200<= response.status_code < 300: + return response.json() + else: + return None + +def get_job_status(job_id): + endpoint = get_endpoint() + url = endpoint + "/api/job" + payload = json.dumps({ + "id": job_id + }) + response = requests.request("GET", url, headers=headers, data=payload) + if 200<= response.status_code < 300: + return response.json() + return None + +def get_item_url(_id): + endpoint = get_endpoint() + url = endpoint + "/api/download_item" + payload = json.dumps({ + "key_id": [ + _id + ] + }) + response = requests.request("POST", url, headers=headers, data=payload) + if 200<= response.status_code < 300: + return response.json() + return None + +def get_result(job_id): + endpoint = get_endpoint() + url = endpoint + "/api/item/job_id" + payload = json.dumps({ + "job_id": job_id + }) + response = requests.request("GET", url, headers=headers, data=payload) + if 200<= response.status_code < 300: + return response.json() + return None + +def download_file(url): + response = requests.get(url, stream=True) + if response.status_code == 200: + tmpfile = tempfile.NamedTemporaryFile(delete=False) + tmpfile.close() + + with open(tmpfile.name, 'wb') as f: + shutil.copyfileobj(response.raw, f) + + return tmpfile.name + else: + return None + +def processing(in_video, width, height, style_id,transfer_duration): + videoRes = upload_video(in_video) + if not videoRes: + return None + videoId = videoRes.get('id') + if not videoId: + return None + + req_access = False + try_times = 1000 + for i in range(try_times): + generate_result = generate(videoId, style_id, width, height) + if not generate_result: + time.sleep(8) + continue + jobInfo = generate_result.get('data') + if not jobInfo: + time.sleep(8) + continue + job_id = jobInfo.get("job_id") + if job_id: + req_access = True + break + if not req_access: + raise "too many requests" + + + while True: + jobStatusInfo = get_job_status(job_id) + js = jobStatusInfo.get('data') + if js is None: + return None + if js.get('status') == "finished": + break + elif js.get('status') == "failed": + return None + time.sleep(10) + + result = get_result(job_id) + if not result: + return None + res_data = result.get('data') + if not res_data: + return None + li = res_data.get('list') + if len(li) == 0: + return None + jobRes = li[0] + item_id = jobRes.get('id') + if not item_id: + return None + itemDes = get_item_url(item_id) + itemData = itemDes.get('data') + if not itemData: + return None + signed_urls = itemData.get('signed_urls') + if len(signed_urls) == 0: + return None + item_url = signed_urls[0] + + file_path = download_file(item_url) + if not file_path: + return None + return file_path diff --git a/vid2vid/3dC.png.avif b/vid2vid/3dC.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..675484e1dbc77d8f616d60e8514d997f91bae1a8 Binary files /dev/null and b/vid2vid/3dC.png.avif differ diff --git a/vid2vid/3dM.png.avif b/vid2vid/3dM.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..4dfe72490098416efa0f168abd11cc9f9165b55a Binary files /dev/null and b/vid2vid/3dM.png.avif differ diff --git a/vid2vid/3dQ.png.avif b/vid2vid/3dQ.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..db4f34d39ce4b920e05a269f0c2fd6c00d705efb Binary files /dev/null and b/vid2vid/3dQ.png.avif differ diff --git a/vid2vid/Clay.png.avif b/vid2vid/Clay.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..ada0a306a000951a9f53e23fee7080a9e0909864 Binary files /dev/null and b/vid2vid/Clay.png.avif differ diff --git a/vid2vid/F2D.jpg.avif b/vid2vid/F2D.jpg.avif new file mode 100644 index 0000000000000000000000000000000000000000..6bf3ab3ba97478dbde51f80cff655355f0eb9da2 Binary files /dev/null and b/vid2vid/F2D.jpg.avif differ diff --git a/vid2vid/G0.png.avif b/vid2vid/G0.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..6443c91acc91f5ab1817ce3778f45653ec2941e8 Binary files /dev/null and b/vid2vid/G0.png.avif differ diff --git a/vid2vid/Lineart-Bold.png.avif b/vid2vid/Lineart-Bold.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..b2f1372c3a2e5172c8c2dd06e7cc1bfe6d38f8a5 Binary files /dev/null and b/vid2vid/Lineart-Bold.png.avif differ diff --git a/vid2vid/LineartStyle1.png.avif b/vid2vid/LineartStyle1.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..855aaf3ac6da9465f4f721906e0f7ee4d02f9e6f Binary files /dev/null and b/vid2vid/LineartStyle1.png.avif differ diff --git a/vid2vid/P1.png.avif b/vid2vid/P1.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..9bccb4dcd4ca5ba65561ae48c93227cf88927e4b Binary files /dev/null and b/vid2vid/P1.png.avif differ diff --git a/vid2vid/P2.png.avif b/vid2vid/P2.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..402ca2a285ad46819fcccd87b6f3f1136eb31389 Binary files /dev/null and b/vid2vid/P2.png.avif differ diff --git a/vid2vid/PVC.jpg.avif b/vid2vid/PVC.jpg.avif new file mode 100644 index 0000000000000000000000000000000000000000..1056cca9c340914d96b7fb8a0531266cc113018c Binary files /dev/null and b/vid2vid/PVC.jpg.avif differ diff --git a/vid2vid/Pixels.jpg.avif b/vid2vid/Pixels.jpg.avif new file mode 100644 index 0000000000000000000000000000000000000000..ad499a0863dfac390a738d1b65f6d5469a8a32e4 Binary files /dev/null and b/vid2vid/Pixels.jpg.avif differ diff --git a/vid2vid/RC.png.avif b/vid2vid/RC.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..6833312f12d2f4f202f13b71e4318a6fe9fee874 Binary files /dev/null and b/vid2vid/RC.png.avif differ diff --git a/vid2vid/TA.png.avif b/vid2vid/TA.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..1e370e684abee276a3f4811c8a84d650eddf604f Binary files /dev/null and b/vid2vid/TA.png.avif differ diff --git a/vid2vid/TOY.jpg.avif b/vid2vid/TOY.jpg.avif new file mode 100644 index 0000000000000000000000000000000000000000..322f84bff8646d9024f8858c6bb80c973fff96f8 Binary files /dev/null and b/vid2vid/TOY.jpg.avif differ diff --git a/vid2vid/TY.png.avif b/vid2vid/TY.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..b3171480995d667348519d24c80ddc4e8a1ed5c2 Binary files /dev/null and b/vid2vid/TY.png.avif differ diff --git a/vid2vid/TY2.png.avif b/vid2vid/TY2.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..b42ac5572a5c55f8624a2137cb4f02d92c7da0e1 Binary files /dev/null and b/vid2vid/TY2.png.avif differ diff --git a/vid2vid/V4AWP.jpg.avif b/vid2vid/V4AWP.jpg.avif new file mode 100644 index 0000000000000000000000000000000000000000..72ca82f2f96ff85990fbd2de6ab1d00630c6a360 Binary files /dev/null and b/vid2vid/V4AWP.jpg.avif differ diff --git a/vid2vid/V4AWP.png.avif b/vid2vid/V4AWP.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..05e115049ca27c0548f708e9e7db257f697b2aa7 Binary files /dev/null and b/vid2vid/V4AWP.png.avif differ diff --git a/vid2vid/Western.png.avif b/vid2vid/Western.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..a944389d72ad9d3fa7f70faefa51d92df85a4555 Binary files /dev/null and b/vid2vid/Western.png.avif differ diff --git a/vid2vid/aniflat.png.avif b/vid2vid/aniflat.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..08d7e9122d0b58c9b1cd65566df5c5d8f92a3e08 Binary files /dev/null and b/vid2vid/aniflat.png.avif differ diff --git a/vid2vid/animeK.png.avif b/vid2vid/animeK.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..d2299fe602db8585a068cf492382764670b13165 Binary files /dev/null and b/vid2vid/animeK.png.avif differ diff --git a/vid2vid/animem.png.avif b/vid2vid/animem.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..3af6941c55173a8734d0187444bf72e596a97357 Binary files /dev/null and b/vid2vid/animem.png.avif differ diff --git a/vid2vid/ast.png.avif b/vid2vid/ast.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..cac22fb9aff7c1af81d4879ca999588ada9d2649 Binary files /dev/null and b/vid2vid/ast.png.avif differ diff --git a/vid2vid/awp2.png.avif b/vid2vid/awp2.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..27570dbf04539e10a8440ba8c2e11743041fa48d Binary files /dev/null and b/vid2vid/awp2.png.avif differ diff --git a/vid2vid/black-white-comic.png.avif b/vid2vid/black-white-comic.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..55d27442df0f0a4ac135545f224cebdd247b2ec3 Binary files /dev/null and b/vid2vid/black-white-comic.png.avif differ diff --git a/vid2vid/child-crayon.png.avif b/vid2vid/child-crayon.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..fcc3510e80c5604ec34d907d0503c581e0fdc1cc Binary files /dev/null and b/vid2vid/child-crayon.png.avif differ diff --git a/vid2vid/chinese_black_ink_painting.png.avif b/vid2vid/chinese_black_ink_painting.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..09292372099a2e41583f7e1cfbe366b171e55a79 Binary files /dev/null and b/vid2vid/chinese_black_ink_painting.png.avif differ diff --git a/vid2vid/chinese_ink.png.avif b/vid2vid/chinese_ink.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..0766c9357140f3226c2f7fd0c5f7f06a779e45f2 Binary files /dev/null and b/vid2vid/chinese_ink.png.avif differ diff --git a/vid2vid/chinese_lineart.png.avif b/vid2vid/chinese_lineart.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..77b3aded075864d13821572d1000df6071a2cf2a Binary files /dev/null and b/vid2vid/chinese_lineart.png.avif differ diff --git a/vid2vid/clay2.png.avif b/vid2vid/clay2.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..c0b52bd0cc78299f5f7d77b8a540cd0b71a09eb1 Binary files /dev/null and b/vid2vid/clay2.png.avif differ diff --git a/vid2vid/cute-cartoon.png.avif b/vid2vid/cute-cartoon.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..530215aca598b630a826743c07dff902d0ec92fe Binary files /dev/null and b/vid2vid/cute-cartoon.png.avif differ diff --git a/vid2vid/flatCJ.png.avif b/vid2vid/flatCJ.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..5574238f36ba0b4b2ebc2d2d6a2921dc5ed894b9 Binary files /dev/null and b/vid2vid/flatCJ.png.avif differ diff --git a/vid2vid/flatanime-Q.png.avif b/vid2vid/flatanime-Q.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..e2056c440232e1dc740c5a5f7d2277c2602d360a Binary files /dev/null and b/vid2vid/flatanime-Q.png.avif differ diff --git a/vid2vid/flatillustration.png.avif b/vid2vid/flatillustration.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..84563b08d828c27a1e9efcbd6dea1697c174817c Binary files /dev/null and b/vid2vid/flatillustration.png.avif differ diff --git a/vid2vid/flower.png.avif b/vid2vid/flower.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..edbf97e4506d09a0ef0e7dfc86bb2e63aeb975fc Binary files /dev/null and b/vid2vid/flower.png.avif differ diff --git a/vid2vid/ghibli1.png.avif b/vid2vid/ghibli1.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..cd1b3ef9b8f46552fedf5c40c0e4f990a1faddfa Binary files /dev/null and b/vid2vid/ghibli1.png.avif differ diff --git a/vid2vid/hcomic.png.avif b/vid2vid/hcomic.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..401b287ad6a6ced3f0ad861c495bc083a39eb6e4 Binary files /dev/null and b/vid2vid/hcomic.png.avif differ diff --git a/vid2vid/hf.png.avif b/vid2vid/hf.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..0d7433578b3b0f5bd5a2dd4387cede2721276268 Binary files /dev/null and b/vid2vid/hf.png.avif differ diff --git a/vid2vid/hm1.png.avif b/vid2vid/hm1.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..250dc060173be72c486d1de0136740580ec278e2 Binary files /dev/null and b/vid2vid/hm1.png.avif differ diff --git a/vid2vid/hm2.png.avif b/vid2vid/hm2.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..36523d18a449c30a2e17af660f2d04dba10d4187 Binary files /dev/null and b/vid2vid/hm2.png.avif differ diff --git a/vid2vid/japanese.png.avif b/vid2vid/japanese.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..4d89648ec132f9621148f1b82aa033c3f1121003 Binary files /dev/null and b/vid2vid/japanese.png.avif differ diff --git a/vid2vid/jojo.png.avif b/vid2vid/jojo.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..d9aa5d9857ae74f96bba3c39c514ef4fe71cf09e Binary files /dev/null and b/vid2vid/jojo.png.avif differ diff --git a/vid2vid/kingmix.png.avif b/vid2vid/kingmix.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..9c5dafb13a28a8be1dcf3a336f4f6cada6cda5f0 Binary files /dev/null and b/vid2vid/kingmix.png.avif differ diff --git a/vid2vid/ll.png.avif b/vid2vid/ll.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..feef7c105eea07183445a4c7dd3b4120cc287f0b Binary files /dev/null and b/vid2vid/ll.png.avif differ diff --git a/vid2vid/minimal.png.avif b/vid2vid/minimal.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..d34128f919e0fe67b20ea3f8607ddd917424bb60 Binary files /dev/null and b/vid2vid/minimal.png.avif differ diff --git a/vid2vid/oldmovie.png.avif b/vid2vid/oldmovie.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..eb45b2786a5c7f4be05cc77dd16d1fb24615480f Binary files /dev/null and b/vid2vid/oldmovie.png.avif differ diff --git a/vid2vid/painting.png.avif b/vid2vid/painting.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..00ccd1b3bc789aa9d09bfb107119ec99142df530 Binary files /dev/null and b/vid2vid/painting.png.avif differ diff --git a/vid2vid/suv.png.avif b/vid2vid/suv.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..81c4d7b06bafef500de3a8b328e14a30d8a7ae91 Binary files /dev/null and b/vid2vid/suv.png.avif differ diff --git a/vid2vid/symanga.png.avif b/vid2vid/symanga.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..d52cb47a81e4cff9e3352b755707a6e9e548d7e9 Binary files /dev/null and b/vid2vid/symanga.png.avif differ diff --git a/vid2vid/vid2vid_porcelain.png.avif b/vid2vid/vid2vid_porcelain.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..f3bed8cf89ec09a3f79a7f69f82c8040412fbc29 Binary files /dev/null and b/vid2vid/vid2vid_porcelain.png.avif differ diff --git a/vid2vid/ym.png.avif b/vid2vid/ym.png.avif new file mode 100644 index 0000000000000000000000000000000000000000..b863b3e87a877cdd9309bfd5f9fd657bbf7c1f69 Binary files /dev/null and b/vid2vid/ym.png.avif differ