2022-10-08 22:57:19 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  os  
						 
					
						
							
								
									
										
										
										
											2022-09-23 22:49:21 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								import  re  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  gradio  as  gr  
						 
					
						
							
								
									
										
										
										
											2022-10-08 22:57:19 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  modules . shared  import  script_path  
						 
					
						
							
								
									
										
										
										
											2022-10-13 12:26:34 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  modules  import  shared  
						 
					
						
							
								
									
										
										
										
											2022-09-23 22:49:21 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-10-21 16:10:51 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								re_param_code  =  r ' \ s*([ \ w ]+): \ s*( " (?: \\ | \ " |[^ \ " ])+ " |[^,]*)(?:,|$) '  
						 
					
						
							
								
									
										
										
										
											2022-09-25 09:25:28 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								re_param  =  re . compile ( re_param_code )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								re_params  =  re . compile ( r " ^(?: "  +  re_param_code  +  " ) { 3,}$ " )  
						 
					
						
							
								
									
										
										
										
											2022-09-23 22:49:21 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								re_imagesize  =  re . compile ( r " ^( \ d+)x( \ d+)$ " )  
						 
					
						
							
								
									
										
										
										
											2022-09-25 09:25:28 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								type_of_gr_update  =  type ( gr . update ( ) )  
						 
					
						
							
								
									
										
										
										
											2022-09-23 22:49:21 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-10-21 16:10:51 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								def  quote ( text ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ' , '  not  in  str ( text ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  text 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    text  =  str ( text ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    text  =  text . replace ( ' \\ ' ,  ' \\ \\ ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    text  =  text . replace ( ' " ' ,  ' \\ " ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  f ' " { text } " ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-09-23 22:49:21 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								def  parse_generation_parameters ( x :  str ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    """ parses generation parameters string, the one you see in text field under the picture in UI: 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								` ` `  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								girl  with  an  artist ' s beret, determined, blue eyes, desert scene, computer monitors, heavy makeup, by Alphonse Mucha and Charlie Bowater, ((eyeshadow)), (coquettish), detailed, intricate  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Negative  prompt :  ugly ,  fat ,  obese ,  chubby ,  ( ( ( deformed ) ) ) ,  [ blurry ] ,  bad  anatomy ,  disfigured ,  poorly  drawn  face ,  mutation ,  mutated ,  ( extra_limb ) ,  ( ugly ) ,  ( poorly  drawn  hands ) ,  messy  drawing  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Steps :  20 ,  Sampler :  Euler  a ,  CFG  scale :  7 ,  Seed :  965400086 ,  Size :  512 x512 ,  Model  hash :  45 dee52b  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								` ` `  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    returns  a  dict  with  field  values 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    """ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    res  =  { } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    prompt  =  " " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    negative_prompt  =  " " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    done_with_prompt  =  False 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    * lines ,  lastline  =  x . strip ( ) . split ( " \n " ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 09:25:28 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  not  re_params . match ( lastline ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        lines . append ( lastline ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        lastline  =  ' ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-09-23 22:49:21 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    for  i ,  line  in  enumerate ( lines ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        line  =  line . strip ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  line . startswith ( " Negative prompt: " ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            done_with_prompt  =  True 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            line  =  line [ 16 : ] . strip ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  done_with_prompt : 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 09:25:28 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            negative_prompt  + =  ( " "  if  negative_prompt  ==  " "  else  " \n " )  +  line 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-23 22:49:21 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        else : 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 09:25:28 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            prompt  + =  ( " "  if  prompt  ==  " "  else  " \n " )  +  line 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-23 22:49:21 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-10-19 14:22:03 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    res [ " Prompt " ]  =  prompt 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    res [ " Negative prompt " ]  =  negative_prompt 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-23 22:49:21 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  k ,  v  in  re_param . findall ( lastline ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        m  =  re_imagesize . match ( v ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  m  is  not  None : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            res [ k + " -1 " ]  =  m . group ( 1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            res [ k + " -2 " ]  =  m . group ( 2 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            res [ k ]  =  v 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  res 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 09:25:28 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								def  connect_paste ( button ,  paste_fields ,  input_comp ,  js = None ) :  
						 
					
						
							
								
									
										
										
										
											2022-09-23 22:49:21 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    def  paste_func ( prompt ) : 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-13 12:26:34 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  not  prompt  and  not  shared . cmd_opts . hide_ui_dir_config : 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-08 22:57:19 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            filename  =  os . path . join ( script_path ,  " params.txt " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  os . path . exists ( filename ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                with  open ( filename ,  " r " ,  encoding = " utf8 " )  as  file : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    prompt  =  file . read ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-09-23 22:49:21 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        params  =  parse_generation_parameters ( prompt ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        res  =  [ ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 09:25:28 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        for  output ,  key  in  paste_fields : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  callable ( key ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                v  =  key ( params ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            else : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                v  =  params . get ( key ,  None ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-23 22:49:21 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  v  is  None : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                res . append ( gr . update ( ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 09:25:28 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            elif  isinstance ( v ,  type_of_gr_update ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                res . append ( v ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-23 22:49:21 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            else : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                try : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    valtype  =  type ( output . value ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-21 16:10:51 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    if  valtype  ==  bool  and  v  ==  " False " : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        val  =  False 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    else : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        val  =  valtype ( v ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-09-23 22:49:21 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								                    res . append ( gr . update ( value = val ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                except  Exception : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    res . append ( gr . update ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  res 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    button . click ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        fn = paste_func , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        _js = js , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        inputs = [ input_comp ] , 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 09:25:28 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        outputs = [ x [ 0 ]  for  x  in  paste_fields ] , 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-23 22:49:21 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    )