LTTEAM commited on
Commit
31a3b89
·
verified ·
1 Parent(s): 303ebf1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +34 -20
app.py CHANGED
@@ -1,20 +1,30 @@
1
- import os, shutil
 
 
2
  import gradio as gr
3
  from runner import AutomationRunner
4
 
5
- # đảm bảo thư mục output luôn sạch
6
- def clean_outputs():
7
- if os.path.exists("outputs"):
8
- shutil.rmtree("outputs")
9
- os.makedirs("outputs", exist_ok=True)
10
- os.makedirs("images", exist_ok=True)
11
 
12
- def run_automation(prompts, avatar, headless, wait_time, mode):
13
- clean_outputs()
14
- # lưu prompt
 
 
 
 
 
 
 
 
 
 
 
 
15
  with open("input.txt", "w", encoding="utf-8") as f:
16
  f.write(prompts)
17
 
 
18
  avatar_path = None
19
  if avatar is not None:
20
  avatar.save(os.path.join("images", avatar.name))
@@ -24,6 +34,7 @@ def run_automation(prompts, avatar, headless, wait_time, mode):
24
  def log_cb(msg):
25
  logs.append(msg)
26
 
 
27
  runner = AutomationRunner(
28
  headless=headless,
29
  wait_time=wait_time,
@@ -34,27 +45,30 @@ def run_automation(prompts, avatar, headless, wait_time, mode):
34
  )
35
  runner.run()
36
 
37
- # collect kết quả
38
- videos = sorted([os.path.join("outputs",f) for f in os.listdir("outputs") if f.endswith(".mp4")])
39
- return logs, videos
 
 
40
 
41
  with gr.Blocks() as demo:
42
  gr.Markdown("## HaiLuo AI Video Automation")
43
  with gr.Row():
44
- with gr.Column():
45
- prompts = gr.Textbox(lines=8, label="Nhập các Scene (mỗi dòng 'Scene X: ...')", value="Scene 1: ")
46
- avatar = gr.File(label="Ảnh nhân vật (tuỳ chọn)")
 
47
  mode = gr.Radio(["subject","text"], label="Chế độ", value="subject")
48
  headless = gr.Checkbox(label="Chạy headless", value=True)
49
  wait_time = gr.Slider(60, 1800, value=600, step=30, label="Thời gian chờ (giây)")
50
  run_btn = gr.Button("🚀 Chạy Automation")
51
- with gr.Column():
52
  log_output = gr.Textbox(lines=15, label="Logs", interactive=False)
53
- video_files = gr.File(label="Video đầu ra", file_count="multiple")
54
  run_btn.click(
55
  run_automation,
56
- inputs=[prompts, avatar, headless, wait_time, mode],
57
- outputs=[log_output, video_files]
58
  )
59
 
60
  if __name__ == "__main__":
 
1
+ # app.py
2
+ import os
3
+ import shutil
4
  import gradio as gr
5
  from runner import AutomationRunner
6
 
7
+ COOKIES_FILE = "cookies.json"
 
 
 
 
 
8
 
9
+ def clean_workspace():
10
+ for d in ("outputs", "images"):
11
+ if os.path.exists(d):
12
+ shutil.rmtree(d)
13
+ os.makedirs(d, exist_ok=True)
14
+
15
+ def run_automation(prompts, avatar, cookies_file, headless, wait_time, mode):
16
+ clean_workspace()
17
+
18
+ # 1) Lưu cookies.json nếu user upload
19
+ if cookies_file is not None:
20
+ # cookies_file.name là đường dẫn tạm tới file upload
21
+ shutil.copy(cookies_file.name, COOKIES_FILE)
22
+
23
+ # 2) Ghi prompt vào input.txt
24
  with open("input.txt", "w", encoding="utf-8") as f:
25
  f.write(prompts)
26
 
27
+ # 3) Lưu ảnh nhân vật nếu có
28
  avatar_path = None
29
  if avatar is not None:
30
  avatar.save(os.path.join("images", avatar.name))
 
34
  def log_cb(msg):
35
  logs.append(msg)
36
 
37
+ # 4) Run automation
38
  runner = AutomationRunner(
39
  headless=headless,
40
  wait_time=wait_time,
 
45
  )
46
  runner.run()
47
 
48
+ # 5) Thu thập video đầu ra
49
+ videos = sorted(
50
+ [os.path.join("outputs", f) for f in os.listdir("outputs") if f.endswith(".mp4")]
51
+ )
52
+ return "\n".join(logs), videos
53
 
54
  with gr.Blocks() as demo:
55
  gr.Markdown("## HaiLuo AI Video Automation")
56
  with gr.Row():
57
+ with gr.Column(scale=2):
58
+ prompts = gr.Textbox(lines=8, label="Nhập các Scene (mỗi dòng `Scene X: ...`)", value="Scene 1: ")
59
+ avatar = gr.File(label="Ảnh nhân vật (tuỳ chọn)", file_count=1, file_types=["image"])
60
+ cookies_file = gr.File(label="Upload cookies.json (bắt buộc lần đầu)", file_count=1, file_types=[".json"])
61
  mode = gr.Radio(["subject","text"], label="Chế độ", value="subject")
62
  headless = gr.Checkbox(label="Chạy headless", value=True)
63
  wait_time = gr.Slider(60, 1800, value=600, step=30, label="Thời gian chờ (giây)")
64
  run_btn = gr.Button("🚀 Chạy Automation")
65
+ with gr.Column(scale=1):
66
  log_output = gr.Textbox(lines=15, label="Logs", interactive=False)
67
+ video_out = gr.File(label="Download Videos", file_count="multiple")
68
  run_btn.click(
69
  run_automation,
70
+ inputs=[prompts, avatar, cookies_file, headless, wait_time, mode],
71
+ outputs=[log_output, video_out]
72
  )
73
 
74
  if __name__ == "__main__":