00Boobs00 commited on
Commit
1c0138b
·
verified ·
1 Parent(s): 7cdc3c1

Upload folder using huggingface_hub

Browse files
Files changed (2) hide show
  1. app.py +215 -0
  2. requirements.txt +3 -0
app.py ADDED
@@ -0,0 +1,215 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import time
3
+ import numpy as np
4
+ from PIL import Image
5
+ import random
6
+
7
+ # Mock Pipeline Class to simulate the processing stages described
8
+ # In a real scenario, this would interface with Diffusers/PyTorch models
9
+ class VideoGenerationPipeline:
10
+ def __init__(self):
11
+ self.device = "cpu" # Mock device
12
+
13
+ def preprocess(self, image):
14
+ """Simulate Stage 1: Upscaling and Preprocessing"""
15
+ time.sleep(1)
16
+ return image
17
+
18
+ def generate_sequence(self, image, steps):
19
+ """Simulate Stage 2: Frame Generation"""
20
+ time.sleep(2)
21
+ return [image] * steps
22
+
23
+ def render_video(self, frames, fps):
24
+ """Simulate Stage 3: Video Rendering"""
25
+ time.sleep(1)
26
+ # Return a dummy video path or placeholder
27
+ return "output_video.mp4"
28
+
29
+ # Initialize the mock pipeline
30
+ pipeline = VideoGenerationPipeline()
31
+
32
+ def process_video(
33
+ reference_image,
34
+ pace_slider,
35
+ motion_slider,
36
+ num_frames,
37
+ guidance_scale,
38
+ progress=gr.Progress()
39
+ ):
40
+ """
41
+ Main inference function simulating a complex multi-stage pipeline.
42
+ Uses gr.Progress to provide user feedback during long operations.
43
+ """
44
+ if reference_image is None:
45
+ raise gr.Error("Please upload a reference image first.")
46
+
47
+ try:
48
+ # Stage 1: Preprocessing
49
+ progress(0.1, desc="Stage 1: Preprocessing & Upscaling...")
50
+ _ = pipeline.preprocess(reference_image)
51
+
52
+ # Stage 2: Sequence Generation
53
+ progress(0.4, desc="Stage 2: Generating Frame Sequence...")
54
+ # Simulate variable processing time based on complexity
55
+ time.sleep(1 + (motion_slider * 0.5))
56
+
57
+ # Stage 3: Choreography/Motion
58
+ progress(0.7, desc="Stage 3: Applying Motion & Choreography...")
59
+ _ = pipeline.generate_sequence(reference_image, num_frames)
60
+
61
+ # Stage 4: Final Render
62
+ progress(0.9, desc="Stage 4: Rendering Final Video...")
63
+ output_path = pipeline.render_video([], fps=25)
64
+
65
+ progress(1.0, desc="Complete!")
66
+
67
+ # In a real app, return the actual video file path
68
+ # Here we return the input as a placeholder for the demo
69
+ return reference_image
70
+
71
+ except Exception as e:
72
+ raise gr.Error(f"Pipeline failed: {str(e)}")
73
+
74
+ # Gradio 6 Application Structure
75
+ # CRITICAL: gr.Blocks() takes NO parameters in Gradio 6
76
+ with gr.Blocks() as demo:
77
+
78
+ # Header with required attribution
79
+ gr.HTML("""
80
+ <div style="text-align: center; margin-bottom: 20px;">
81
+ <h1>Pro-Video Img2Vid Pipeline</h1>
82
+ <p>Advanced Image-to-Video Generation Workflow</p>
83
+ <a href="https://huggingface.co/spaces/akhaliq/anycoder" target="_blank" style="color: #007bff; text-decoration: none;">Built with anycoder</a>
84
+ </div>
85
+ """)
86
+
87
+ # Layout: Sidebar for controls, Main area for IO
88
+ with gr.Row():
89
+
90
+ # Sidebar for Configuration
91
+ with gr.Sidebar(width=320):
92
+ gr.Markdown("## Configuration")
93
+
94
+ gr.Markdown("### Generation Settings")
95
+ pace_slider = gr.Slider(
96
+ minimum=0.6,
97
+ maximum=1.4,
98
+ value=0.9,
99
+ step=0.05,
100
+ label="Generation Pace",
101
+ info="Lower is faster processing"
102
+ )
103
+
104
+ motion_slider = gr.Slider(
105
+ minimum=0.8,
106
+ maximum=2.0,
107
+ value=1.2,
108
+ step=0.1,
109
+ label="Motion Intensity",
110
+ info="Controls movement magnitude"
111
+ )
112
+
113
+ num_frames = gr.Slider(
114
+ minimum=16,
115
+ maximum=64,
116
+ value=24,
117
+ step=4,
118
+ label="Frame Count",
119
+ info="Total frames in output"
120
+ )
121
+
122
+ guidance_scale = gr.Slider(
123
+ minimum=5.0,
124
+ maximum=15.0,
125
+ value=7.5,
126
+ step=0.5,
127
+ label="Guidance Scale",
128
+ info="Adherence to prompt"
129
+ )
130
+
131
+ gr.Markdown("---")
132
+ gr.Markdown("### System Info")
133
+ system_status = gr.Textbox(
134
+ value="System Ready (CUDA: Available)",
135
+ label="Status",
136
+ interactive=False
137
+ )
138
+
139
+ # Main Content Area
140
+ with gr.Column(scale=1):
141
+
142
+ gr.Markdown("## Input / Output")
143
+
144
+ with gr.Row():
145
+ with gr.Column():
146
+ input_image = gr.Image(
147
+ type="pil",
148
+ label="Reference Image",
149
+ sources=["upload", "clipboard"],
150
+ height=400
151
+ )
152
+
153
+ # Action Buttons
154
+ with gr.Row():
155
+ generate_btn = gr.Button("Generate Video", variant="primary", size="lg")
156
+ clear_btn = gr.ClearButton([input_image], variant="stop")
157
+
158
+ with gr.Column():
159
+ output_video = gr.Video(
160
+ label="Generated Video Output (25fps)",
161
+ autoplay=True,
162
+ height=400
163
+ )
164
+
165
+ # Advanced Settings Accordion
166
+ with gr.Accordion("Advanced Settings", open=False):
167
+ seed = gr.Number(label="Seed (Random for -1)", value=-1, precision=0)
168
+ negative_prompt = gr.Textbox(
169
+ label="Negative Prompt",
170
+ placeholder="blur, distortion, low quality...",
171
+ lines=2
172
+ )
173
+ enable_lora = gr.Checkbox(label="Enable Custom LoRA", value=False)
174
+
175
+ # Event Listeners
176
+ # Gradio 6 uses api_visibility instead of just api_name
177
+ generate_btn.click(
178
+ fn=process_video,
179
+ inputs=[
180
+ input_image,
181
+ pace_slider,
182
+ motion_slider,
183
+ num_frames,
184
+ guidance_scale
185
+ ],
186
+ outputs=output_video,
187
+ api_visibility="public"
188
+ )
189
+
190
+ # Gradio 6 Launch Method
191
+ # CRITICAL: All parameters (theme, css, etc.) go here, NOT in gr.Blocks()
192
+ demo.launch(
193
+ theme=gr.themes.Soft(
194
+ primary_hue="indigo",
195
+ secondary_hue="blue",
196
+ neutral_hue="slate",
197
+ font=gr.themes.GoogleFont("Inter"),
198
+ text_size="lg",
199
+ spacing_size="lg",
200
+ radius_size="md"
201
+ ),
202
+ # Custom CSS for additional polish
203
+ css="""
204
+ .gradio-container {
205
+ max-width: 1400px !important;
206
+ }
207
+ h1 {
208
+ font-weight: 700 !important;
209
+ color: #1f2937 !important;
210
+ }
211
+ """,
212
+ footer_links=[
213
+ {"label": "Built with anycoder", "url": "https://huggingface.co/spaces/akhaliq/anycoder"}
214
+ ]
215
+ )
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ Pillow
2
+ gradio
3
+ numpy