2022-09-23 22:49:21 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								import  re  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  gradio  as  gr  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 09:25:28 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								re_param_code  =  r " \ s*([ \ w ]+): \ s*([^,]+)(?:,|$) "  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								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 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								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 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  len ( prompt )  >  0 : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        res [ " Prompt " ]  =  prompt 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  len ( negative_prompt )  >  0 : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        res [ " Negative prompt " ]  =  negative_prompt 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    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 ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        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 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    val  =  valtype ( v ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    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 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    )