Skip to content

Commit 91dc338

Browse files
authored
Add files via upload
1 parent 1563ebc commit 91dc338

File tree

3 files changed

+444
-317
lines changed

3 files changed

+444
-317
lines changed

rope/GUI.py

+100-48
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ def __init__( self ):
3232
self.fake_diff_int = tk.IntVar()
3333
self.CLIP_int = tk.IntVar()
3434
self.video_loaded = False
35+
self.occluder_int = tk.IntVar()
36+
self.dock = True
37+
self.undock = []
3538

3639
self.save_file = []
3740
self.json_dict = {"source videos":None, "source faces":None, "saved videos":None}
@@ -50,28 +53,35 @@ def __init__( self ):
5053
self.video.grid( row = 0, column = 0, columnspan = 3, sticky='NEWS', pady = 2 )
5154

5255
# Video button canvas
53-
self.video_button_canvas = tk.Canvas( self.video_frame, width = 110, height = 10, bg='grey50' )
56+
self.video_button_canvas = tk.Canvas( self.video_frame, width = 125, height = 10, bg='grey50' )
5457
self.video_button_canvas.grid( row = 1, column = 0, sticky='NEWS', pady = 5)
5558

59+
# Dock
60+
self.video_dock = tk.Button( self.video_button_canvas, bg='grey50', text="^^", wraplength=1, command=lambda: self.toggle_dock())
61+
self.video_dock.place(x=5, y=5, width = 15, height = 33)
62+
5663
# Video Swap
5764
self.video_swap = tk.Button( self.video_button_canvas, bg='grey50', text="SWP", command=lambda: self.toggle_swapper())
58-
self.video_swap.place(x=5, y=5, width = 33, height = 33)
65+
self.video_swap.place(x=22, y=5, width = 33, height = 33)
5966

6067
# Video Play
6168
self.video_play = tk.Button( self.video_button_canvas, bg='grey50', text="PLY", command=lambda: self.toggle_play_video())
62-
self.video_play.place(x=40, y=5, width = 33, height = 33)
69+
self.video_play.place(x=57, y=5, width = 33, height = 33)
6370

6471
# Video Record
6572
self.video_record = tk.Button( self.video_button_canvas, bg='grey50', text="REC", command=lambda: self.toggle_rec_video())
66-
self.video_record.place(x=75, y=5, width = 33, height = 33)
73+
self.video_record.place(x=92, y=5, width = 33, height = 33)
6774

6875
# Video Slider
6976
self.video_slider = tk.Scale( self.video_frame, orient='horizontal', bg='grey50')
7077
self.video_slider.bind("<B1-Motion>", lambda event:self.add_action("set_video_position", self.video_slider.get()))
7178
self.video_slider.bind("<ButtonPress-1>", lambda event:self.add_action("set_video_position", self.video_slider.get()))
7279
self.video_slider.bind("<ButtonRelease-1>", lambda event:self.add_action("set_video_position", self.video_slider.get()))
80+
self.video_slider.bind("<MouseWheel>", self.mouse_wheel)
7381
self.video_slider.grid( row = 1, column = 1, sticky='NEWS', pady = 5 )
7482

83+
84+
7585
######## Found Faces
7686
# Found Faces frame [1,0]
7787
self.found_faces_frame = tk.Frame( self, bg='grey20')
@@ -190,15 +200,16 @@ def __init__( self ):
190200
self.gfpgan_checkbox = tk.Checkbutton(self.label_frame1, anchor="w", text='GFPGAN',variable=self.GFPGAN_int, bg='grey75', height=1, onvalue=True, offvalue=False, command=lambda: self.add_action_and_update_frame("gfpgan_checkbox", self.GFPGAN_int.get()))
191201
self.gfpgan_checkbox.place(x=5, y=8, width=80, height=17)
192202

193-
self.GFPGAN_blend = tk.Spinbox( self.label_frame1, from_=0, to=100, increment = 5, width = 5 ,bd = 4, command=lambda :self.add_action_and_update_frame("GFPGAN_blend",self.GFPGAN_blend.get() ))
203+
var = tk.IntVar(value=100)
204+
self.GFPGAN_blend = tk.Spinbox( self.label_frame1, from_=0, to=100, increment = 5, width = 5 ,bd = 4, textvariable=var, command=lambda :self.add_action_and_update_frame("GFPGAN_blend",self.GFPGAN_blend.get() ))
194205
self.GFPGAN_blend.place(x=100, y=5)
195-
self.GFPGAN_blend.insert(0,5)
196206

