
    %h#              
       $   S r SSKrSSKJrJr  SSKJr  SSKrSSKJ	r	  SSK
J
r
  SSKrSSKJrJrJrJr  S\4S	 jr\" 5       r\S
:X  a  \" S5      eSS\R*                  S\S.0rSSS.SSS.SSS.SSS.SSS.SSS.SSS.SS S.S!.r " S" S#5      rg)$z
LOCAL GPU IMAGE GENERATOR (Optimized for SD15)
==============================================
VRAM-efficient Stable Diffusion v1.5 image generator.
    N)StableDiffusionPipelineDPMSolverMultistepScheduler)Image)BytesIO)datetime)OptionalDictListTuplereturnc                  0   [         R                  R                  5       (       d  [        S5        g[        S[         R                  R	                  S5       35        [         R                  R                  S5      R                  S-  n [        SU S S35        g	)
Nu9   ❌ CUDA not available! Install PyTorch with GPU support.cpuu   ✅ Using GPU: r      @z   Total VRAM: .2f GBcuda)torchr   is_availableprintget_device_nameget_device_propertiestotal_memory)
total_vrams    J/var/www/eduai.edurigo.com/generate_image/testing/local_image_generator.pydetect_devicer      sv    ::""$$IJ	OEJJ66q9:
;<11!4AAGKJ	OJs+3
/0    r   u*   🚨 GPU not detected! Please enable CUDA.sd15zrunwayml/stable-diffusion-v1-5@   )repo_iddtypesize_multiplepipeline_classzPphotorealistic, 8k uhd, professional photography, detailed lighting, ultra sharpz8cartoon, painting, sketch, low quality, blurry, deformed)positivenegativez;anime style, studio quality, vibrant colors, smooth shadingz'realistic photo, ugly, deformed, blurryz43d render, octane render, unreal engine, ray tracingz2d, cartoon, low qualityz1cartoon, colorful, animated style, clean outlineszrealistic, photo, blurryz1comic book style, inking, halftone, bold outlineszphoto, realistic, blurryzEcinematic lighting, professional composition, dramatic depth of fieldzflat, low quality, dullzBfantasy concept art, magic, epic, detailed, trending on artstationzmodern, realistic, low qualityz>cyberpunk, neon lights, futuristic, sci-fi, detailed cityscapezfantasy, medieval, low quality)	realisticanime3dcartoonisticcomic	cinematicfantasy	cyberpunkc            
           \ rS rSrSS\\   4S jjrS rS\S\4S jr	S	 r
S
\S\S\\\4   4S jrS\S\S\S\\\4   4S jrS\\   4S jrS\\\\4      4S jrS\4S jrS\S\4S jrSrg)LocalImageGeneratorW   Npreload_modelsc                     0 U l         U=(       d    S/U l        [        S5        U R                  5         [        S5        g )Nr   u*   
🚀 Initializing SD15 image generator...u   ✅ SD15 ready for generation!
)	pipelinesr0   r   _preload_all_models)selfr0   s     r   __init__LocalImageGenerator.__init__X   s6    )+,8;<  "01r   c                 l    U R                    H  nU R                  U5        M     U R                  5         g N)r0   _load_model_to_gpu_print_vram_statusr4   
model_names     r   r3   'LocalImageGenerator._preload_all_models_   s,    --J##J/ .!r   r<   r   c                 2   XR                   ;   a  [        SU S35        g[        U   n[        S5         US   R                  US   US   SS9n[        R
                  " UR                  R                  5      Ul        UR                  [        5      nUR                  5          UR                  5         [        S	5        X0R                   U'   [        S5        g! [         a    [        S
