Opera8 commited on
Commit
2933bfe
·
verified ·
1 Parent(s): b4d1071

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +43 -30
app.py CHANGED
@@ -2461,38 +2461,49 @@ def apply_example(idx: str):
2461
 
2462
  # --- توابع کنترل کننده (بدون وابستگی محلی) ---
2463
 
2464
- def ui_lock_and_enhance(first_frame, prompt, mode):
2465
  """
2466
- مرحله ۱: قفل کردن UI و اجرای بهینه سازی روی CPU
2467
  """
2468
- yield (
2469
- gr.Button(value="⏳ در حال بهینه سازی پرامپت (CPU)...", interactive=False),
2470
- gr.update(),
2471
- gr.update(),
2472
- None
2473
- )
2474
-
2475
- enhanced = enhance_prompt_on_cpu(first_frame, prompt, mode)
2476
-
2477
- yield (
2478
- gr.Button(value="🚀 در حال ساخت ویدیو (GPU)...", interactive=False),
2479
- gr.update(value=enhanced),
2480
- enhanced,
2481
- None
2482
- )
 
 
 
 
 
 
 
 
 
2483
 
2484
  @spaces.GPU(duration=get_duration)
2485
  def ui_generate_video(
2486
  first_frame, end_frame, enhanced_prompt, duration, input_video,
2487
- radioanimated_mode, enhance_prompt_flag, seed, randomize_seed,
2488
  height, width, camera_lora, audio_input, progress=gr.Progress(track_tqdm=True)
2489
  ):
2490
  """
2491
  مرحله ۲: ساخت ویدیو با استفاده از GPU
2492
  """
 
 
2493
  video_path = generate_video(
2494
  first_frame, end_frame, enhanced_prompt, duration, input_video,
2495
- radioanimated_mode, enhance_prompt_flag, seed, randomize_seed,
2496
  height, width, camera_lora, audio_input, progress
2497
  )