197207
# Fake_diff
198208
self.fake_diff_checkbox = tk.Checkbutton(self.label_frame1, anchor="w", text='Diffing',variable=self.fake_diff_int, bg='grey75', onvalue=True, offvalue=False, command=lambda: self.add_action_and_update_frame("fake_diff_checkbox", self.fake_diff_int.get()))
199209
self.fake_diff_checkbox.place(x=5, y=38, width=80, height=17)
200210

201-
self.fake_diff_blend = tk.Spinbox( self.label_frame1, from_=0, to=255, increment = 1, width = 5 ,bd = 4, command=lambda :self.add_action_and_update_frame("fake_diff_blend",self.fake_diff_blend.get() ))
211+
var = tk.IntVar(value=4)
212+
self.fake_diff_blend = tk.Spinbox( self.label_frame1, from_=0, to=255, increment = 1, width = 5 ,bd = 4, textvariable=var, command=lambda :self.add_action_and_update_frame("fake_diff_blend",self.fake_diff_blend.get() ))
202213
self.fake_diff_blend.place(x=100, y=35)
203214

204215
# Face Threshhold
@@ -216,29 +227,21 @@ def __init__( self ):
216227
self.top_blend_id = tk.Label(self.label_frame2, anchor="w", bg='grey75', text="Mask top:")
217228
self.top_blend_id.place(x=5, y=8, width=60, height=17)
218229

219-
var = tk.IntVar(value=10)
230+
var = tk.IntVar(value=20)
220231
self.top_blend_scrollbar = tk.Spinbox( self.label_frame2, from_=0, to=255, increment = 1, width = 5 ,bd = 4, textvariable=var, command=lambda : self.add_action_and_update_frame("top_blend", self.top_blend_scrollbar.get()) )
221232
self.top_blend_scrollbar.place(x=70, y=5)
222-
223-
# var = tk.IntVar(value=10)
224-
# self.bottom_blend_scrollbar = tk.Spinbox( self.label_frame2, from_=0, to=255, increment = 1, width = 5 ,bd = 4, textvariable=var, command=lambda : self.add_action_and_update_frame("bottom_blend",self.bottom_blend_scrollbar.get() ))
225-
# self.bottom_blend_scrollbar.place(x=30, y=65)
226-
233+
227234
self.left_blend_id = tk.Label(self.label_frame2, anchor="w", bg='grey75', text="Mask side:")
228235
self.left_blend_id.place(x=5, y=38, width=60, height=17)
229236

230-
var = tk.IntVar(value=10)
237+
var = tk.IntVar(value=50)
231238
self.left_blend_scrollbar = tk.Spinbox( self.label_frame2, from_=0, to=255, increment = 1, width = 5 ,bd = 4, textvariable=var, command=lambda : self.add_action_and_update_frame("left_blend",self.left_blend_scrollbar.get() ))
232239
self.left_blend_scrollbar.place(x=70, y=35)
233-
234-
# var = tk.IntVar(value=8)
235-
# self.right_blend_scrollbar = tk.Spinbox( self.label_frame2, from_=0, to=255, increment = 1, width = 5 ,bd = 4, textvariable=var, command=lambda : self.add_action_and_update_frame("right_blend",self.right_blend_scrollbar.get() ))
236-
# self.right_blend_scrollbar.place(x=60, y=35)
237-
240+
238241
self.mask_blur_id = tk.Label(self.label_frame2, anchor="w", bg='grey75', text="Mask blur:")
239242
self.mask_blur_id.place(x=5, y=68, width=60, height=17)
240243

241-
var = tk.IntVar(value=10)
244+
var = tk.IntVar(value=25)
242245
self.mask_blur_scrollbar = tk.Spinbox( self.label_frame2, from_=0, to=128, increment = 1, width = 5 ,bd = 4, textvariable=var, command=lambda : self.add_action_and_update_frame("blur",self.mask_blur_scrollbar.get() ))
243246
self.mask_blur_scrollbar.place(x=70, y=65)
244247

@@ -287,63 +290,86 @@ def __init__( self ):
287290
var = tk.DoubleVar(value=0.5)
288291
self.neg_thresh = tk.Spinbox( self.label_frame3, from_=0, to=1, increment = 0.01, width = 5 ,bd = 4, textvariable=var, command=lambda :self.add_action_and_update_frame("neg_thresh",float(self.neg_thresh.get())))
289292
self.neg_thresh.place(x=195, y=65)
290-
291-
292293

293-
294-
295294
# Label Frame 4
296-
self.label_frame4 = tk.LabelFrame( self.options_frame_canvas1, height = 100, width = 210, bg='grey50' )
297-
self.label_frame4.place(x=585, y=5)
295+
self.label_frame4 = tk.LabelFrame( self.options_frame_canvas1, height = 100, width = 235, bg='grey50' )
296+
self.label_frame4.place(x=560, y=5)
298297

