commit 5c5ffc4732c8a440c05e0231b9139f4bd7837655 Author: decoded Date: Mon Feb 6 05:45:59 2023 -0600 first commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/dr1p1m4g3.py b/dr1p1m4g3.py new file mode 100644 index 0000000..6008d21 --- /dev/null +++ b/dr1p1m4g3.py @@ -0,0 +1,373 @@ +####################################################################################################################################### SOF +import os +import shutil +import sys +from pathlib import Path +from time import sleep +from tkinter import * +from tkinter import filedialog, ttk +from tkinter.filedialog import askopenfile +from PIL import Image, ImageTk +from random import randint, shuffle +########################################################################################################################################### +class DR1P1M4G3(): + ######################################################################################################################################### + def __init__(self,USERPATH=None,IMGINDEX=None,RENDMODE=None,PUMPMODE=None,PUMPTIME=None,USERSHUF=None): + ####################################################################################################################################### + if USERPATH: + self.IMAGE_DIR=str(USERPATH) + self.USER_USERPATH=USERPATH + else: + self.USER_USERPATH="" + self.IMAGE_DIR="./" + ####################################################################################################################################### + if IMGINDEX: + self.IMAGE_INDEX=IMGINDEX + self.USER_IMGINDEX=IMGINDEX + else: + self.USER_IMGINDEX=0 + self.IMAGE_INDEX=0 + ####################################################################################################################################### + if RENDMODE: + self.REDIMENSION=RENDMODE + self.USER_RENDMODE=RENDMODE + else: + self.USER_RENDMODE=0 + self.REDIMENSION=0 + ####################################################################################################################################### + if PUMPMODE: + self.PUMPMODE=PUMPMODE + self.USER_PUMPMODE=PUMPMODE + else: + self.USER_PUMPMODE=False + self.PUMP_AUTO=False + ####################################################################################################################################### + if not PUMPTIME==float(0.5): + self.PUMPTIME=PUMPTIME + self.USER_PUMPTIME=PUMPTIME + self.PUMP_INTERVAL=0.5 + else: + self.USER_PUMPTIME=0 + self.PUMP_INTERVAL=0.5 + ####################################################################################################################################### + if USERSHUF: + self.USERSHUF=USERSHUF + self.USER_USERSHUF=False + else: + self.USERSHUF=False + self.USER_USERSHUF=False + ####################################################################################################################################### + self.RENDER_TEXT=True + self.LAST_DIRECTION=-1 + self.ISAVE_DIRECTORY=self.IMAGE_DIR+"_ISAVE" + self.IDROP_DIRECTORY=self.IMAGE_DIR+"_IDROP" + self.IMAGE_LIST=[] + self.main() + ######################################################################################################################################### + def fliptext(self,s): + self.RENDER_TEXT=not self.RENDER_TEXT + if self.RENDER_TEXT: + print(f"<<<<< text rendering enabled >>>>>") + self.canvas.delete('all') + self.loadimage() + else: + print(f"<<<<< text rendering disabled >>>>>") + self.canvas.delete('all') + self.loadimage() + ######################################################################################################################################### + def isave(self,s): + if not os.path.exists(self.ISAVE_DIRECTORY): + os.mkdir(self.ISAVE_DIRECTORY) + shutil.move(self.IMAGE_LIST[self.IMAGE_INDEX],self.ISAVE_DIRECTORY) + print(f"<<<<< moved {self.IMAGE_LIST[self.IMAGE_INDEX]} to {self.ISAVE_DIRECTORY} >>>>>") + if self.LAST_DIRECTION: + self.right(self) + else: + self.left(self) + ######################################################################################################################################### + def idrop(self,s): + if not os.path.exists(self.IDROP_DIRECTORY): + os.mkdir(self.IDROP_DIRECTORY) + shutil.move(self.IMAGE_LIST[self.IMAGE_INDEX],self.IDROP_DIRECTORY) + print(f"<<<<< moved {self.IMAGE_LIST[self.IMAGE_INDEX]} to {self.IDROP_DIRECTORY} >>>>>") + if self.LAST_DIRECTION: + self.right(self) + else: + self.left(self) + ######################################################################################################################################### + def up(self,s): self.PUMP_INTERVAL+=0.01 + ######################################################################################################################################### + def down(self,s): self.PUMP_INTERVAL-=0.01 + ######################################################################################################################################### + def shuffling(self,s): + self.USER_USERSHUF=not self.USER_USERSHUF + if self.USER_USERSHUF: + self.getfilelist() + self.loadimage() + print(f"<<<<< image shuffling enabled >>>>>") + else: + print(f"<<<<< image shuffling disabled >>>>>") + ######################################################################################################################################## + def escaped(self,s): + self.root.destroy() + sys.exit(0) + ######################################################################################################################################### + def autopump(self,s): + self.PUMP_AUTO = not self.PUMP_AUTO + if self.PUMP_AUTO: + while self.PUMP_AUTO: + self.right(self) + if self.PUMP_INTERVAL < 0.01: self.PUMP_INTERVAL+=0.5 + sleep(self.PUMP_INTERVAL) + print(self.PUMP_AUTO) + ######################################################################################################################################### + def redimension(self,s): + self.canvas.delete('all') + self.REDIMENSION+=1 + if self.REDIMENSION>4: self.REDIMENSION=0 + self.loadimage() + ######################################################################################################################################### + def loadimage(self): + self.canvas.delete('all') + try: + try: + self.image=Image.open(self.IMAGE_LIST[self.IMAGE_INDEX]) + except: + pass + IMG_X_OG=self.image.width + IMG_Y_OG=self.image.height + x=self.root.winfo_screenwidth() + y=self.root.winfo_screenheight() + xx=self.image.width + yy=self.image.height + REDIMENSION="" + ##################################################################################################################################### + if self.REDIMENSION==0: + self.canvas.delete('all') + REDIMENSION="[ image x screen-constrained ]" + xxx=xx+(x-xx) + yyy=yy+(x-xx) + if yyy>y: + REDIMENSION="[ image y screen-constrained ]" + yy=yyy-(yyy-y) + if IMG_Y_OG < y: + xx=xxx-(yyy-y) + else: + xx=xx-(self.image.height-y) + try: + self.resized_image=self.image.resize((xx,yy),Image.LANCZOS) + self.photo_resized=ImageTk.PhotoImage(self.resized_image) + self.canvas.create_image(x/2-xx/2,0,anchor=NW,image=self.photo_resized) + except: + if self.LAST_DIRECTION: + self.right(self) + else: + self.left(self) + ##################################################################################################################################### + elif self.REDIMENSION==1: + self.canvas.delete('all') + REDIMENSION="[ image x screen-constrained ]" + if xxself.root.winfo_screenheight(): + for i in range(100): + if not self.REDIMENSION==1: + self.canvas.delete('all') + sleep(0.1) + self.loadimage() + break + offset=int(i*(yy-self.root.winfo_screenheight())/100) + self.resized_image=self.image.resize((xx,yy),Image.LANCZOS) + self.cropped_image=self.resized_image.crop([0,0+offset,x,y+offset]) + self.photo_resized=ImageTk.PhotoImage(self.cropped_image) + self.canvas.create_image(0,0,anchor=NW,image=self.photo_resized) + self.canvas.configure(bg='black') + Buffer = 'filename: {}\nredimension: {} - screen: {}x{} - image: {}x{} - diff: {}x{} - resize: {}x{}\nfile: {}/{} - interval: {}'.format(self.IMAGE_LIST[self.IMAGE_INDEX],REDIMENSION,self.root.winfo_screenwidth(),self.root.winfo_screenheight(),self.image.width,self.image.height,x-IMG_X_OG,y-IMG_Y_OG,xx,yy,self.IMAGE_INDEX,len(self.IMAGE_LIST)-1,self.PUMP_INTERVAL) + if self.RENDER_TEXT: self.canvas.create_text(self.root.winfo_screenwidth()/2, 55, text=Buffer,fill='red',justify='center') + self.root.title(Buffer) + print(f"{offset} / {x} - {i}") + self.root.update() + else: + self.resized_image=self.image.resize((xx,yy),Image.LANCZOS) + self.photo_resized=ImageTk.PhotoImage(self.resized_image) + self.canvas.create_image(0,0,anchor=NW,image=self.photo_resized) + self.canvas.delete('all') + self.canvas.configure(bg='black') + Buffer = 'filename: {}\nredimension: {} - screen: {}x{} - image: {}x{} - diff: {}x{} - resize: {}x{}\nfile: {}/{} - interval: {}'.format(self.IMAGE_LIST[self.IMAGE_INDEX],REDIMENSION,self.root.winfo_screenwidth(),self.root.winfo_screenheight(),self.image.width,self.image.height,x-IMG_X_OG,y-IMG_Y_OG,xx,yy,self.IMAGE_INDEX,len(self.IMAGE_LIST)-1,self.PUMP_INTERVAL) + if self.RENDER_TEXT: self.canvas.create_text(self.root.winfo_screenwidth()/2, 55, text=Buffer,fill='red',justify='center') + self.root.title(Buffer) + print(f"{offset} / {x} - {i}") + self.root.update() + ##################################################################################################################################### + elif self.REDIMENSION==2: + self.canvas.delete('all') + REDIMENSION="[ image x,y screen-stretched ]" + self.resized_image=self.image.resize((self.root.winfo_screenwidth(),self.root.winfo_screenheight()),Image.LANCZOS) + self.photo_resized=ImageTk.PhotoImage(self.resized_image) + self.canvas.create_image(0,0,anchor=NW,image=self.photo_resized) + ##################################################################################################################################### + elif self.REDIMENSION==3: + self.canvas.delete('all') + REDIMENSION="[ screen x,y image-thumbnail ]" + self.image.thumbnail((1680,1050),resample=Image.LANCZOS) + self.image.save('thumbnail.jpg') + self.image=Image.open('thumbnail.jpg') + self.photo=ImageTk.PhotoImage(self.image) + xx=self.image.width + yy=self.image.height + self.canvas.create_image(x/2-xx/2,0,anchor=NW,image=self.photo) + ##################################################################################################################################### + elif self.REDIMENSION==4: + self.canvas.delete('all') + REDIMENSION="[ image-original ]" + self.photo=ImageTk.PhotoImage(self.image) + self.canvas.create_image(x/2-xx/2,0,anchor=NW,image=self.photo) + ##################################################################################################################################### + self.canvas.configure(bg='black') + global Name + Name = 'filename: {}\nredimension: {} - screen: {}x{} - image: {}x{} - diff: {}x{} - resize: {}x{}\nfile: {}/{} - interval: {}'.format(self.IMAGE_LIST[self.IMAGE_INDEX],REDIMENSION,self.root.winfo_screenwidth(),self.root.winfo_screenheight(),self.image.width,self.image.height,x-IMG_X_OG,y-IMG_Y_OG,xx,yy,self.IMAGE_INDEX,len(self.IMAGE_LIST)-1,self.PUMP_INTERVAL) + if self.RENDER_TEXT: self.canvas.create_text(self.root.winfo_screenwidth()/2, 55, text=Name,fill='red',justify='center') + self.root.title(Name) + self.root.update() + except IOError: + print(f"error: non-picture, skipping past - {self.IMAGE_LIST[self.IMAGE_INDEX]}") + if self.LAST_DIRECTION: + self.right(self) + else: + self.left(self) + pass + print('<< dr1p1m4g3 >> screen: {}x{} - image: {}x{} - file: {}/{} - interval: {} - filename: {}'.format(self.root.winfo_screenwidth(),self.root.winfo_screenheight(),self.image.width,self.image.height,self.IMAGE_INDEX,len(self.IMAGE_LIST)-1,self.PUMP_INTERVAL,self.IMAGE_LIST[self.IMAGE_INDEX])) + ######################################################################################################################################### + def getfilelist(self): + self.IMAGE_LIST=[ x for x in Path(self.IMAGE_DIR+'/').rglob('*') if not str(x).endswith('.txt') and not "intermediates" in x.name ] + if self.USER_USERSHUF: + shuffle(self.IMAGE_LIST) + self.IMAGE_INDEX=randint(0,len(self.IMAGE_LIST)-1) + print(f'index:{self.IMAGE_LIST[self.IMAGE_INDEX]}/{len(self.IMAGE_LIST)} - filename:{self.IMAGE_LIST[self.IMAGE_INDEX]} - size:{self.image.size}: [ width:{self.image.width} / height:{self.image.height} ]') + self.IMAGE_LIST=sorted(self.IMAGE_LIST) + ######################################################################################################################################### + def right(self,s): + self.LAST_DIRECTION=True + self.IMAGE_INDEX+=1 + if self.IMAGE_INDEX==len(self.IMAGE_LIST): + self.IMAGE_INDEX=0 + self.getfilelist() + self.loadimage() + ######################################################################################################################################### + def left(self,s): + self.LAST_DIRECTION=False + self.IMAGE_INDEX-=1 + self.getfilelist() + if self.IMAGE_INDEX<0: + self.IMAGE_INDEX=len(self.IMAGE_LIST)-1 + self.loadimage() + ######################################################################################################################################### + def main(self): + ####################################################################################################################################### + try: + Name='<< dr1p1m4g3 >>' + self.root=Tk(className=Name) + self.root.attributes('-fullscreen',True) + self.root.eval('tk::PlaceWindow . center') # self.root.overrideredirect(True) + self.root.wm_attributes("-topmost",True) + self.root.wm_attributes("-transparent",True) + self.root.config(bg='systemTransparent') + self.image=Image.new(mode='RGB', size=(self.root.winfo_screenwidth(),self.root.winfo_screenheight())) + self.photo=ImageTk.PhotoImage(self.image) + self.canvas=Canvas(self.root,width=self.root.winfo_screenwidth(),height=self.root.winfo_screenheight(),bd=0,highlightthickness=0) + self.canvas.pack(fill="both",expand=True) + self.REDIMENSION+=self.USER_RENDMODE + self.IMAGE_INDEX=(0+int(self.USER_IMGINDEX)) + self.PUMP_AUTO=self.USER_PUMPMODE + self.getfilelist() + self.canvas.bind("",self.shuffling) + self.canvas.bind("