2498
  return (
@@ -2636,20 +2647,16 @@ with gr.Blocks(title="LTX-2 Video Distilled 🎥🔈") as demo:
2636
  audio_ui = AudioDropUpload(target_audio_elem_id="audio_input_hidden", elem_id="audio_ui")
2637
  prompt = gr.Textbox(label="Prompt", value="این تصویر را با حرکت سینمایی و انیمیشن روان زنده کن", lines=3, max_lines=3, visible=False)
2638
 
2639
- enhance_prompt_flag_input = gr.Checkbox(label="Enhance Prompt", value=False, visible=False)
2640
-
2641
  with gr.Accordion("تنظیمات پیشرفته", open=False, visible=False):
2642
  seed = gr.Slider(label="سید (Seed)", minimum=0, maximum=MAX_SEED, value=DEFAULT_SEED, step=1)
2643
  randomize_seed = gr.Checkbox(label="استفاده از سید تصادفی", value=True)
2644
 
2645
  with gr.Column(elem_id="step-column"):
2646
- # پارامتر interactive=False در اینجا اضافه شد تا امکان آپلود غیرفعال شود
2647
  output_video = gr.Video(label="ویدیوی ساخته شده", autoplay=True, height=512, interactive=False)
2648
  with gr.Row():
2649
  download_btn = gr.Button("📥 دانلود ویدیو", variant="secondary", size="sm", scale=0, visible=False)
2650
  with gr.Row(elem_id="controls-row"):
2651
- # ۸ ثانیه به لیست اضافه شد
2652
- duration_ui = CameraDropdown(choices=["3s", "5s", "8s", "10s"], value="5s", title="مدت زمان ویدیو", elem_id="duration_ui")
2653
  duration = gr.Slider(label="Duration (seconds)", minimum=1.0, maximum=10.0, value=5.0, step=0.1, visible=False)
2654
  ICON_16_9, ICON_1_1, ICON_9_16 = ("<svg viewBox='0 0 24 24' fill='none' aria-hidden='true'><rect x='3' y='7' width='18' height='10' rx='2' stroke='currentColor' stroke-width='2'/></svg>", "<svg viewBox='0 0 24 24' fill='none' aria-hidden='true'><rect x='6' y='6' width='12' height='12' rx='2' stroke='currentColor' stroke-width='2'/></svg>", "<svg viewBox='0 0 24 24' fill='none' aria-hidden='true'><rect x='7' y='3' width='10' height='18' rx='2' stroke='currentColor' stroke-width='2'/></svg>")
2655
  resolution_ui = CameraDropdown(choices=[{"label": "16:9", "value": "16:9", "icon": ICON_16_9}, {"label": "1:1", "value": "1:1", "icon": ICON_1_1}, {"label": "9:16", "value": "9:16", "icon": ICON_9_16}], value="16:9", title="ابعاد تصویر", elem_id="resolution_ui")
@@ -2658,9 +2665,17 @@ with gr.Blocks(title="LTX-2 Video Distilled 🎥🔈") as demo:
2658
  camera_ui = CameraDropdown(choices=[name for name, _ in VISIBLE_RUNTIME_LORA_CHOICES], value="No LoRA", title="افکت دوربین (LoRA)", elem_id="camera_ui")
2659
  camera_lora = gr.Dropdown(label="Camera Control LoRA", choices=[name for name, _ in VISIBLE_RUNTIME_LORA_CHOICES], value="No LoRA", visible=False)
2660
 
 
 
 
 
 
 
 
 
 
2661
  generate_btn = gr.Button("🤩 ساخت ویدیو", variant="primary", elem_classes="button-gradient", elem_id="generate_btn")
2662
 
2663
- # توجه مهم: این دکمه دیگر visible=False نیست تا از DOM حذف نشود. توسط CSS بالا مخفی شده است.
2664
  reset_btn = gr.Button("Reset", elem_id="reset_btn")
2665
 
2666
  # اتصال رویدادها
@@ -2672,8 +2687,6 @@ with gr.Blocks(title="LTX-2 Video Distilled 🎥🔈") as demo:
2672
  audio_ui.change(fn=lambda v: None if v == "__CLEAR__" or not v else gr.update(), inputs=audio_ui, outputs=audio_input, api_visibility="private")
2673
  download_btn.click(fn=None, inputs=[output_video], js=js_download_video)
2674
 
2675
- # *** رویداد جادویی برای شکستن قفل گاردریو ***
2676
- # پارامتر queue=False باعث می‌شود اگر گاردریو در صف گیر کرده باشد، این دستور معطل نشود و فوراً اجرا شود
2677
  reset_btn.click(
2678
  fn=lambda: gr.Button(value="🤩 ساخت ویدیو", interactive=True),
2679
  inputs=[],
@@ -2682,16 +2695,16 @@ with gr.Blocks(title="LTX-2 Video Distilled 🎥🔈") as demo:
2682
  queue=False
2683
  )
2684
 
2685
- # زنجیره اصلی ساخت ویدیو
2686
  generate_btn.click(
2687
  fn=ui_lock_and_enhance,
2688
- inputs=[first_frame, prompt, radioanimated_mode],
2689
  outputs=[generate_btn, prompt_ui, prompt, output_video]
2690
  ).then(
2691
  fn=ui_generate_video,
2692
  inputs=[
2693
  first_frame, end_frame, prompt,
2694
- duration, input_video, radioanimated_mode, enhance_prompt_flag_input,
2695
  seed, randomize_seed, height, width, camera_lora, audio_input
2696
  ],
2697
  outputs=[generate_btn, output_video, download_btn]
 
2461
 
2462
  # --- توابع کنترل کننده (بدون وابستگی محلی) ---
2463
 
2464
+ def ui_lock_and_enhance(first_frame, prompt, mode, enhance_toggle):
2465
  """
2466
+ مرحله ۱: قفل کردن UI و بررسی اینکه آیا پرامپت نیاز به بهینهسازی دارد یا خیر
2467
  """
2468
+ if enhance_toggle == "✨ دستور بهینه شود":
2469
+ yield (
2470
+ gr.Button(value="⏳ در حال بهینه سازی پرامپت (CPU)...", interactive=False),
2471
+ gr.update(),
2472
+ gr.update(),
2473
+ None
2474
+ )
2475
+
2476
+ enhanced = enhance_prompt_on_cpu(first_frame, prompt, mode)
2477
+
2478
+ yield (
2479
+ gr.Button(value="🚀 در حال ساخت ویدیو (GPU)...", interactive=False),
2480
+ gr.update(value=enhanced),
2481
+ enhanced,
2482
+ None
2483
+ )
2484
+ else:
2485
+ # اگر کاربر نخواست پرامپت بهینه شود، مستقیما به مرحله تولید می‌رویم
2486
+ yield (
2487
+ gr.Button(value="🚀 در حال ساخت ویدیو (GPU)...", interactive=False),
2488
+ gr.update(value=prompt),
2489
+ prompt,
2490
+ None
2491
+ )
2492
 
2493
  @spaces.GPU(duration=get_duration)
2494
  def ui_generate_video(
2495
  first_frame, end_frame, enhanced_prompt, duration, input_video,
2496
+ radioanimated_mode, enhance_toggle, seed, randomize_seed,
2497
  height, width, camera_lora, audio_input, progress=gr.Progress(track_tqdm=True)
2498
  ):
2499
  """
2500
  مرحله ۲: ساخت ویدیو با استفاده از GPU
2501
  """
2502
+ # پارامتر enhance_prompt (که مقدار آن False داده شده) برای جلوگیری از اعمال بهینه‌ساز داخلی روی GPU است،
2503
+ # چون ما قبلا در مرحله قبل (CPU) این کار را طبق خواسته کاربر انجام داده‌ایم.
2504
  video_path = generate_video(
2505
  first_frame, end_frame, enhanced_prompt, duration, input_video,
2506
+ radioanimated_mode, False, seed, randomize_seed,
2507
  height, width, camera_lora, audio_input, progress
2508
  )
2509
  return (
 
2647
  audio_ui = AudioDropUpload(target_audio_elem_id="audio_input_hidden", elem_id="audio_ui")
2648
  prompt = gr.Textbox(label="Prompt", value="این تصویر را با حرکت سینمایی و انیمیشن روان زنده کن", lines=3, max_lines=3, visible=False)
2649
 
 
 
2650
  with gr.Accordion("تنظیمات پیشرفته", open=False, visible=False):
2651
  seed = gr.Slider(label="سید (Seed)", minimum=0, maximum=MAX_SEED, value=DEFAULT_SEED, step=1)
2652
  randomize_seed = gr.Checkbox(label="استفاده از سید تصادفی", value=True)
2653
 
2654
  with gr.Column(elem_id="step-column"):
 
2655
  output_video = gr.Video(label="ویدیوی ساخته شده", autoplay=True, height=512, interactive=False)
2656
  with gr.Row():
2657
  download_btn = gr.Button("📥 دانلود ویدیو", variant="secondary", size="sm", scale=0, visible=False)
2658
  with gr.Row(elem_id="controls-row"):
2659
+ duration_ui = CameraDropdown(choices=["3s", "5s", "7s", "10s"], value="5s", title="مدت زمان ویدیو", elem_id="duration_ui")
 
2660
  duration = gr.Slider(label="Duration (seconds)", minimum=1.0, maximum=10.0, value=5.0, step=0.1, visible=False)
2661
  ICON_16_9, ICON_1_1, ICON_9_16 = ("<svg viewBox='0 0 24 24' fill='none' aria-hidden='true'><rect x='3' y='7' width='18' height='10' rx='2' stroke='currentColor' stroke-width='2'/></svg>", "<svg viewBox='0 0 24 24' fill='none' aria-hidden='true'><rect x='6' y='6' width='12' height='12' rx='2' stroke='currentColor' stroke-width='2'/></svg>", "<svg viewBox='0 0 24 24' fill='none' aria-hidden='true'><rect x='7' y='3' width='10' height='18' rx='2' stroke='currentColor' stroke-width='2'/></svg>")
2662
  resolution_ui = CameraDropdown(choices=[{"label": "16:9", "value": "16:9", "icon": ICON_16_9}, {"label": "1:1", "value": "1:1", "icon": ICON_1_1}, {"label": "9:16", "value": "9:16", "icon": ICON_9_16}], value="16:9", title="ابعاد تصویر", elem_id="resolution_ui")
 
2665
  camera_ui = CameraDropdown(choices=[name for name, _ in VISIBLE_RUNTIME_LORA_CHOICES], value="No LoRA", title="افکت دوربین (LoRA)", elem_id="camera_ui")
2666
  camera_lora = gr.Dropdown(label="Camera Control LoRA", choices=[name for name, _ in VISIBLE_RUNTIME_LORA_CHOICES], value="No LoRA", visible=False)
2667
 
2668
+ # اضافه کردن سوییچ متحرک به شکل قرص برای تنظیمات پرامپت دقیقاً بالای دکمه تولید
2669
+ gr.HTML("<style>#enhance-toggle-row { display: flex; justify-content: center; margin-bottom: 15px; margin-top: 5px; width: 100%; }</style>")
2670
+ with gr.Row(elem_id="enhance-toggle-row"):
2671
+ enhance_toggle = RadioAnimated(
2672
+ choices=["✨ دستور بهینه شود", "✋ دستور بهینه نشود"],
2673
+ value="✨ دستور بهینه شود",
2674
+ elem_id="enhance_toggle"
2675
+ )
2676
+
2677
  generate_btn = gr.Button("🤩 ساخت ویدیو", variant="primary", elem_classes="button-gradient", elem_id="generate_btn")
2678
 
 
2679
  reset_btn = gr.Button("Reset", elem_id="reset_btn")
2680
 
2681
  # اتصال رویدادها
 
2687
  audio_ui.change(fn=lambda v: None if v == "__CLEAR__" or not v else gr.update(), inputs=audio_ui, outputs=audio_input, api_visibility="private")
2688
  download_btn.click(fn=None, inputs=[output_video], js=js_download_video)
2689
 
 
 
2690
  reset_btn.click(
2691
  fn=lambda: gr.Button(value="🤩 ساخت ویدیو", interactive=True),
2692
  inputs=[],
 
2695
  queue=False
2696
  )
2697
 
2698
+ # زنجیره اصلی ساخت ویدیو - حالا از مقدار کلید enhance_toggle استفاده می‌کند
2699
  generate_btn.click(
2700
  fn=ui_lock_and_enhance,
2701
+ inputs=[first_frame, prompt, radioanimated_mode, enhance_toggle],
2702
  outputs=[generate_btn, prompt_ui, prompt, output_video]
2703
  ).then(
2704
  fn=ui_generate_video,
2705
  inputs=[
2706
  first_frame, end_frame, prompt,
2707
+ duration, input_video, radioanimated_mode, enhance_toggle,
2708
  seed, randomize_seed, height, width, camera_lora, audio_input
2709
  ],
2710
  outputs=[generate_btn, output_video, download_btn]