I asked Perplexity AI to help, but it wrote a virus instead
SO, it started quite nicely with a fully working program. However nearing the end… or at the end of my programming experience or asking it to program something for me, it wrote in some nasty nasty screen flickering shit. I couldn’t stop it and it quickly just froze my screen where the only option was to push the button. I tried it a second time to confirm, but this time I was able to quickly go to a different CLI window and kill that sonobabich. Here is what it came up with in case you want to try it. maybe it only screws up my computer:
<span style="font-weight:bold;color:#a71d5d;">import </span><span style="color:#323232;">os
</span><span style="font-weight:bold;color:#a71d5d;">import </span><span style="color:#323232;">cv2
</span><span style="font-weight:bold;color:#a71d5d;">import </span><span style="color:#323232;">numpy </span><span style="font-weight:bold;color:#a71d5d;">as </span><span style="color:#323232;">np
</span><span style="font-weight:bold;color:#a71d5d;">import </span><span style="color:#323232;">time
</span><span style="font-weight:bold;color:#a71d5d;">import </span><span style="color:#323232;">tkinter </span><span style="font-weight:bold;color:#a71d5d;">as </span><span style="color:#323232;">tk
</span><span style="font-weight:bold;color:#a71d5d;">from </span><span style="color:#323232;">tkinter </span><span style="font-weight:bold;color:#a71d5d;">import </span><span style="color:#323232;">messagebox, filedialog
</span><span style="color:#323232;">
</span><span style="font-weight:bold;color:#a71d5d;">def </span><span style="font-weight:bold;color:#323232;">threshold_to_black</span><span style="color:#323232;">(image_path, duration):
</span><span style="color:#323232;"> original_image </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">cv2.imread(image_path)
</span><span style="color:#323232;">
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">if </span><span style="color:#323232;">original_image </span><span style="font-weight:bold;color:#a71d5d;">is </span><span style="color:#0086b3;">None</span><span style="color:#323232;">:
</span><span style="color:#323232;"> </span><span style="color:#62a35c;">print</span><span style="color:#323232;">(</span><span style="color:#183691;">"Error: Could not read the image."</span><span style="color:#323232;">)
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">return
</span><span style="color:#323232;">
</span><span style="color:#323232;"> height, width, _ </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">original_image.shape
</span><span style="color:#323232;"> gray_image </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">cv2.cvtColor(original_image, cv2.COLOR_BGR2GRAY)
</span><span style="color:#323232;"> steps </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">duration </span><span style="font-weight:bold;color:#a71d5d;">* </span><span style="color:#0086b3;">10 </span><span style="font-style:italic;color:#969896;"># 10 frames per second
</span><span style="color:#323232;">
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">for </span><span style="color:#323232;">i </span><span style="font-weight:bold;color:#a71d5d;">in </span><span style="color:#62a35c;">range</span><span style="color:#323232;">(steps </span><span style="font-weight:bold;color:#a71d5d;">+ </span><span style="color:#0086b3;">1</span><span style="color:#323232;">):
</span><span style="color:#323232;"> </span><span style="font-style:italic;color:#969896;"># Calculate the threshold value (0 to 255)
</span><span style="color:#323232;"> threshold </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#0086b3;">int</span><span style="color:#323232;">((i </span><span style="font-weight:bold;color:#a71d5d;">/ </span><span style="color:#323232;">steps) </span><span style="font-weight:bold;color:#a71d5d;">* </span><span style="color:#0086b3;">255</span><span style="color:#323232;">)
</span><span style="color:#323232;">
</span><span style="color:#323232;"> </span><span style="font-style:italic;color:#969896;"># Create the thresholded image
</span><span style="color:#323232;"> thresholded_image </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">np.where(gray_image </span><span style="font-weight:bold;color:#a71d5d;">< </span><span style="color:#323232;">threshold, </span><span style="color:#0086b3;">0</span><span style="color:#323232;">, </span><span style="color:#0086b3;">255</span><span style="color:#323232;">).astype(np.uint8)
</span><span style="color:#323232;">
</span><span style="color:#323232;"> </span><span style="font-style:italic;color:#969896;"># Resize the thresholded image to fill the window
</span><span style="color:#323232;"> resized_image </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">cv2.resize(thresholded_image, (window_width, window_height), interpolation</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#323232;">cv2.</span><span style="color:#0086b3;">INTER_LINEAR</span><span style="color:#323232;">)
</span><span style="color:#323232;">
</span><span style="color:#323232;"> </span><span style="font-style:italic;color:#969896;"># Display the thresholded image
</span><span style="color:#323232;"> cv2.imshow(window_name, resized_image)
</span><span style="color:#323232;">
</span><span style="color:#323232;"> </span><span style="font-style:italic;color:#969896;"># Wait for a short period to create the effect
</span><span style="color:#323232;"> time.sleep(</span><span style="color:#0086b3;">0.1</span><span style="color:#323232;">)
</span><span style="color:#323232;">
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">if </span><span style="color:#323232;">cv2.waitKey(</span><span style="color:#0086b3;">1</span><span style="color:#323232;">) </span><span style="font-weight:bold;color:#a71d5d;">& </span><span style="color:#0086b3;">0xFF </span><span style="font-weight:bold;color:#a71d5d;">== </span><span style="color:#62a35c;">ord</span><span style="color:#323232;">(</span><span style="color:#183691;">'q'</span><span style="color:#323232;">):
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">break
</span><span style="color:#323232;">
</span><span style="color:#323232;"> </span><span style="font-style:italic;color:#969896;"># Display the final black image
</span><span style="color:#323232;"> cv2.imshow(window_name, np.zeros_like(thresholded_image))
</span><span style="color:#323232;">
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">while </span><span style="color:#0086b3;">True</span><span style="color:#323232;">:
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">if </span><span style="color:#323232;">cv2.waitKey(</span><span style="color:#0086b3;">1</span><span style="color:#323232;">) </span><span style="font-weight:bold;color:#a71d5d;">& </span><span style="color:#0086b3;">0xFF </span><span style="font-weight:bold;color:#a71d5d;">== </span><span style="color:#62a35c;">ord</span><span style="color:#323232;">(</span><span style="color:#183691;">'q'</span><span style="color:#323232;">):
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">break
</span><span style="color:#323232;">
</span><span style="color:#323232;"> cv2.destroyAllWindows()
</span><span style="color:#323232;">
</span><span style="font-weight:bold;color:#a71d5d;">def </span><span style="font-weight:bold;color:#323232;">select_image</span><span style="color:#323232;">():
</span><span style="color:#323232;"> current_directory </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">os.getcwd() </span><span style="font-style:italic;color:#969896;"># Get the current directory
</span><span style="color:#323232;"> filetypes </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">(
</span><span style="color:#323232;"> (</span><span style="color:#183691;">'JPEG files'</span><span style="color:#323232;">, </span><span style="color:#183691;">'*.jpg'</span><span style="color:#323232;">),
</span><span style="color:#323232;"> (</span><span style="color:#183691;">'JPEG files'</span><span style="color:#323232;">, </span><span style="color:#183691;">'*.jpeg'</span><span style="color:#323232;">),
</span><span style="color:#323232;"> (</span><span style="color:#183691;">'All files'</span><span style="color:#323232;">, </span><span style="color:#183691;">'*.*'</span><span style="color:#323232;">)
</span><span style="color:#323232;"> )
</span><span style="color:#323232;">
</span><span style="color:#323232;"> filename </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">filedialog.askopenfilename(
</span><span style="color:#323232;"> title</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#183691;">'Select an Image'</span><span style="color:#323232;">,
</span><span style="color:#323232;"> initialdir</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#323232;">current_directory, </span><span style="font-style:italic;color:#969896;"># Start in the current directory
</span><span style="color:#323232;"> filetypes</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#323232;">filetypes
</span><span style="color:#323232;"> )
</span><span style="color:#323232;">
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">if </span><span style="color:#323232;">filename:
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">return </span><span style="color:#323232;">filename
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">else</span><span style="color:#323232;">:
</span><span style="color:#323232;"> messagebox.showerror(</span><span style="color:#183691;">"Error"</span><span style="color:#323232;">, </span><span style="color:#183691;">"No image selected."</span><span style="color:#323232;">)
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">return </span><span style="color:#0086b3;">None
</span><span style="color:#323232;">
</span><span style="font-weight:bold;color:#a71d5d;">def </span><span style="font-weight:bold;color:#323232;">get_duration</span><span style="color:#323232;">():
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">def </span><span style="font-weight:bold;color:#323232;">submit</span><span style="color:#323232;">():
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">nonlocal </span><span style="color:#323232;">total_duration
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">try</span><span style="color:#323232;">:
</span><span style="color:#323232;"> minutes </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#0086b3;">int</span><span style="color:#323232;">(minutes_entry.get())
</span><span style="color:#323232;"> seconds </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#0086b3;">int</span><span style="color:#323232;">(seconds_entry.get())
</span><span style="color:#323232;"> total_duration </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">minutes </span><span style="font-weight:bold;color:#a71d5d;">* </span><span style="color:#0086b3;">60 </span><span style="font-weight:bold;color:#a71d5d;">+ </span><span style="color:#323232;">seconds
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">if </span><span style="color:#323232;">total_duration </span><span style="font-weight:bold;color:#a71d5d;">> </span><span style="color:#0086b3;">0</span><span style="color:#323232;">:
</span><span style="color:#323232;"> duration_window.destroy()
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">else</span><span style="color:#323232;">:
</span><span style="color:#323232;"> messagebox.showerror(</span><span style="color:#183691;">"Error"</span><span style="color:#323232;">, </span><span style="color:#183691;">"Duration must be greater than zero."</span><span style="color:#323232;">)
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">except </span><span style="color:#0086b3;">ValueError</span><span style="color:#323232;">:
</span><span style="color:#323232;"> messagebox.showerror(</span><span style="color:#183691;">"Error"</span><span style="color:#323232;">, </span><span style="color:#183691;">"Please enter valid integers."</span><span style="color:#323232;">)
</span><span style="color:#323232;">
</span><span style="color:#323232;"> total_duration </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#0086b3;">None
</span><span style="color:#323232;"> duration_window </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">tk.Toplevel()
</span><span style="color:#323232;"> duration_window.title(</span><span style="color:#183691;">"Input Duration"</span><span style="color:#323232;">)
</span><span style="color:#323232;">
</span><span style="color:#323232;"> tk.Label(duration_window, text</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#183691;">"Enter duration:"</span><span style="color:#323232;">).grid(row</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#0086b3;">0</span><span style="color:#323232;">, columnspan</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#0086b3;">2</span><span style="color:#323232;">)
</span><span style="color:#323232;">
</span><span style="color:#323232;"> tk.Label(duration_window, text</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#183691;">"Minutes:"</span><span style="color:#323232;">).grid(row</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#0086b3;">1</span><span style="color:#323232;">, column</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#0086b3;">0</span><span style="color:#323232;">)
</span><span style="color:#323232;"> minutes_entry </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">tk.Entry(duration_window)
</span><span style="color:#323232;"> minutes_entry.grid(row</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#0086b3;">1</span><span style="color:#323232;">, column</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#0086b3;">1</span><span style="color:#323232;">)
</span><span style="color:#323232;"> minutes_entry.insert(</span><span style="color:#0086b3;">0</span><span style="color:#323232;">, </span><span style="color:#183691;">"12"</span><span style="color:#323232;">) </span><span style="font-style:italic;color:#969896;"># Set default value for minutes
</span><span style="color:#323232;">
</span><span style="color:#323232;"> tk.Label(duration_window, text</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#183691;">"Seconds:"</span><span style="color:#323232;">).grid(row</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#0086b3;">2</span><span style="color:#323232;">, column</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#0086b3;">0</span><span style="color:#323232;">)
</span><span style="color:#323232;"> seconds_entry </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">tk.Entry(duration_window)
</span><span style="color:#323232;"> seconds_entry.grid(row</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#0086b3;">2</span><span style="color:#323232;">, column</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#0086b3;">1</span><span style="color:#323232;">)
</span><span style="color:#323232;"> seconds_entry.insert(</span><span style="color:#0086b3;">0</span><span style="color:#323232;">, </span><span style="color:#183691;">"2"</span><span style="color:#323232;">) </span><span style="font-style:italic;color:#969896;"># Set default value for seconds
</span><span style="color:#323232;">
</span><span style="color:#323232;"> tk.Button(duration_window, text</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#183691;">"Submit"</span><span style="color:#323232;">, command</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#323232;">submit).grid(row</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#0086b3;">3</span><span style="color:#323232;">, columnspan</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#0086b3;">2</span><span style="color:#323232;">)
</span><span style="color:#323232;">
</span><span style="color:#323232;"> </span><span style="font-style:italic;color:#969896;"># Center the duration window on the screen
</span><span style="color:#323232;"> duration_window.update_idletasks() </span><span style="font-style:italic;color:#969896;"># Update "requested size" from geometry manager
</span><span style="color:#323232;"> width </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">duration_window.winfo_width()
</span><span style="color:#323232;"> height </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">duration_window.winfo_height()
</span><span style="color:#323232;"> x </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">(duration_window.winfo_screenwidth() </span><span style="font-weight:bold;color:#a71d5d;">// </span><span style="color:#0086b3;">2</span><span style="color:#323232;">) </span><span style="font-weight:bold;color:#a71d5d;">- </span><span style="color:#323232;">(width </span><span style="font-weight:bold;color:#a71d5d;">// </span><span style="color:#0086b3;">2</span><span style="color:#323232;">)
</span><span style="color:#323232;"> y </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">(duration_window.winfo_screenheight() </span><span style="font-weight:bold;color:#a71d5d;">// </span><span style="color:#0086b3;">2</span><span style="color:#323232;">) </span><span style="font-weight:bold;color:#a71d5d;">- </span><span style="color:#323232;">(height </span><span style="font-weight:bold;color:#a71d5d;">// </span><span style="color:#0086b3;">2</span><span style="color:#323232;">)
</span><span style="color:#323232;"> duration_window.geometry(</span><span style="font-weight:bold;color:#a71d5d;">f</span><span style="color:#183691;">'</span><span style="color:#323232;">{width}</span><span style="color:#183691;">x</span><span style="color:#323232;">{height}</span><span style="color:#183691;">+</span><span style="color:#323232;">{x}</span><span style="color:#183691;">+</span><span style="color:#323232;">{y}</span><span style="color:#183691;">'</span><span style="color:#323232;">)
</span><span style="color:#323232;">
</span><span style="color:#323232;"> duration_window.transient() </span><span style="font-style:italic;color:#969896;"># Make the duration window modal
</span><span style="color:#323232;"> duration_window.grab_set() </span><span style="font-style:italic;color:#969896;"># Prevent interaction with the main window
</span><span style="color:#323232;"> duration_window.wait_window() </span><span style="font-style:italic;color:#969896;"># Wait for the duration window to close
</span><span style="color:#323232;">
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">return </span><span style="color:#323232;">total_duration
</span><span style="color:#323232;">
</span><span style="font-weight:bold;color:#a71d5d;">def </span><span style="font-weight:bold;color:#323232;">wait_for_start</span><span style="color:#323232;">(image_path):
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">global </span><span style="color:#323232;">window_name, window_width, window_height
</span><span style="color:#323232;">
</span><span style="color:#323232;"> original_image </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">cv2.imread(image_path)
</span><span style="color:#323232;"> height, width, _ </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">original_image.shape
</span><span style="color:#323232;">
</span><span style="color:#323232;"> window_name </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#183691;">'Threshold to Black'
</span><span style="color:#323232;"> cv2.namedWindow(window_name, cv2.</span><span style="color:#0086b3;">WINDOW_NORMAL</span><span style="color:#323232;">)
</span><span style="color:#323232;"> cv2.resizeWindow(window_name, width, height)
</span><span style="color:#323232;"> cv2.imshow(window_name, np.zeros((height, width, </span><span style="color:#0086b3;">3</span><span style="color:#323232;">), dtype</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#323232;">np.uint8)) </span><span style="font-style:italic;color:#969896;"># Black window
</span><span style="color:#323232;"> </span><span style="color:#62a35c;">print</span><span style="color:#323232;">(</span><span style="color:#183691;">"Press 's' to start the threshold effect. Press 'F11' to toggle full screen."</span><span style="color:#323232;">)
</span><span style="color:#323232;">
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">while </span><span style="color:#0086b3;">True</span><span style="color:#323232;">:
</span><span style="color:#323232;"> key </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">cv2.waitKey(</span><span style="color:#0086b3;">1</span><span style="color:#323232;">) </span><span style="font-weight:bold;color:#a71d5d;">& </span><span style="color:#0086b3;">0xFF
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">if </span><span style="color:#323232;">key </span><span style="font-weight:bold;color:#a71d5d;">== </span><span style="color:#62a35c;">ord</span><span style="color:#323232;">(</span><span style="color:#183691;">'s'</span><span style="color:#323232;">):
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">break
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">elif </span><span style="color:#323232;">key </span><span style="font-weight:bold;color:#a71d5d;">== </span><span style="color:#0086b3;">255</span><span style="color:#323232;">: </span><span style="font-style:italic;color:#969896;"># F11 key
</span><span style="color:#323232;"> toggle_fullscreen()
</span><span style="color:#323232;">
</span><span style="font-weight:bold;color:#a71d5d;">def </span><span style="font-weight:bold;color:#323232;">toggle_fullscreen</span><span style="color:#323232;">():
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">global </span><span style="color:#323232;">window_name
</span><span style="color:#323232;"> fullscreen </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">cv2.getWindowProperty(window_name, cv2.</span><span style="color:#0086b3;">WND_PROP_FULLSCREEN</span><span style="color:#323232;">)
</span><span style="color:#323232;">
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">if </span><span style="color:#323232;">fullscreen </span><span style="font-weight:bold;color:#a71d5d;">== </span><span style="color:#323232;">cv2.</span><span style="color:#0086b3;">WINDOW_FULLSCREEN</span><span style="color:#323232;">:
</span><span style="color:#323232;"> cv2.setWindowProperty(window_name, cv2.</span><span style="color:#0086b3;">WND_PROP_FULLSCREEN</span><span style="color:#323232;">, cv2.</span><span style="color:#0086b3;">WINDOW_NORMAL</span><span style="color:#323232;">)
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">else</span><span style="color:#323232;">:
</span><span style="color:#323232;"> cv2.setWindowProperty(window_name, cv2.</span><span style="color:#0086b3;">WND_PROP_FULLSCREEN</span><span style="color:#323232;">, cv2.</span><span style="color:#0086b3;">WINDOW_FULLSCREEN</span><span style="color:#323232;">)
</span><span style="color:#323232;">
</span><span style="font-weight:bold;color:#a71d5d;">if </span><span style="color:#323232;">__name__ </span><span style="font-weight:bold;color:#a71d5d;">== </span><span style="color:#183691;">"__main__"</span><span style="color:#323232;">:
</span><span style="color:#323232;"> current_directory </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">os.getcwd()
</span><span style="color:#323232;"> jpeg_files </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">[f </span><span style="font-weight:bold;color:#a71d5d;">for </span><span style="color:#323232;">f </span><span style="font-weight:bold;color:#a71d5d;">in </span><span style="color:#323232;">os.listdir(current_directory) </span><span style="font-weight:bold;color:#a71d5d;">if </span><span style="color:#323232;">f.lower().endswith((</span><span style="color:#183691;">'.jpeg'</span><span style="color:#323232;">, </span><span style="color:#183691;">'.jpg'</span><span style="color:#323232;">))]
</span><span style="color:#323232;">
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">if </span><span style="color:#323232;">jpeg_files:
</span><span style="color:#323232;"> image_path </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">select_image()
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">if </span><span style="color:#323232;">image_path </span><span style="font-weight:bold;color:#a71d5d;">is </span><span style="color:#0086b3;">None</span><span style="color:#323232;">:
</span><span style="color:#323232;"> </span><span style="color:#62a35c;">print</span><span style="color:#323232;">(</span><span style="color:#183691;">"No image selected. Exiting."</span><span style="color:#323232;">)
</span><span style="color:#323232;"> exit()
</span><span style="color:#323232;">
</span><span style="color:#323232;"> duration </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">get_duration()
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">if </span><span style="color:#323232;">duration </span><span style="font-weight:bold;color:#a71d5d;">is </span><span style="color:#0086b3;">None</span><span style="color:#323232;">:
</span><span style="color:#323232;"> </span><span style="color:#62a35c;">print</span><span style="color:#323232;">(</span><span style="color:#183691;">"No valid duration entered. Exiting."</span><span style="color:#323232;">)
</span><span style="color:#323232;"> exit()
</span><span style="color:#323232;">
</span><span style="color:#323232;"> wait_for_start(image_path)
</span><span style="color:#323232;">
</span><span style="color:#323232;"> </span><span style="font-style:italic;color:#969896;"># Get the original
</span>