",self.autopump) + self.canvas.bind("",self.redimension) + self.canvas.bind("",self.fliptext) + self.canvas.bind("",self.up) + self.canvas.bind("",self.down) + self.canvas.bind("",self.left) + self.canvas.bind("",self.right) + self.canvas.bind("",self.isave) + self.canvas.bind("",self.idrop) + self.canvas.bind("",self.escaped) + self.canvas.focus_set() + self.loadimage() + self.root.mainloop() + ####################################################################################################################################### + except Exception as err: + print(err) +########################################################################################################################################### +if __name__=="__main__": + ######################################################################################################################################### + DEBUG=True + if DEBUG: + USERPATH=str("/Users/dr1p/Desktop/txt2img-images/") + IMGINDEX=int(0) + RENDMODE=int(0) + PUMPMODE=int(1) + PUMPTIME=10 + USERSHUF=True + else: + USERPATH=str("") + IMGINDEX=int(0) + RENDMODE=int(0) + PUMPMODE=int(0) + PUMPTIME=float(0.5) + USERSHUF=False + ######################################################################################################################################### + if not DEBUG: + try: + USERPATH=str(sys.argv[1]) + print(f'[ specified user path: {USERPATH} ]') + except: + USERPATH="" + print(f'[ no directory path was specified: defaulting to current directory and recursively ]') + ######################################################################################################################################### + if not DEBUG: + try: + IMGINDEX=int(sys.argv[2]) + print(f'[ specified user inded: {IMGINDEX} ]') + except: + IMGINDEX=0 + print(f'[ no image index was specificed: defaulting to 0 ]') + ######################################################################################################################################### + if not DEBUG: + try: + RENDMODE=int(sys.argv[3]) + print(f'[ specified rendering mode: {RENDMODE} ]') + except: + RENDMODE=0 + print(f'[ no render mode specified: defaulting to image x,y screen-constrained ]') + ######################################################################################################################################### + if not DEBUG: + try: + PUMPMODE=int(sys.argv[4]) + print(f'[ specified user pump mode: {PUMPMODE} ]') + try: + PUMPTIME=float(sys.argv[5]) + print(f'[ specified user pump interval: {PUMPTIME} ]') + except: + PUMPTIME=0 + print(f'[ no pump mode interval: default to 0.5 second interval ]') + except: + print(f'[ no pump mode specified: defaulting to being turned off ]') + ######################################################################################################################################### + if not DEBUG: + try: + USERSHUF=int(sys.argv[6]) + print(f'[ specified user image shuffle mode: {USERSHUF} ]') + except: + USERSHUF=False + print(f'[ no shuffle mode specified: defaulting to being turned off ]') + ######################################################################################################################################### + dr1p1m4g3=DR1P1M4G3(USERPATH,IMGINDEX,RENDMODE,PUMPMODE,PUMPTIME,USERSHUF) + ######################################################################################################################################### +####################################################################################################################################### EOF \ No newline at end of file