File size: 4,761 Bytes
cc50ae5
87212ce
44f5493
5b51878
 
e4268e4
52f5bd3
87212ce
 
 
 
 
a9d9267
 
 
839e57a
b5b48b7
5b51878
 
 
 
 
 
8cf4129
 
 
 
 
 
57c5d1d
8cf4129
 
 
87212ce
e4268e4
 
 
 
87212ce
e4268e4
87212ce
44f5493
 
57c5d1d
44f5493
 
 
 
b5b48b7
44f5493
 
 
 
 
 
 
 
 
 
 
 
 
 
c60777d
cc50ae5
 
d1a176f
cc50ae5
 
 
b5b48b7
cc50ae5
 
 
 
 
 
d1a176f
cc50ae5
 
 
b5b48b7
cc50ae5
57c5d1d
 
 
 
 
 
 
 
 
cc50ae5
b5b48b7
cc50ae5
 
 
d1a176f
cc50ae5
 
 
 
 
 
 
 
 
c60777d
d1a176f
cc50ae5
57c5d1d
cc50ae5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32b92c1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
import gradio as gr
from gradio_client import Client
import requests
from deep_translator import GoogleTranslator
from langdetect import detect
import re

MORE = """ ## TRY Other Models
        ### JARVIS: Your VOICE Assistant -> https://huggingface.co/spaces/KingNish/JARVIS
        ### Instant Image: 4k images in 5 Second -> https://huggingface.co/spaces/KingNish/Instant-Image
        """

# Gradio Client
client = Client("KingNish/Instant-Video")

# Function
def generate_image(prompt, base="Anime", motion="", step=8, progress=gr.Progress()):

    language = detect(prompt)
    
    if language != 'en':
        prompt = GoogleTranslator(source=language, target='en').translate(prompt)
    
    try:
        result = client.predict(
            prompt=prompt,
            base=base,
            motion=motion,
            step=step,
            api_name="/instant_video"
        )
        video_path = result["video"]
        return video_path
    except Exception as e:
        error_message = str(e)
        match = re.search(r'You have exceeded your GPU quota \((\d+:\d+:\d+) left vs. \d+s requested\). Please retry in (\d+:\d+:\d+)\.', error_message)
        if match:
            wait_time = match.group(2)
            raise gr.Error(f"У модели сработало ограничение (Слишком часто), попробуйте ещё раз в *время: {wait_time}*")
        else:
            raise gr.Error(f"Произошла ошибка при подключении к API: {error_message}. Повторите попытку позже или обратитесь к администраторам Neurix.")

# Ссылка на файл CSS
css_url = "https://neurixyufi-aihub.static.hf.space/style.css"

# Получение CSS по ссылке
response = requests.get(css_url)
css = response.text
    
# Gradio Interface
with gr.Blocks(css=css) as demo:
    gr.HTML(
        """
        <script>
          var head = document.getElementsByTagName('head')[0];
          var link = document.createElement('link');
          link.rel = 'stylesheet';
          link.type = 'text/css';
          link.href = 'style.css';
          head.appendChild(link);
        </script>
        """
    )
    with gr.Column():
        with gr.Row():
            prompt = gr.Textbox(
                label='Описание', placeholder='Фокус: Играющие дети (Сезон: Зима)'
            )
        with gr.Row():
            select_base = gr.Dropdown(
                label='Стиль',
                choices=[
                    "Cartoon", 
                    "Realistic",
                    "3d",
                    "Anime",
                ],
                value="3d",
                interactive=True
            )
            select_motion = gr.Dropdown(
                label='Движение',
                choices=[
                    ("По умолчанию", ""),
                    ("Приближение", "guoyww/animatediff-motion-lora-zoom-in"),
                    ("Отдаление", "guoyww/animatediff-motion-lora-zoom-out"),
                    ("Наклон вверх", "guoyww/animatediff-motion-lora-tilt-up"),
                    ("Наклон вниз", "guoyww/animatediff-motion-lora-tilt-down"),
                    ("Панорама влево", "guoyww/animatediff-motion-lora-pan-left"),
                    ("Панорама вправо", "guoyww/animatediff-motion-lora-pan-right"),
                    ("Поворот влево", "guoyww/animatediff-motion-lora-rolling-anticlockwise"),
                    ("Поворот вправо", "guoyww/animatediff-motion-lora-rolling-clockwise"),
                ],
                value="",
                interactive=True
            )
            select_step = gr.Dropdown(
                label='Шаги вывода (Качество)',
                choices=[
                    ('1-Step', 1), 
                    ('2-Step', 2),
                    ('4-Step', 4),
                    ('8-Step', 8),
                ],
                value=4,
                interactive=True
            )
        with gr.Row():
            submit = gr.Button("Создать", variant='primary')
    video = gr.Video(
        label='Созданое видео',
        autoplay=True,
        height=512,
        width=512,
        elem_id="video_output"
    )

    prompt.submit(
        fn=generate_image,
        inputs=[prompt, select_base, select_motion, select_step],
        outputs=video,
    )
    submit.click(
        fn=generate_image,
        inputs=[prompt, select_base, select_motion, select_step],
        outputs=video,
    )

demo.queue(max_size=250).launch(show_api=False, share=False)