5         N1f = f! [         a  n[        SU 35         S nAgS nAff = f)Nu   ℹ️  z already loadedTu   ⏳ Loading SD15 model...r"   r   r    )torch_dtypeuse_safetensorsu      ✅ xformers enabledu       ℹ️ xformers not availableu   ✅ SD15 loaded to GPUu   ❌ Failed to load model: F)r2   r   MODEL_CONFIGSfrom_pretrainedr   from_config	schedulerconfigtoDEVICEenable_attention_slicing*enable_xformers_memory_efficient_attention	Exception)r4   r<   cfgpipelinees        r   r9   &LocalImageGenerator._load_model_to_gpud   s   'HZL89J')+	+,<<IL $ = H
 "=!H!HI[I[IbIb!cH{{6*H--/:CCE/0 *2NN:&*+  :89:  	.qc23	s<   A.C4 $C ?C4 C1.C4 0C11C4 4
D>DDc           	      \   [         R                  R                  5       (       a  [         R                  R                  S5      R                  S-  n[         R                  R                  S5      S-  n[         R                  R                  S5      S-  n[        SUS SUS SUS S35        g g )Nr   r   u   
📊 VRAM: Allocated=r   z GB | Reserved=z GB | Total=r   )r   r   r   r   r   memory_reservedmemory_allocatedr   )r4   totalreserved	allocateds       r   r:   &LocalImageGenerator._print_vram_status   s    ::""$$JJ44Q7DDwNEzz11!4w>H

33A6@I+Ic?/(SVWcdijmcnnqrs	 %r   promptcategoryc                 v    [         R                  UR                  5       [         S   5      nU SUS    3US   4$ )Nr%   z, r#   r$   )CATEGORY_STYLESgetlower)r4   rV   rW   styles       r   _enhance_prompt#LocalImageGenerator._enhance_prompt   sA    ##HNN$4ok6RSE*-./z1BBBr   widthheightc                 T    [         U   S   nX-   S-
  U-  U-  nX$-   S-
  U-  U-  nX4$ )Nr!      )rA   )r4   r_   r`   r<   multiples        r   _adjust_dimensions&LocalImageGenerator._adjust_dimensions   sG     ,_="Q&83x?$q(X5A}r   c           
      V   X0R                   ;  a  [        S5        g U R                   U   nU R                  X5      u  pxU R                  XEU5      u  pE[        R
                  R                  5         [        SU SU S35         [        R                  " 5          U" UUSSUUS9n	S S S 5        W	R                  S   n
[        5       nU
R                  US	S
9  A	[        R
                  R                  5         [        R
                  R                  5         [        R                  " 5         [        S5        UR                  5       $ ! , (       d  f       N= f! [         aK  n[        SU 35        [        R
                  R                  5         [        R                  " 5          S nAg S nAff = f)Nu   ❌ Model not loadedu   
🎨 Generating xz	 image...   g      @)rV   negative_promptnum_inference_stepsguidance_scaler_   r`   r   PNG)formatu)   ✅ Generation complete and VRAM cleared.u   ❌ Error: )r2   r   r]   rd   r   r   empty_cacheinference_modeimagesr   savesynchronizegccollectgetvaluerJ   )r4   rV   rW   r<   r_   r`   rL   enhancedr$   resultimgbufrM   s                r   generate_single_image)LocalImageGenerator.generate_single_image   sT   ^^+()>>*-!11&C//zJ

 "5'6()<=	%%'!#$,(*#&! ( --"C)CHHSH'JJ""$JJ""$JJL=><<>!) ('*  	Ks#$JJ""$JJL		s2   E E$BE 
EE 
F(AF##F(c                    / n[         R                  " 5       R                  S5      n[        SU S35        [	        U5       Hy  n	[        SU	S-    SU 35        U R                  XX4U5      n
U
(       d  M3  UR                  U SU SU SU	S-   S 3[        R                  " U
5      R                  S	5      S
.5        M{     [        S[        U5       SU S35        U$ )Nz%Y%m%d_%H%M%Su#   
🚀 Starting generation batch of z
 images...u   📸 Generating image rb   /_03dzutf-8)namebase64u   ✅ Batch complete: z successful)r   nowstrftimer   rangerz   appendr   	b64encodedecodelen)r4   rV   rW   r<   r_   r`   image_countimgs	timestampi	img_bytess              r   generate_multiple_images,LocalImageGenerator.generate_multiple_images   s    LLN++O<	4[MLM{#A*1q5';-@A226ZX^_Iy'j*Qyk1Q3s)L$..y9@@I 	 $ 	$SYKq[IJr   c                 >   [         R                  R                  S5      [        [         R                  R	                  S5      R
                  S-  S5      [        [         R                  R                  S5      S-  S5      [        [         R                  R                  S5      S-  S5      S.nS[        [         R                  R                  5       [        U R                  R                  5       5      [         R                  [         R                  R                  S.UE$ )Nr   r      )gpu_namevram_total_gbvram_allocated_gbvram_reserved_gbhealthy)statusdevicegpu_availablemodels_loadedpytorch_versioncuda_version)r   r   r   roundr   r   rQ   rP   rG   r   listr2   keys__version__version)r4   gpus     r   check_health LocalImageGenerator.check_health   s    

2215"5::#C#CA#F#S#SV]#]_`a!&uzz'B'B1'E'OQR!S %ejj&@&@&Cg&Mq Q	
  "ZZ446!$.."5"5"78$00!MM..
 
 	
r   c                    XR                   ;  a  [        SU S35        g[        SUR                  5        S35        U R                   U	 [        R                  " 5         [
        R                  R                  5         [
        R                  R                  5         [        SUR                  5        S35        U R                  5         g)	Nu   ⚠️ Model 'z' not loadedFu   🧹 Unloading z from GPU...u   ✅ z unloaded and VRAM cleared.T)
r2   r   upperrs   rt   r   r   rn   rr   r:   r;   s     r   unload_model LocalImageGenerator.unload_model   s    ^^+N:,l;<
 0 0 23<@ANN:&




 

 Z%%'((CDE!r   )r2   r0   r8   )__name__
__module____qualname____firstlineno__r
   strr5   r3   boolr9   r:   r   r]   intrd   r   bytesrz   r	   r   r   r   __static_attributes__ r   r   r.   r.   W   s    2tCy 2"
S T >tCc CS CU38_ C S c eTWY\T\o &T\]bTc &Pdhimnqsvnviwdx 
d 
"s t r   r.   )__doc__r   	diffusersr   r   PILr   r   ior   r   rs   typingr   r	   r
   r   r   r   rG   RuntimeErrorfloat16rA   rY   r.   r   r   r   <module>r      s     J     	 . .
s  
	U?
C
DD 31	 gN
 R=
 K.
 H.
 H.
 \-
 Y4
 U4;!LP Pr   