File size: 11,515 Bytes
ff3c6aa
ef4aa37
77eaefe
998b8a0
0e349b1
ff3c6aa
0e349b1
0b11a54
998b8a0
0b11a54
ff3c6aa
d8f6d3d
5273c29
 
ddabfc0
 
 
5273c29
0b11a54
 
067894a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0b11a54
 
 
af6d115
0b11a54
 
264f81b
0b11a54
 
 
 
 
0e349b1
 
0b11a54
0e349b1
867a629
0b11a54
780a8d7
 
77eaefe
867a629
abfd2c7
c02f1e3
830ea02
5273c29
 
 
d174226
ebd0974
377f02b
 
 
d9bda94
 
 
 
377f02b
 
 
 
753949f
377f02b
 
 
 
d9bda94
 
 
 
 
377f02b
 
ebd0974
377f02b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d9bda94
377f02b
 
d9bda94
377f02b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1f14d54
6a171e3
0b11a54
4230814
2430add
fe2bf46
c02f1e3
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
import os
import cv2
import numpy as np
import gradio as gr
from tqdm import tqdm
from stability_sdk.api import Context
from stability_sdk.utils import create_video_from_frames
from stability_sdk.animation import AnimationArgs, Animator

STABILITY_HOST = "grpc.stability.ai:443" 

def anim(f_promt, s_promt, stability_key, cadence_interp, width ,height ,sampler ,model ,custom_model ,seed ,cfg_scale ,clip_guidance ,init_image ,init_sizing ,mask_path ,mask_invert ,preset ,animation_mode ,max_frames ,border ,noise_add_curve ,noise_scale_curve ,strength_curve ,steps_curve ,steps_strength_adj ,interpolate_prompts ,locked_seed ,angle ,zoom ,translation_x ,translation_y ,translation_z ,rotation_x ,rotation_y ,rotation_z ,diffusion_cadence_curve ,cadence_spans ,color_coherence ,brightness_curve ,contrast_curve ,hue_curve ,saturation_curve ,lightness_curve ,color_match_animate ,depth_model_weight,near_plane ,far_plane ,fov_curve ,depth_blur_curve ,depth_warp_curve ,save_depth_maps ,camera_type ,render_mode ,mask_power ,use_inpainting_model ,inpaint_border ,mask_min_value ,mask_binarization_thr ,save_inpaint_masks ,video_init_path ,extract_nth_frame ,video_mix_in_curve ,video_flow_warp ,fps ,reverse):
    # Connect to Stability API
    context = Context(STABILITY_HOST, stability_key)
    # Test the connection
    context.get_user_info()
    print("Connection successfuly!")

    # Configure the animation
    args = AnimationArgs()
    args.interpolate_prompts = interpolate_prompts
    args.locked_seed = locked_seed
    args.max_frames = max_frames
    args.seed = seed
    args.strength_curve = strength_curve
    args.diffusion_cadence_curve = diffusion_cadence_curve
    args.cadence_interp = cadence_interp
    args.width = width
    args.height = height
    args.sampler = sampler
    args.model = model
    args.custom_model = custom_model
    args.seed = seed
    args.cfg_scale = cfg_scale
    args.clip_guidance = clip_guidance
    args.init_image = init_image
    args.init_sizing = init_sizing
    args.mask_path = mask_path
    args.mask_invert = mask_invert
    args.preset = preset
    args.animation_mode = animation_mode
    args.max_frames = max_frames
    args.border = border
    args.noise_add_curve = noise_add_curve
    args.noise_scale_curve = noise_scale_curve
    args.strength_curve = strength_curve
    args.steps_curve = steps_curve
    args.steps_strength_adj = steps_strength_adj   
    args.interpolate_prompts = interpolate_prompts
    args.locked_seed = locked_seed
    args.angle = angle
    args.zoom = zoom
    args.translation_x = translation_x
    args.translation_y = translation_y
    args.translation_z = translation_z
    args.rotation_x = rotation_x
    args.rotation_y = rotation_y
    args.rotation_z = rotation_z

    args.diffusion_cadence_curve = diffusion_cadence_curve
    args.cadence_spans = cadence_spans

    args.color_coherence = color_coherence
    args.brightness_curve = brightness_curve
    args.contrast_curve = contrast_curve
    args.hue_curve = hue_curve
    args.saturation_curve = saturation_curve
    args.lightness_curve = lightness_curve
    args.color_match_animate = color_match_animate

    args.depth_model_weight = depth_model_weight
    args.near_plane = near_plane
    args.far_plane = far_plane
    args.fov_curve = fov_curve
    args.depth_blur_curve = depth_blur_curve
    args.depth_warp_curve = depth_warp_curve
    args.save_depth_maps = save_depth_maps

    args.camera_type = camera_type
    args.render_mode = render_mode
    args.mask_power = mask_power

    args.use_inpainting_model = use_inpainting_model
    args.inpaint_border = inpaint_border
    args.mask_min_value = mask_min_value
    args.mask_binarization_thr = mask_binarization_thr
    args.save_inpaint_masks = save_inpaint_masks

    args.video_init_path = video_init_path
    args.extract_nth_frame = extract_nth_frame
    args.video_mix_in_curve = video_mix_in_curve
    args.video_flow_warp = video_flow_warp

    args.fps = fps
    args.reverse = reverse

    animation_prompts = {
        0: f_promt,
        2: s_promt,
    }
    negative_prompt = ""
    print(args)
    # Create Animator object to orchestrate the rendering
    animator = Animator(
        api_context=context,
        animation_prompts=animation_prompts,
        negative_prompt=negative_prompt,
        args=args,
        out_dir="video_01"
    )
    for _ in tqdm(animator.render(), total=args.max_frames):
        pass 

    video_path = os.path.join(animator.out_dir, "video.mp4")
    create_video_from_frames(animator.out_dir, video_path, fps=24)

    return video_path
      
