
    miD                         d dl Z d dlZd dlZd dlZd dlZd dlmZmZ d dl	m
Z
mZ d dlmZ d dlmZ d dlmZmZmZ d dlZd dlmZ d dlmZ d	ed
edefdZddZy)    N)Image	ImageDraw)AudioFileClip	VideoClip)FileResponse)AudioSegment)DAvatarDStyleDFormat)tts_service)remove_filepromptoutput_pathreturnc                 P  K   	 t        t        j                  |       fd}t        j                  j                  |       d {   }|r/t        j                  j                        rt        d|  d       yy7 6# t        $ r}t        d|        Y d }~yd }~ww xY ww)N)styleseedc                     j                   j                  dd      dz   } t        j                  |       }|j                  dk(  r1t        d      5 }|j                  |j                         d d d        yy# 1 sw Y   yxY w)Nz/svg?z/png?z4&mouth=serious&size=1024&backgroundColor=transparent   wbTF)url_svgreplacerequestsgetstatus_codeopenwritecontent)urlresponsefavr   s      3/var/www/html/speakWrite/services/avatar_service.py_fetch_and_savez.generate_avatar_image.<locals>._fetch_and_save   sr    **$$Wg69ooC||C(H##s*+t, .GGH,,-..s   A77B z6SUCCESS: Avatar image generated using DiceBear (seed: )TFzDiceBear Generation Error: )r	   r
   	avataaarsanyio	to_threadrun_syncospathexistsprint	Exception)r   r   r$   successer"   s    `   @r#   generate_avatar_imager1      s     ""

	 00AArww~~k2J6(RSTU B  +A3/0sA   B&AB 	B 
4B >B& B 	B#BB&B##B&c           
      f  #$%&'()*+,-K   t        t        j                               }d| d}	d }
g }	 t        | ||||||d       d {   \  }
}|j	                  |       |j                  |
       d| d}|j                  |       |r |j                         r|j                         nd}t        ||       d {   }|r|}nd}t        j                  j                  |      s)t        j                  d	d
d      }|j                  |       t        j                  |      j                  d	      ##j                   \  }}#j#                  d      $t%        |dz        )t%        |dz        *t%        |dz        +	 #j'                  )*dz
  f      }t)        |      dk  r
g |d d d}t+        d|d   dz
        t+        d|d   dz
        t+        d|d   dz
        df(d'#$'()*+fd}g &t-        d      D ]  }&j                   ||dz                t/        j0                  |
      }|j2                  }d%t+        dt%        |%z              }t+        dt%        t)        |      |z              }g -t-        |      D ]/  }||z  }|dz   |z  }||| }-j                  |j4                         1 -rt+        -      dkD  rt+        -      nd,%&,-fd }t7        ||!      }t9        |
      } |j;                  |       }|j=                  |	%d"d#d $       |j?                          | j?                          | jA                  tB        |	       |D ]  }!| jA                  tB        |!        tE        |	d%d&'      S 7 47 #  d}Y xY w# tF        $ r}"tI        d(|"        t        j                  j                  |	      rt        jJ                  |	       |D ]7  }!t        j                  j                  |!      s#t        jJ                  |!       9 d)t        |"      icY d }"~"S d }"~"ww xY ww)*Navatar_z.mp4T)return_path
temp_base_z.pngz<charismatic young businessman with modern hairstyle and suitzavatar_base.pngRGBA)   r7   r   r   r   r   )colorAg      ?g?gQ?(   )                  r?   r      <      2   )r;   
   rF   r?   c                 P   	j                         j                  d      }t        j                  d|j                  d      }t        j                  |      }t        d| dz  z   z        }t        d| z        }|dz  z
  |dz  z   |z   g}| dkD  rD|j                  |dd	
       | dkD  r*|j                  |dz  z
  dz   |dz  z   dz   gdd       |j                  |dz  z
  f|dz  z   fgd       | dkD  r|j                  |dd	d       t        j                  d|j                  d      }|j                  d      }|j                  |
       |j                  |       t        j                  ||      }t        j                   |j                  d            S )Nr6   r8   g?g?#   rD   g?r      )fill皙?rA      )r?   r?   r?   r   )rJ   widthr@   Lr:   )maskRGB)copyconvertr   newsizer   Drawintpieslicelinearc
getchannelpasteputalphaalpha_compositenparray)
open_ratioframeoverlaydrawm_width_dynamiccurrent_open_h
mouth_rectcombined_maskoverlay_alphabase_img	face_maskinner_mouth_color	lip_color
m_center_x
m_center_ym_widths            r#   create_pro_framez(avatar_service.<locals>.create_pro_frameb   s   MMO++F3Eii

LAG>>'*D!'SJ4D-E"FGO j1N _11_11^+	J D j!S7HI#II"_%99:>"_%99:> 1  ;
 IIo22J?o22J? Q  (
 A~Q)1E!IIc5::q9M#..s3MI>]+))%9E88EMM%011    rL   g      @   c                     t        | z        }|t              k\  rd   S |   z  }|dkD  rd   S |dkD  rd   S |dkD  rd   S |dkD  rd	   S d   S )
Nr   g?r@   g333333?rA   rK   rD   g?rB   )rV   len)t	frame_idx	vol_ratiofpsframesmax_volvolumess      r#   
make_framez"avatar_service.<locals>.make_frame   s    AGICL(ay 	*W4I3vay 03vay 03vay 03vay 0!9rq   )durationlibx264aac)rx   codecaudio_codecloggerz	video/mp4z
avatar.mp4)r+   
media_typefilenamezAvatar Service Error: error)&struuiduuid4r   extendappendstripr1   r*   r+   r,   r   rS   saver   rR   rT   rZ   rV   getpixelrt   maxranger   	from_fileduration_secondsrmsr   r   
with_audiowrite_videofilecloseadd_taskr   r   r.   r-   remove).background_taskstextvoiceratepitchvolumetashkeelavatar_promptfile_id
video_path
audio_path
temp_filesextra_tempsgenerated_img_patheffective_promptr/   base_img_pathimgwh
skin_colorrp   i	audio_segr}   frame_count
chunk_sizestartendchunkr|   clip
audio_clipr!   r0   ri   rj   rx   ry   rk   rl   rm   rn   ro   rz   r{   s.                                      @@@@@@@@@@@r#   avatar_servicer   /   s    $**,G7)4(JJJL!(3dE4VZ)
 #

K 	+&*%  *'$7,- 6C}GZGZG\=..0  db-.>@RSS.M-Mww~~m,))FLECHH]#::m,44V<}}1'',	 S\
T]
a$h-	.!**J
R+HIJ z?Q-Cz"1~-Cs-C
JqMB./Q
18J1KSQRT^_`TadfTfMgilm	-%	2 %	2P q 	5AMM*1s734	5 !**:6	--!SC01CI <=>
{# 	&A
NEq5J&CeC(ENN599%		& #*c'lQ.>#g,A		 h7":.
z*ZS	u]ab

 	!!+z: 	6A%%k15	6 l[[C#
 T,	.-J~  !&qc*+77>>*%IIj! 	Aww~~a 		!	 Q  !sz   (P1N N A3N  NCN N G&N ?P1 N N N
N 	P.A&P) #P)#P.$P1)P..P1)N)r*   r   ior'   numpyr^   PILr   r   moviepyr   r   fastapi.responsesr   pydubr   dicebearr	   r
   r   r   services.tts_servicer   utilsr   r   boolr1   r    rq   r#   <module>r      sO    	  	     , *  - -  ,  # $ :R!rq   