qqwjq1981 commited on
Commit
8a82434
·
verified ·
1 Parent(s): 0e9362b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +21 -30
app.py CHANGED
@@ -4,7 +4,7 @@ import math
4
  import gradio as gr
5
  from PIL import Image, ImageDraw
6
  import os
7
- from utils.keyframe_utils import generate_keyframe_prompt
8
 
9
  # Load segments JSON
10
  def load_segments():
@@ -18,44 +18,27 @@ def get_keyframe_images(segment_id):
18
  for i in range(1, 4):
19
  img_path = f"keyframes/segment_{segment_id}_v{i}.png"
20
  if os.path.exists(img_path):
21
- images.append(Image.open(img_path))
22
  else:
23
- images.append(Image.new("RGB", (256, 144), color=(200, 200, 200)))
 
 
 
24
  return images
25
 
26
-
27
  def segment_display(segment):
28
- """
29
- Format one row for Gradio display:
30
- - Truncate and wrap description
31
- - Load and resize keyframe images to thumbnail size
32
- """
33
  seg_id = segment.get("segment_id")
34
  description = segment.get("description", "")
35
  short_desc = description if len(description) <= 120 else description[:117] + "..."
36
 
37
- # Wrap long text with newlines every ~40 chars
38
  def wrap_text(text, width=40):
39
  return "\n".join([text[i:i+width] for i in range(0, len(text), width)])
40
 
41
  display_desc = wrap_text(short_desc)
42
-
43
  row = [f"Segment {seg_id}", display_desc]
44
-
45
- for i in range(1, 4):
46
- img_path = f"keyframes/segment_{seg_id}_v{i}.png"
47
- if os.path.exists(img_path):
48
- img = Image.open(img_path).resize((128, 72))
49
- else:
50
- # Placeholder if not found
51
- img = Image.new("RGB", (128, 72), color=(200, 200, 200))
52
- draw = ImageDraw.Draw(img)
53
- draw.text((10, 30), "No Image", fill=(0, 0, 0))
54
- row.append(img)
55
-
56
  return row
57
 
58
- # Pagination logic
59
  def paginate_segments(page=1, page_size=15):
60
  segments = load_segments()
61
  total = len(segments)
@@ -68,14 +51,12 @@ def paginate_segments(page=1, page_size=15):
68
  data = [segment_display(seg) for seg in subset]
69
  return headers, data, max_page
70
 
71
- # Function to return downloadable JSON file
72
  def download_prompts():
73
  if os.path.exists("all_prompts_output.json"):
74
  return "all_prompts_output.json"
75
  else:
76
  return None
77
 
78
- # Gradio interface
79
  def build_interface():
80
  with gr.Blocks() as demo:
81
  gr.Markdown("## 🎬 Keyframe Candidate Viewer")
@@ -91,15 +72,25 @@ def build_interface():
91
  headers, rows, max_page = paginate_segments(page)
92
  return gr.update(headers=headers, value=rows), f"Page {page} of {max_page}", page
93
 
94
- prev_btn = gr.Button("⬅ Prev")
95
- next_btn = gr.Button("Next ➡")
 
 
 
 
 
 
 
96
 
97
- table.change(fn=lambda: None, inputs=[], outputs=[])
98
  prev_btn.click(fn=lambda p: max(1, p - 1), inputs=page_state, outputs=page_state).then(update, inputs=page_state, outputs=[table, total_pages_text, page_state])
99
  next_btn.click(fn=lambda p: p + 1, inputs=page_state, outputs=page_state).then(update, inputs=page_state, outputs=[table, total_pages_text, page_state])
100
 
101
  demo.load(fn=update, inputs=page_state, outputs=[table, total_pages_text, page_state])
102
 
 
 
 
 
103
  gr.Markdown("### 📥 下载所有生成的图像提示词")
104
  with gr.Row():
105
  download_btn = gr.Button("📥 导出 prompts JSON")
@@ -110,4 +101,4 @@ def build_interface():
110
 
111
  if __name__ == "__main__":
112
  demo = build_interface()
113
- demo.launch()
 
4
  import gradio as gr
5
  from PIL import Image, ImageDraw
6
  import os
7
+ from utils.keyframe_utils import generate_keyframe_prompt, generate_all_keyframe_images
8
 
9
  # Load segments JSON
10
  def load_segments():
 
18
  for i in range(1, 4):
19
  img_path = f"keyframes/segment_{segment_id}_v{i}.png"
20
  if os.path.exists(img_path):
21
+ images.append(Image.open(img_path).resize((128, 72)))
22
  else:
23
+ img = Image.new("RGB", (128, 72), color=(200, 200, 200))
24
+ draw = ImageDraw.Draw(img)
25
+ draw.text((10, 30), "No Image", fill=(0, 0, 0))
26
+ images.append(img)
27
  return images
28
 
 
29
  def segment_display(segment):
 
 
 
 
 
30
  seg_id = segment.get("segment_id")
31
  description = segment.get("description", "")
32
  short_desc = description if len(description) <= 120 else description[:117] + "..."
33
 
 
34
  def wrap_text(text, width=40):
35
  return "\n".join([text[i:i+width] for i in range(0, len(text), width)])
36
 
37
  display_desc = wrap_text(short_desc)
 
38
  row = [f"Segment {seg_id}", display_desc]
39
+ row.extend(get_keyframe_images(seg_id))
 
 
 
 
 
 
 
 
 
 
 
40
  return row
41
 
 
42
  def paginate_segments(page=1, page_size=15):
43
  segments = load_segments()
44
  total = len(segments)
 
51
  data = [segment_display(seg) for seg in subset]
52
  return headers, data, max_page
53
 
 
54
  def download_prompts():
55
  if os.path.exists("all_prompts_output.json"):
56
  return "all_prompts_output.json"
57
  else:
58
  return None
59
 
 
60
  def build_interface():
61
  with gr.Blocks() as demo:
62
  gr.Markdown("## 🎬 Keyframe Candidate Viewer")
 
72
  headers, rows, max_page = paginate_segments(page)
73
  return gr.update(headers=headers, value=rows), f"Page {page} of {max_page}", page
74
 
75
+ def generate_and_refresh():
76
+ segments = load_segments()
77
+ generate_all_keyframe_images(segments)
78
+ return update(1)
79
+
80
+ with gr.Row():
81
+ with gr.Row(elem_id="page-controls"):
82
+ prev_btn = gr.Button("⬅", size="sm")
83
+ next_btn = gr.Button("➡", size="sm")
84
 
 
85
  prev_btn.click(fn=lambda p: max(1, p - 1), inputs=page_state, outputs=page_state).then(update, inputs=page_state, outputs=[table, total_pages_text, page_state])
86
  next_btn.click(fn=lambda p: p + 1, inputs=page_state, outputs=page_state).then(update, inputs=page_state, outputs=[table, total_pages_text, page_state])
87
 
88
  demo.load(fn=update, inputs=page_state, outputs=[table, total_pages_text, page_state])
89
 
90
+ gr.Markdown("### 🖼️ 生成所有分镜的关键帧图像")
91
+ generate_btn = gr.Button("🛠️ 一键生成图像")
92
+ generate_btn.click(fn=generate_and_refresh, outputs=[table, total_pages_text, page_state])
93
+
94
  gr.Markdown("### 📥 下载所有生成的图像提示词")
95
  with gr.Row():
96
  download_btn = gr.Button("📥 导出 prompts JSON")
 
101
 
102
  if __name__ == "__main__":
103
  demo = build_interface()
104
+ demo.launch()