299298
# Load all
300299
self.create_video_button = tk.Button(self.label_frame4, bg='gold', text="Load Models", command=lambda: self.load_all())
301-
self.create_video_button.place(x=5, y=5, width = 195, height = 25)
300+
self.create_video_button.place(x=5, y=5, width = 90, height = 25)
302301

303302
# Save Videos Filepath
304-
self.save_video_filepath_button = tk.Button(self.label_frame4, bg='gold', text="Set save videos folder", wraplength=115, command=lambda: self.select_save_video_path())
305-
self.save_video_filepath_button.place(x=5, y=35, width = 195, height = 25)
303+
self.save_video_filepath_button = tk.Button(self.label_frame4, bg='gold', text="Set save videos folder", wraplength=85, command=lambda: self.select_save_video_path())
304+
self.save_video_filepath_button.place(x=5, y=35, width = 90, height = 60)
306305

307306
# Threads
308307
var = tk.IntVar(value=5)
309308
self.num_threads = tk.Spinbox( self.label_frame4, from_=0, to=20, increment = 1, width = 5 ,bd = 4, textvariable=var, command=lambda :self.add_action("num_threads",int(self.num_threads.get())))
310-
self.num_threads.place(x=75, y=65)
309+
self.num_threads.place(x=155, y=5)
311310

312-
self.num_threads_id = tk.Label(self.label_frame4, anchor="w", bg='grey75', text="# Threads:")
313-
self.num_threads_id.place(x=5, y=68, width = 65, height=17)
311+
self.num_threads_id = tk.Label(self.label_frame4, anchor="w", bg='grey75', text="Threads:")
312+
self.num_threads_id.place(x=100, y=8, width = 50, height=17)
314313

314+
self.occluder_checkbox = tk.Checkbutton(self.label_frame4, anchor="w", text='Occluder',variable=self.occluder_int, bg='grey75', onvalue=True, offvalue=False, command=lambda: self.add_action_and_update_frame("toggle_occluder", self.occluder_int.get()))
315+
self.occluder_checkbox.place(x=100, y=38, height=17 )
316+
317+
var = tk.IntVar(value=25)
318+
self.occluder_blur = tk.Spinbox( self.label_frame4, from_=0, to=128, increment = 1, width = 5 ,bd = 4, textvariable=var, command=lambda :self.add_action_and_update_frame("occluder_blur",int(self.occluder_blur.get())))
319+
self.occluder_blur.place(x=100, y=65)
315320

316-
321+
var = tk.IntVar(value=5)
322+
self.occluder_limit = tk.Spinbox( self.label_frame4, from_=0, to=255, increment = 1, width = 5 ,bd = 4, textvariable=var, command=lambda :self.add_action_and_update_frame("occluder_limit",int(self.occluder_limit.get())))
323+
self.occluder_limit.place(x=155, y=65)
324+
325+
# Status
326+
self.status_frame = tk.Frame( self, bg='grey20', height = 15)
327+
self.status_frame.grid( row = 5, column = 0, sticky='NEWS', pady = 2 )
328+
329+
self.status_label = tk.Label(self.status_frame, fg="white", bg='grey20')
330+
self.status_label.pack()
331+
# self.status_label_text = tk.Label(self.status_frame, anchor="w", bg='grey75', text="Threads:")
332+
# self.status_label_text.place(x=100, y=8, width = 50, height=17)
333+
317334

318335
def initialize_gui( self ):
319-
self.geometry("800x800")
320-
self.title("Rope")
336+
337+
self.title("Rope - Space Worm")
321338
self.configure(bg='grey10')
322-
self.resizable(width=True, height=True)
339+
self.resizable(width=True, height=True)
340+
341+
self.geometry('%dx%d+%d+%d' % (800, 1020, self.winfo_screenwidth()/2-400, self.winfo_screenheight()/2-510))
323342

324343
self.grid_columnconfigure(0, weight = 1)
325344

326345
self.grid_rowconfigure(0, weight = 10)
327346
self.grid_rowconfigure(1, weight = 0)
328347
self.grid_rowconfigure(2, weight = 0)
329348
self.grid_rowconfigure(3, weight = 0)
330-
self.grid_rowconfigure(4, weight = 0)
349+
self.grid_rowconfigure(4, weight = 0)
350+
self.grid_rowconfigure(5, weight = 0)
331351

