Spaces:
Running
on
Zero
Running
on
Zero
Commit
Β·
ecf2c6b
1
Parent(s):
7ee7e08
Minor finalization changes.
Browse files
app.py
CHANGED
|
@@ -110,17 +110,19 @@ default_negative_prompt = "Static image, no motion, blurred details, overexposed
|
|
| 110 |
|
| 111 |
# --- LoRA Preset Helper Functions ---
|
| 112 |
def parse_lset_prompt(lset_prompt):
|
| 113 |
-
"""Parses a .lset prompt, resolving variables
|
| 114 |
# Find all variable declarations like ! {Subject}="woman"
|
| 115 |
variables = dict(re.findall(r'! \{(\w+)\}="([^"]+)"', lset_prompt))
|
| 116 |
|
| 117 |
# Remove the declaration lines to get the clean prompt template
|
| 118 |
prompt_template = re.sub(r'! \{\w+\}="[^"]+"\n?', '', lset_prompt).strip()
|
| 119 |
|
| 120 |
-
# Replace placeholders with their default values
|
| 121 |
resolved_prompt = prompt_template
|
| 122 |
for key, value in variables.items():
|
| 123 |
-
|
|
|
|
|
|
|
| 124 |
|
| 125 |
return resolved_prompt
|
| 126 |
|
|
@@ -152,8 +154,9 @@ def handle_lora_selection_change(preset_name, current_prompt):
|
|
| 152 |
return gr.update()
|
| 153 |
|
| 154 |
resolved_prompt = parse_lset_prompt(lset_prompt_raw)
|
| 155 |
-
|
| 156 |
-
|
|
|
|
| 157 |
return gr.update(value=new_prompt)
|
| 158 |
except Exception as e:
|
| 159 |
# This should be less common now, but good to keep for safety.
|
|
@@ -333,7 +336,17 @@ def generate_i2v_video(input_image, prompt, height, width,
|
|
| 333 |
with gr.Blocks() as demo:
|
| 334 |
with gr.Column(elem_classes=["main-container"]):
|
| 335 |
i2v_aspect_ratio = gr.State(value=DEFAULT_W_SLIDER_VALUE / DEFAULT_H_SLIDER_VALUE)
|
| 336 |
-
gr.Markdown("#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 337 |
|
| 338 |
with gr.Tabs(elem_classes=["gr-tabs"]):
|
| 339 |
# --- Image-to-Video Tab ---
|
|
@@ -345,6 +358,7 @@ with gr.Blocks() as demo:
|
|
| 345 |
label="πΌοΈ Input Image (auto-resizes H/W sliders)",
|
| 346 |
elem_classes=["image-upload"]
|
| 347 |
)
|
|
|
|
| 348 |
i2v_prompt = gr.Textbox(
|
| 349 |
label="βοΈ Prompt",
|
| 350 |
value=default_prompt_i2v, lines=3
|
|
@@ -359,7 +373,6 @@ with gr.Blocks() as demo:
|
|
| 359 |
i2v_neg_prompt = gr.Textbox(label="β Negative Prompt", value=default_negative_prompt, lines=4)
|
| 360 |
i2v_seed = gr.Slider(label="π² Seed", minimum=0, maximum=MAX_SEED, step=1, value=42, interactive=True)
|
| 361 |
i2v_rand_seed = gr.Checkbox(label="π Randomize seed", value=True, interactive=True)
|
| 362 |
-
i2v_preset_name = gr.Dropdown(label="π¨ LoRA Preset", choices=available_i2v_presets, value="None", info="Select a preset to apply a LoRA and a suggested prompt.", interactive=len(available_i2v_presets) > 1)
|
| 363 |
i2v_lora_weight = gr.Slider(label="πͺ LoRA Weight", minimum=0.0, maximum=2.0, step=0.1, value=0.8, interactive=True)
|
| 364 |
with gr.Row():
|
| 365 |
i2v_height = gr.Slider(minimum=SLIDER_MIN_H, maximum=SLIDER_MAX_H, step=MOD_VALUE, value=DEFAULT_H_SLIDER_VALUE, label=f"π Height ({MOD_VALUE}px steps)")
|
|
|
|
| 110 |
|
| 111 |
# --- LoRA Preset Helper Functions ---
|
| 112 |
def parse_lset_prompt(lset_prompt):
|
| 113 |
+
"""Parses a .lset prompt, resolving variables and highlighting them."""
|
| 114 |
# Find all variable declarations like ! {Subject}="woman"
|
| 115 |
variables = dict(re.findall(r'! \{(\w+)\}="([^"]+)"', lset_prompt))
|
| 116 |
|
| 117 |
# Remove the declaration lines to get the clean prompt template
|
| 118 |
prompt_template = re.sub(r'! \{\w+\}="[^"]+"\n?', '', lset_prompt).strip()
|
| 119 |
|
| 120 |
+
# Replace placeholders with their default values, highlighted with markdown
|
| 121 |
resolved_prompt = prompt_template
|
| 122 |
for key, value in variables.items():
|
| 123 |
+
# Highlight the default value to indicate it's a replaceable variable
|
| 124 |
+
highlighted_value = f"__{value}__"
|
| 125 |
+
resolved_prompt = resolved_prompt.replace(f"{{{key}}}", highlighted_value)
|
| 126 |
|
| 127 |
return resolved_prompt
|
| 128 |
|
|
|
|
| 154 |
return gr.update()
|
| 155 |
|
| 156 |
resolved_prompt = parse_lset_prompt(lset_prompt_raw)
|
| 157 |
+
# Append with newlines for separation. If current prompt is empty, strip() handles it.
|
| 158 |
+
new_prompt = f"{current_prompt}\n\n{resolved_prompt}".strip()
|
| 159 |
+
gr.Info(f"β
Appended prompt from '{lset_filename}'. Replace highlighted text like __this__.")
|
| 160 |
return gr.update(value=new_prompt)
|
| 161 |
except Exception as e:
|
| 162 |
# This should be less common now, but good to keep for safety.
|
|
|
|
| 336 |
with gr.Blocks() as demo:
|
| 337 |
with gr.Column(elem_classes=["main-container"]):
|
| 338 |
i2v_aspect_ratio = gr.State(value=DEFAULT_W_SLIDER_VALUE / DEFAULT_H_SLIDER_VALUE)
|
| 339 |
+
gr.Markdown("# Wan 2.1 Video Suite with Dynamic LoRA Presets")
|
| 340 |
+
gr.Markdown(
|
| 341 |
+
"""
|
| 342 |
+
Welcome! This space allows you to generate videos from images using the powerful Wan 2.1 model, enhanced with dynamic LoRA presets.
|
| 343 |
+
|
| 344 |
+
**How to use:**
|
| 345 |
+
1. Start in the **Image-to-Video** tab and upload your starting image.
|
| 346 |
+
2. Select a **LoRA Preset** from the dropdown to apply a unique style and automatically add a suggested prompt.
|
| 347 |
+
3. Customize the prompt, adjust settings like duration and resolution, and click **Generate I2V**!
|
| 348 |
+
"""
|
| 349 |
+
)
|
| 350 |
|
| 351 |
with gr.Tabs(elem_classes=["gr-tabs"]):
|
| 352 |
# --- Image-to-Video Tab ---
|
|
|
|
| 358 |
label="πΌοΈ Input Image (auto-resizes H/W sliders)",
|
| 359 |
elem_classes=["image-upload"]
|
| 360 |
)
|
| 361 |
+
i2v_preset_name = gr.Dropdown(label="π¨ LoRA Preset", choices=available_i2v_presets, value="None", info="Select a preset to apply a LoRA and a suggested prompt.", interactive=len(available_i2v_presets) > 1)
|
| 362 |
i2v_prompt = gr.Textbox(
|
| 363 |
label="βοΈ Prompt",
|
| 364 |
value=default_prompt_i2v, lines=3
|
|
|
|
| 373 |
i2v_neg_prompt = gr.Textbox(label="β Negative Prompt", value=default_negative_prompt, lines=4)
|
| 374 |
i2v_seed = gr.Slider(label="π² Seed", minimum=0, maximum=MAX_SEED, step=1, value=42, interactive=True)
|
| 375 |
i2v_rand_seed = gr.Checkbox(label="π Randomize seed", value=True, interactive=True)
|
|
|
|
| 376 |
i2v_lora_weight = gr.Slider(label="πͺ LoRA Weight", minimum=0.0, maximum=2.0, step=0.1, value=0.8, interactive=True)
|
| 377 |
with gr.Row():
|
| 378 |
i2v_height = gr.Slider(minimum=SLIDER_MIN_H, maximum=SLIDER_MAX_H, step=MOD_VALUE, value=DEFAULT_H_SLIDER_VALUE, label=f"π Height ({MOD_VALUE}px steps)")
|