2121 get_canvas_generation_mode ,
2222)
2323from backend .modules .parameters import parameters_to_command
24+ from ldm .generate import Generate
2425from ldm .invoke .args import Args , APP_ID , APP_VERSION , calculate_init_img_hash
2526from ldm .invoke .generator .diffusers_pipeline import PipelineIntermediateState
2627from ldm .invoke .generator .inpaint import infill_methods
3839
3940
4041class InvokeAIWebServer :
41- def __init__ (self , generate , gfpgan , codeformer , esrgan ) -> None :
42+ def __init__ (self , generate : Generate , gfpgan , codeformer , esrgan ) -> None :
4243 self .host = args .host
4344 self .port = args .port
4445
@@ -906,16 +907,13 @@ def image_progress(progress_state: PipelineIntermediateState):
906907 },
907908 )
908909
910+
909911 if generation_parameters ["progress_latents" ]:
910912 image = self .generate .sample_to_lowres_estimated_image (sample )
911913 (width , height ) = image .size
912914 width *= 8
913915 height *= 8
914- buffered = io .BytesIO ()
915- image .save (buffered , format = "PNG" )
916- img_base64 = "data:image/png;base64," + base64 .b64encode (
917- buffered .getvalue ()
918- ).decode ("UTF-8" )
916+ img_base64 = image_to_dataURL (image )
919917 self .socketio .emit (
920918 "intermediateResult" ,
921919 {
@@ -933,7 +931,7 @@ def image_progress(progress_state: PipelineIntermediateState):
933931 self .socketio .emit ("progressUpdate" , progress .to_formatted_dict ())
934932 eventlet .sleep (0 )
935933
936- def image_done (image , seed , first_seed ):
934+ def image_done (image , seed , first_seed , attention_maps_image = None ):
937935 if self .canceled .is_set ():
938936 raise CanceledException
939937
@@ -1095,6 +1093,12 @@ def image_done(image, seed, first_seed):
10951093 self .socketio .emit ("progressUpdate" , progress .to_formatted_dict ())
10961094 eventlet .sleep (0 )
10971095
1096+ parsed_prompt , _ = get_prompt_structure (generation_parameters ["prompt" ])
1097+ tokens = None if type (parsed_prompt ) is Blend else \
1098+ get_tokens_for_prompt (self .generate .model , parsed_prompt )
1099+ attention_maps_image_base64_url = None if attention_maps_image is None \
1100+ else image_to_dataURL (attention_maps_image )
1101+
10981102 self .socketio .emit (
10991103 "generationResult" ,
11001104 {
@@ -1107,6 +1111,8 @@ def image_done(image, seed, first_seed):
11071111 "height" : height ,
11081112 "boundingBox" : original_bounding_box ,
11091113 "generationMode" : generation_parameters ["generation_mode" ],
1114+ "attentionMaps" : attention_maps_image_base64_url ,
1115+ "tokens" : tokens ,
11101116 },
11111117 )
11121118 eventlet .sleep (0 )
@@ -1118,7 +1124,7 @@ def image_done(image, seed, first_seed):
11181124 self .generate .prompt2image (
11191125 ** generation_parameters ,
11201126 step_callback = image_progress ,
1121- image_callback = image_done ,
1127+ image_callback = image_done
11221128 )
11231129
11241130 except KeyboardInterrupt :
@@ -1565,6 +1571,19 @@ def dataURL_to_image(dataURL: str) -> ImageType:
15651571 )
15661572 return image
15671573
1574+ """
1575+ Converts an image into a base64 image dataURL.
1576+ """
1577+
1578+ def image_to_dataURL (image : ImageType ) -> str :
1579+ buffered = io .BytesIO ()
1580+ image .save (buffered , format = "PNG" )
1581+ image_base64 = "data:image/png;base64," + base64 .b64encode (
1582+ buffered .getvalue ()
1583+ ).decode ("UTF-8" )
1584+ return image_base64
1585+
1586+
15681587
15691588"""
15701589Converts a base64 image dataURL into bytes.
0 commit comments