352+
353+
self.add_action("fake_diff_blend",self.fake_diff_blend.get())
332354
self.add_action("num_threads", int(self.num_threads.get()))
333355
self.add_action("face_thresh", float(self.face_thresh.get()))
334356
self.add_action("top_blend", self.top_blend_scrollbar.get())
335357
self.add_action("bottom_blend",10 )
336358
self.add_action("left_blend",self.left_blend_scrollbar.get() )
337-
self.add_action("right_blend",self.left_blend_scrollbar.get() )
338-
# self.add_action("blur",self.blur_scrollbar.get())
339-
self.add_action_and_update_frame("blur",self.mask_blur_scrollbar.get() )
340-
self.add_action_and_update_frame("CLIP_blur",float(self.CLIP_blur.get()))
359+
self.add_action("blur",self.mask_blur_scrollbar.get() )
360+
self.add_action("CLIP_blur",float(self.CLIP_blur.get()))
341361

342362
self.add_action("CLIP_checkbox", self.CLIP_int.get())
343363
self.add_action("GFPGAN_blend",self.GFPGAN_blend.get())
344364

345365
self.add_action("pos_thresh",float(self.neg_thresh.get()))
346366
self.add_action("neg_thresh",float(self.neg_thresh.get()))
367+
self.add_action("toggle_occluder", float(self.occluder_int.get()))
368+
369+
self.add_action("occluder_blur",int(self.occluder_blur.get()))
370+
371+
self.add_action("occluder_limit",int(self.occluder_limit.get()))
372+
347373

348374
try:
349375
self.save_file = open("data.json", "r")
@@ -381,7 +407,7 @@ def load_all(self):
381407

382408
def select_video_path(self):
383409

384-
self.json_dict["source videos"] = filedialog.askdirectory(title="Select a target")
410+
self.json_dict["source videos"] = filedialog.askdirectory(title="Select Target Videos Folder")
385411

386412
self.video_filepath_button.configure(bg='grey75', text=self.json_dict["source videos"])
387413

@@ -390,7 +416,7 @@ def select_video_path(self):
390416

391417

392418
def select_save_video_path(self):
393-
self.json_dict["saved videos"] = filedialog.askdirectory(title="Select a target")
419+
self.json_dict["saved videos"] = filedialog.askdirectory(title="Select Save Video Folder")
394420

395421
self.save_video_filepath_button.configure(bg='grey75', text=self.json_dict["saved videos"])
396422

@@ -401,7 +427,7 @@ def select_save_video_path(self):
401427

402428
def select_faces_path(self):
403429

404-
self.json_dict["source faces"] = filedialog.askdirectory(title="Select a target")
430+
self.json_dict["source faces"] = filedialog.askdirectory(title="Select Source Faces Folder")
405431

406432
self.faces_filepath_button.configure(bg='grey75', text=self.json_dict["source faces"])
407433

@@ -632,6 +658,8 @@ def load_target_video(self, button, video_file):
632658

633659
if self.swap == True:
634660
self.toggle_swapper()
661+
if self.play_video == True:
662+
self.toggle_play_video()
635663

636664
self.clear_faces()
637665

@@ -640,7 +668,7 @@ def set_image(self, image, requested):
640668
self.video_image = image[0]
641669
if not requested:
642670
self.set_slider_position(image[1])
643-
671+
# @profile
644672
def display_image_in_video_frame(self):
645673

646674
image = self.video_image
@@ -790,11 +818,35 @@ def send_var(self):
790818

791819
def add_action_and_update_frame(self, action, parameter):
792820
self.add_action(action, parameter)
793-
self.add_action("set_video_position", self.video_slider.get())
821+
if not self.play_video:
822+
self.add_action("set_video_position", self.video_slider.get())
794823

795824
def apply_CLIPs(self):
796825
temp = [self.CLIP_pos_text.get(1.0, "end-1c"), self.CLIP_neg_text.get(1.0, "end-1c")]
797826
self.add_action_and_update_frame("apply_CLIPs", temp)
798-
799-
800827

828+
def toggle_dock(self):
829+
self.dock = False
830+
if not self.dock:
831+
# self.video_frame.winfo_width()
832+
self.grid_rowconfigure(0, weight = 0)
833+
# self.geometry('%dx%d+%d+%d' % (800, 800, self.winfo_screenwidth()/2-400, self.winfo_screenheight()/2-400))
834+
self.geometry('%dx%d' % (self.winfo_width(), 515))
835+
self.resizable(width=True, height=False)
836+
837+
838+
self.undock = self.wm_manage(self.video_frame)
839+
840+
self.video_frame.config(width=1024, height=768)
841+
self.video_frame.grid_propagate(0)
842+
def set_status(self, msg):
843+
self.status_label.configure(text=str(msg))
844+
self.status_label.pack()
845+
846+
def mouse_wheel(self, event):
847+
if event.delta > 0:
848+
self.video_slider.set(self.video_slider.get()+1)
849+
self.add_action("set_video_position", self.video_slider.get())
850+
else:
851+
self.video_slider.set(self.video_slider.get()-1)
852+
self.add_action("set_video_position", self.video_slider.get())

0 commit comments

Comments
 (0)