Spaces:
Running on Zero
Running on Zero
File size: 13,486 Bytes
31e9635 f9f3338 17164a6 f9f3338 17164a6 ca59823 17164a6 6ccb37e 17164a6 6ccb37e f9f3338 17164a6 6ccb37e 17164a6 6ccb37e 17164a6 6ccb37e 17164a6 6ccb37e 17164a6 6ccb37e 17164a6 f9f3338 6ccb37e 17164a6 6ccb37e 17164a6 6ccb37e 17164a6 6ccb37e 17164a6 6ccb37e 17164a6 ca59823 17164a6 ca59823 17164a6 f9f3338 6ccb37e f9f3338 1cbf0c9 f9f3338 31e9635 f9f3338 17164a6 f9f3338 17164a6 ca59823 17164a6 31e9635 17164a6 31e9635 17164a6 347cf89 17164a6 347cf89 17164a6 347cf89 17164a6 347cf89 17164a6 347cf89 1cbf0c9 347cf89 31e9635 347cf89 31e9635 347cf89 31e9635 1cbf0c9 31e9635 | 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 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 | import os
import gradio as gr
import config
import prompt_enhancer
import rife_interp
from ui_modules.helpers import load_template
def render_sulphur_vision_suite(input_img):
"""
Silver Feature - Sulphur AI Vision Prompt Engine & Prompt Relay Accordions (open=True).
"""
# 1. Sulphur AI Vision Prompt Engine Accordion (open=True)
with gr.Accordion("🥈 Sulphur AI Vision Prompt Engine (Silver Feature)", open=True):
gr.HTML(load_template("sulphur_silver.html"))
with gr.Row():
sulphur_subject_input = gr.Textbox(
label="👤 Main Subject / Character",
value="",
lines=2,
placeholder="e.g. beautiful woman in an elegant black dress, portrait detail"
)
sulphur_adegan_input = gr.Textbox(
label="🎬 Scene Motion / Action Description",
value="",
lines=2,
placeholder="e.g. walking down neon city street, looking back and smiling"
)
with gr.Row():
sulphur_camera_dropdown = gr.Dropdown(
choices=["Static", "Close-Up", "Handheld", "POV", "Pan Left-Right", "Zoom In", "Drone View", "Tracking Shot","Tilt Up-Down","Rotation","Zoom Out","Orbit Shot","Steadicam","Slow Motion","Fast Motion","Freeze Frame","Other", "Vertical Shot", "Horizontal Shot", "Diagonal Shot", "Macro Shot", "Telephoto Shot","Random"],
value="Static",
label="🎥 Camera Directing",
scale=1
)
sulphur_atmosphere_dropdown = gr.Dropdown(
choices=["Natural Cinematic", "Dim Bedroom", "Neon / Cyberpunk", "Dramatic Night", "Golden Hour Sun", "Studio Portrait","Night Time","Home Theater","Outdoor Night","Indoor Night","Outdoor Day","Indoor Day","Car Night","Car Day","Beach Night","Beach Day","Forest Night","Forest Day","Mountain Night","Mountain Day","Desert Night","Desert Day","Pool Night","Pool Day","Room","Living Room","Kitchen","Bathroom","Garden","Street","Cafe","Restaurant","Bar","Club","Hotel","Mall","Airport","Train","Bus","Subway","Bicycle","Motorcycle","Truck","Boat","Airplane","Spaceship","Other"],
value="Natural Cinematic",
label="💡 Atmosphere & Mood",
scale=1
)
sulphur_mode_dropdown = gr.Dropdown(
choices=[
"🔥 NSFW (Adult / Erotic Uncensored)",
"💖 SFW (Romantic / Sensual Cinematic)",
"🎬 General (Action / Non-Porn Physical)"
],
value="🔥 NSFW (Adult / Erotic Uncensored)",
label="🔥 Prompt Relay Generation Mode",
scale=1
)
with gr.Row():
sulphur_enable_swap_checkbox = gr.Checkbox(
label="✨ Enable AI Real-ESRGAN / GFPGAN Image Enhancement",
value=False,
info="Super-resolves input image quality via Real-ESRGAN / GFPGAN prior to prompt generation."
)
sulphur_enhance_btn = gr.Button("⚡ Auto-Generate Uncensored Prompt Relay via Sulphur AI", variant="primary")
sulphur_api_status_box = gr.HTML()
# 2. Multi-Event Timeline Schedule (Prompt Relay) Accordion (open=True)
with gr.Accordion("🎬 Multi-Event Timeline Schedule (Prompt Relay)", open=True):
enable_prompt_relay_checkbox = gr.Checkbox(
label="🎬 Enable Prompt Relay (Multi-Event Timeline Control)",
value=True,
info="⭐ Recommended: Controls multi-event motion per second (Base Prompt is automatically ignored when active)."
)
relay_prompt_schedule_input = gr.Textbox(
label="🎬 Multi-Event Timeline Schedule (Prompt Relay)",
lines=6,
max_lines=12,
placeholder="[0.0s - 2.0s] A beautiful woman sitting by window\n[2.0s - 4.0s] She stands up and smiles at camera",
value="",
info="Format: [start_sec - end_sec] Detailed event motion description (Base Prompt is not needed)."
)
return {
"sulphur_subject_input": sulphur_subject_input,
"sulphur_adegan_input": sulphur_adegan_input,
"sulphur_camera_dropdown": sulphur_camera_dropdown,
"sulphur_atmosphere_dropdown": sulphur_atmosphere_dropdown,
"sulphur_mode_dropdown": sulphur_mode_dropdown,
"sulphur_enable_swap_checkbox": sulphur_enable_swap_checkbox,
"sulphur_enhance_btn": sulphur_enhance_btn,
"sulphur_api_status_box": sulphur_api_status_box,
"enable_prompt_relay_checkbox": enable_prompt_relay_checkbox,
"relay_prompt_schedule_input": relay_prompt_schedule_input
}
def render_vip_suite(input_img, output_video):
"""
Gold VIP Suite - Remote GPU RIFE 1080p HD & Advanced Settings Accordions.
Protected by Master VIP Password Key.
"""
with gr.Accordion("💎 Remote VIP GPU RIFE & 1080p HD Video Enhancer", open=True):
with gr.Row():
vip_master_password_input = gr.Textbox(
label="🔑 Master VIP Password Key",
type="password",
placeholder="Enter Master VIP Key to unlock Remote GPU RIFE & Advanced Settings",
value="",
info="For Master VIP Password, Inbox Me",
scale=3
)
validate_vip_key_btn = gr.Button("🔓 Validate VIP Key", variant="primary", scale=1)
vip_auth_status_box = gr.HTML()
with gr.Group(visible=False) as vip_content_group:
gr.HTML(load_template("rife_vip.html"))
vip_standalone_video_input = gr.Video(
label="📹 Input Video to Enhance",
sources=["upload"],
height=200
)
with gr.Row():
vip_send_output_video_btn = gr.Button("📲 Load Generated Output Video to Enhancer", variant="secondary")
enable_vip_rife_checkbox = gr.Checkbox(
label="⚡ Enable VIP Remote RIFE Acceleration (For Main Generator)",
value=False,
info="Auto-offloads main video generation to VIP GPU server."
)
with gr.Row():
vip_rife_upscale_checkbox = gr.Checkbox(
label="✨ VIP Real-ESRGAN 1080p HD Video Super-Resolution",
value=True,
info="Upscales 480p/640p video to crystal clear 1080p Full HD using CUDA FP16 TensorRT."
)
vip_rife_enhance_face_checkbox = gr.Checkbox(
label="👤 VIP Temporal Video Face Sharpening",
value=False,
info="Applies per-frame facial detail restoration via GFPGAN v1.4."
)
with gr.Row():
vip_rife_multiplier_radio = gr.Radio(
choices=["2x (32 FPS / 2x Duration)", "4x (64 FPS / 4x Duration)"],
value="2x (32 FPS / 2x Duration)",
label="🚀 VIP RIFE Multiplier",
scale=3
)
vip_rife_mode_dropdown = gr.Dropdown(
choices=[
"High-FPS Motion Smoothness (FPS Boost)",
"Slow-Motion / Extend Duration (Multiplied Seconds)"
],
value="High-FPS Motion Smoothness (FPS Boost)",
label="⚙️ VIP RIFE Output Mode",
scale=3
)
vip_standalone_enhance_btn = gr.Button("💎 Run VIP Remote GPU RIFE & 1080p HD Upscaler", variant="primary")
vip_standalone_video_output = gr.Video(label="📹 Enhanced 1080p HD VIP Video Result", interactive=False)
with gr.Accordion("⚙️ Advanced Settings", open=False):
custom_filename_input = gr.Textbox(
label="Output Filename (Optional)",
placeholder="e.g.: my_generated_video_01",
value="",
info="Saved as .mp4 format automatically."
)
negative_prompt_input = gr.Textbox(label="Negative Prompt", value=config.default_negative_prompt, lines=3, max_lines=6)
with gr.Row():
quality_slider = gr.Slider(minimum=1, maximum=10, step=1, value=6, label="Video Quality Grade")
steps_slider = gr.Slider(minimum=1, maximum=30, step=1, value=4, label="Inference Steps")
with gr.Row():
seed_input = gr.Slider(label="Seed", minimum=0, maximum=config.MAX_SEED, step=1, value=42, interactive=True)
randomize_seed_checkbox = gr.Checkbox(label="🎲 Randomize seed", value=True, interactive=True)
with gr.Row():
guidance_scale_input = gr.Slider(minimum=0.0, maximum=10.0, step=0.5, value=1, label="Guidance Scale")
guidance_scale_2_input = gr.Slider(minimum=0.0, maximum=10.0, step=0.5, value=1, label="Guidance Scale 2")
with gr.Row():
scheduler_dropdown = gr.Dropdown(
label="Scheduler",
choices=list(config.SCHEDULER_MAP.keys()),
value="UniPCMultistep"
)
flow_shift_slider = gr.Slider(minimum=0.5, maximum=15.0, step=0.1, value=3.0, label="Flow Shift")
def validate_master_vip_key(user_key):
vip_secret = (config.VIP_PASS or os.environ.get("VIP_PASSWORD", "")).strip()
user_key_str = (user_key or "").strip()
if vip_secret and user_key_str != vip_secret:
status_html = """
<div style="background: rgba(239, 68, 68, 0.15); border: 1px solid #ef4444; border-radius: 10px; padding: 10px 14px; color: #f87171; font-weight: 700; margin-top: 6px;">
❌ <b>Invalid VIP Password Key!</b> Access Denied.
</div>
"""
return gr.update(visible=False), status_html
status_html = """
<div style="background: rgba(16, 185, 129, 0.15); border: 1px solid #10b981; border-radius: 10px; padding: 10px 14px; color: #34d399; font-weight: 700; margin-top: 6px;">
✅ <b>VIP Key Authorized Successfully!</b> All Remote GPU & Advanced Settings Unlocked.
</div>
"""
return gr.update(visible=True), status_html
validate_vip_key_btn.click(
fn=validate_master_vip_key,
inputs=[vip_master_password_input],
outputs=[vip_content_group, vip_auth_status_box]
)
vip_send_output_video_btn.click(
fn=lambda v: v,
inputs=[output_video],
outputs=[vip_standalone_video_input]
)
def run_standalone_vip_rife_enhance(video_path, multiplier, slow_motion, upscale, enhance_face, password):
if not video_path or not os.path.exists(video_path):
raise gr.Error("Please upload or load a video file to enhance first.")
vip_secret = (config.VIP_PASS or os.environ.get("VIP_PASSWORD", "")).strip()
if vip_secret and (password or "").strip() != vip_secret:
raise gr.Error("❌ Invalid VIP Password Access Key!")
mult_val = 2
if "4x" in str(multiplier):
mult_val = 4
elif "8x" in str(multiplier):
mult_val = 8
is_slow_mo = ("Slow-Motion" in str(slow_motion)) or ("Duration" in str(slow_motion))
res = rife_interp.call_sulphur_rife_api(
video_path=video_path,
multiplier=mult_val,
slow_motion=is_slow_mo,
upscale=upscale,
enhance_face=enhance_face
)
if not res or not os.path.exists(res):
raise gr.Error("Sulphur AI VIP Remote RIFE GPU Server is offline or returned an error.")
return res
vip_standalone_enhance_btn.click(
fn=run_standalone_vip_rife_enhance,
inputs=[
vip_standalone_video_input,
vip_rife_multiplier_radio,
vip_rife_mode_dropdown,
vip_rife_upscale_checkbox,
vip_rife_enhance_face_checkbox,
vip_master_password_input
],
outputs=[vip_standalone_video_output]
)
return {
"vip_master_password_input": vip_master_password_input,
"validate_vip_key_btn": validate_vip_key_btn,
"vip_auth_status_box": vip_auth_status_box,
"enable_vip_rife_checkbox": enable_vip_rife_checkbox,
"vip_rife_multiplier_radio": vip_rife_multiplier_radio,
"vip_rife_mode_dropdown": vip_rife_mode_dropdown,
"vip_rife_upscale_checkbox": vip_rife_upscale_checkbox,
"vip_rife_enhance_face_checkbox": vip_rife_enhance_face_checkbox,
"vip_standalone_video_input": vip_standalone_video_input,
"vip_send_output_video_btn": vip_send_output_video_btn,
"vip_standalone_enhance_btn": vip_standalone_enhance_btn,
"vip_standalone_video_output": vip_standalone_video_output,
"custom_filename_input": custom_filename_input,
"negative_prompt_input": negative_prompt_input,
"quality_slider": quality_slider,
"steps_slider": steps_slider,
"seed_input": seed_input,
"randomize_seed_checkbox": randomize_seed_checkbox,
"guidance_scale_input": guidance_scale_input,
"guidance_scale_2_input": guidance_scale_2_input,
"scheduler_dropdown": scheduler_dropdown,
"flow_shift_slider": flow_shift_slider
}
|