with gr.Blocks() as demo:
    gr.Markdown("Stability Animation 1")
    f_promt = gr.Textbox(label="First Prompt", value="a photo of a cute cat")
    s_promt = gr.Textbox(label="Second Prompt", value="a photo of a cute dog")
    stability_key = gr.Textbox(label="Stability Key", value="")

    with gr.Accordion(open=False):
        width = gr.Slider(minimum=100, maximum=1000, value=512, label="Width")
        height = gr.Slider(minimum=100, maximum=1000, value=512, label="Height")
        sampler = gr.Dropdown(choices=['K_dpmpp_2m'], value='K_dpmpp_2m', label="Sampler")
        model = gr.Dropdown(choices=[
            "stable-diffusion-512-v2-1", "stable-diffusion-xl-beta-v2-2-2", "stable-diffusion-xl-1024-v0-9", 
            "stable-diffusion-xl-1024-v1-0", "custom"
        ], value="stable-diffusion-xl-1024-v1-0", label="Model")

        custom_model = gr.Textbox(value="", label="Custom Model")
        seed = gr.Slider(minimum=-1, maximum=100, value=-1, label="Seed")
        cfg_scale = gr.Slider(minimum=1, maximum=10, value=7, label="Cfg Scale")
        clip_guidance = gr.Dropdown(choices=["None", "Simple", "FastBlue", "FastGreen"], value="None", label="Clip Guidance")
        init_image = gr.Textbox(value='', label="Init Image")
        init_sizing = gr.Dropdown(choices=['stretch'], value='stretch', label="Init Sizing")
        mask_path = gr.Textbox(value="", label="Mask Path")
        mask_invert = gr.Checkbox(value=False, label="Mask Invert")
        preset = gr.Dropdown(value="cinematic", label="Preset", choices=[
            'None', '3d-model', 'analog-film', 'anime', 'cinematic', 'comic-book', 'digital-art', 
            'enhance', 'fantasy-art', 'isometric', 'line-art', 'low-poly', 'modeling-compound', 
            'neon-punk', 'origami', 'photographic', 'pixel-art',
        ])

        animation_mode = gr.Dropdown(choices=['3D warp'], value='3D warp', label="Animation Mode")
        max_frames = gr.Slider(minimum=1, maximum=100, value=5, label="Max Frames")
        border = gr.Dropdown(choices=['replicate'], value='replicate', label="Border")
        noise_add_curve = gr.Textbox(value="0:(0.02)", label="Noise Add Curve")
        noise_scale_curve = gr.Textbox(value="0:(0.99)", label="Noise Scale Curve")
        strength_curve = gr.Textbox(value="0:(0.65)", label="Strength Curve")
        steps_curve = gr.Textbox(value="0:(30)", label="Steps Curve")
        steps_strength_adj = gr.Checkbox(value=False, label="Steps Strength Adj")
        interpolate_prompts = gr.Checkbox(value=False, label="Interpolate Prompts")
        locked_seed = gr.Checkbox(value=False, label="Locked Seed")

        angle = gr.Textbox(value="0:(0)", label="Angle")
        zoom = gr.Textbox(value="0:(1)", label="Zoom")
        translation_x = gr.Textbox(value="0:(0)", label="Translation X")
        translation_y = gr.Textbox(value="0:(0)", label="Translation Y")
        translation_z = gr.Textbox(value="0:(0)", label="Translation Z")
        rotation_x = gr.Textbox(value="0:(0)", label="Rotation X")
        rotation_y = gr.Textbox(value="0:(0)", label="Rotation Y")
        rotation_z = gr.Textbox(value="0:(0)", label="Rotation Z")

        diffusion_cadence_curve = gr.Textbox(value="0:(1)", label="Diffusion Cadence Curve")
        cadence_interp = gr.Dropdown(choices=['film', 'mix', 'rife', 'vae-lerp', 'vae-slerp'], value='mix', label="Cadence Interp")
        cadence_spans = gr.Checkbox(value=False, label="Cadence Spans")

        color_coherence = gr.Dropdown(choices=['None', 'HSV', 'LAB', 'RGB'], value='LAB', label="Color Coherence")
        brightness_curve = gr.Textbox(value="0:(1.0)", label="Brightness Curve")
        contrast_curve = gr.Textbox(value="0:(1.0)", label="Contrast Curve")
        hue_curve = gr.Textbox(value="0:(0.0)", label="Hue Curve")
        saturation_curve = gr.Textbox(value="0:(1.0)", label="Saturation Curve")
        lightness_curve = gr.Textbox(value="0:(0.0)", label="Lightness Curve")
        color_match_animate = gr.Checkbox(value=True, label="Color Match Animate")

        depth_model_weight = gr.Slider(minimum=0, maximum=1, value=0.3, step=0.1, label="Depth Model Weight")
        near_plane = gr.Slider(minimum=1, maximum=1000, value=200, label="Near Plane")
        far_plane = gr.Slider(minimum=1, maximum=10000, value=10000, label="Far Plane")
        fov_curve = gr.Textbox(value="0:(25)", label="Fov Curve")
        depth_blur_curve = gr.Textbox(value="0:(0.0)", label="Depth Blur Curve")
        depth_warp_curve = gr.Textbox(value="0:(1.0)", label="Depth Warp Curve")
        save_depth_maps = gr.Checkbox(value=False, label="Save Depth Maps")

        camera_type = gr.Dropdown(choices=['perspective'], value='perspective', label="Camera Type")
        render_mode = gr.Dropdown(choices=['mesh'], value='mesh', label="Render Mode")
        mask_power = gr.Slider(minimum=0, maximum=1, value=0.3, step=0.1, label="Mask Power")

        use_inpainting_model = gr.Checkbox(value=False, label="Use Inpainting Model")
        inpaint_border = gr.Checkbox(value=False, label="Inpaint Border")
        mask_min_value = gr.Textbox(value="0:(0.25)", label="Mask Min Value")
        mask_binarization_thr = gr.Slider(minimum=0, maximum=1, value=0.5, step=0.1, label="Mask Binarization Threshold")
        save_inpaint_masks = gr.Checkbox(value=False, label="Save Inpaint Masks")

        video_init_path = gr.Textbox(value="", label="Video Init Path")
        extract_nth_frame = gr.Slider(minimum=1, maximum=10, value=1, label="Extract Nth Frame")
        video_mix_in_curve = gr.Textbox(value="0:(0.02)", label="Video Mix In Curve")
        video_flow_warp = gr.Checkbox(value=True, label="Video Flow Warp")

        fps = gr.Slider(minimum=1, maximum=60, value=12, label="FPS")
        reverse = gr.Checkbox(value=False, label="Reverse")
    
    vid = gr.Video(label='video')
    btn = gr.Button('Anim')

    btn.click(fn=anim, inputs=[f_promt, s_promt, stability_key, cadence_interp, width ,height ,sampler ,model ,custom_model ,seed ,cfg_scale ,clip_guidance ,init_image ,init_sizing ,mask_path ,mask_invert ,preset ,animation_mode ,max_frames ,border ,noise_add_curve ,noise_scale_curve ,strength_curve ,steps_curve ,steps_strength_adj ,interpolate_prompts ,locked_seed ,angle ,zoom ,translation_x ,translation_y ,translation_z ,rotation_x ,rotation_y ,rotation_z ,diffusion_cadence_curve ,cadence_spans ,color_coherence ,brightness_curve ,contrast_curve ,hue_curve ,saturation_curve ,lightness_curve ,color_match_animate ,depth_model_weight,near_plane ,far_plane ,fov_curve ,depth_blur_curve ,depth_warp_curve ,save_depth_maps ,camera_type ,render_mode ,mask_power ,use_inpainting_model ,inpaint_border ,mask_min_value ,mask_binarization_thr ,save_inpaint_masks ,video_init_path ,extract_nth_frame ,video_mix_in_curve ,video_flow_warp ,fps ,reverse], outputs=[vid],api_name="AnimAPI")

demo.launch()