Ë
    „ Xj   ã                  ó–   — d dl mZ d dlZd dlmZ d dlZd dlmZ d dlm	Z	m
Z
mZ d dlmZmZmZ ddd	d
dddddddddœZdZ G d„ d«      Zy)é    )ÚannotationsN)ÚPath)ÚOpenAI)ÚImageÚImageFilterÚ	ImageStat)ÚretryÚstop_after_attemptÚwait_exponentialzPfuturistic neural interfaces, holographic model cards, luminous compute clusterszKcinematic product render, exploded chip view, studio lighting, macro detailzWfunding chart holograph, modern founder office, growth dashboards, premium pitch energyzPdark SOC room, encrypted code rain, abstract lock geometry, red alert UI accentszKfuturistic lab, scientific diagrams as 3D objects, clean research aestheticzMrealistic IDE on ultrawide monitor, developer hands, syntax highlighting glowz>cinematic humanoid robot, industrial atelier, volumetric lightzBmedical imaging holograms, clean clinical tech, soft cyan lightingzIfintech dashboard glass panels, trading floor blur, premium navy and goldz:isometric cloud topology, glowing nodes, data center bokehz>collaborative coding space, terminal windows, community energyzGkeynote stage lighting, product silhouette, premium brand-safe abstract)ÚaiÚhardwareÚstartupÚcyberÚresearchÚprogrammingÚroboticsÚ
healthcareÚfinanceÚcloudÚ
opensourceÚbigtech)údall-e-3zgpt-image-1c                  ó¦   — e Zd ZdZddd„Zddddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 dd	„Zddd
„Z e ed«       e	dd¬«      d¬«      ddd„«       Z
dd„Zdd„Zy)ÚImageGeneratoruA   Marketing-quality stills via OpenAI Images (DALLÂ·E 3 preferred).c                óB   — t        |¬«      | _        || _        || _        y )N)Úapi_key)r   ÚclientÚpreferred_modelÚmodel)Úselfr   r   s      ú;/var/www/html/content_generation/src/generators/ai_image.pyÚ__init__zImageGenerator.__init__!   s   € Ü WÔ-ˆŒØ$ˆÔØˆ�
ó    r   Úeditorial_3dÚdark_premiumNÚ )ÚcategoryÚillustration_styleÚbackground_styleÚpaletteÚhookc               óž   — t         j                  |t         d   «      }|rdj                  |d d «      nd}d|› d|› d|› d|› d	|xs |› d
�d d S )Nr   z, é   zpremium brand colorsuG  Generate HERO ARTWORK ONLY (not a final social post). Ultra-premium social media campaign visual for a top AI/tech media brand. Quality bar: Apple keynote / Stripe / Linear / Nvidia campaign â€” NOT Canva, NOT poster, NOT meme. NO readable text, NO logos of real companies, NO watermark, NO clipart icons floating in space. Scene must have strong focal subject + foreground + middle ground + background depth. Use volumetric lighting, atmospheric depth/fog, rim lighting, reflections, cinematic shadows, HDR feel. Rich environmental storytelling with realistic textures and layered objects. Reserve natural 20-30% clean composition space for future text overlay (not a giant empty gradient). The clean zone should be subtle and integrated into composition. If human faces appear, keep them realistic and non-distorted. Illustration style: z. Background: z. Palette: z. Visual language: z	. Story: zž. Include concrete subjects: devices, UI mockups, 3D objects, environments, data viz metaphors. Avoid flat framing; compose like a premium campaign hero shot.é<  )ÚCATEGORY_VISUALSÚgetÚjoin)	r    Úbase_promptr'   r(   r)   r*   r+   ÚcatÚcolorss	            r!   Úbuild_promptzImageGenerator.build_prompt&   s‰   € ô ×"Ñ" 8Ô-=¸dÑ-CÓDˆÙ+2�—‘˜7 2 A˜;Ô'Ð8Nˆð
#ð $6Ð"6°nÐEUÐDVð WØ�xÐ2°3°%ð 8Ø!Ò) TÐ*ð +MðMð ˆ4ð!ð 	r#   c                óŒ   — | j                   j                  d«      rdddœj                  |d«      S dddœj                  |d«      S )u#   Map creative aspect â†’ model size.údall-eÚ	1024x1792Ú	1792x1024)ÚportraitÚ	landscapeÚ	1024x1024Ú	1024x1536Ú	1536x1024)r   Ú
startswithr0   )r    Úaspects     r!   Úaspect_to_sizezImageGenerator.aspect_to_sizeD   sE   € à�:‰:× Ñ  Ô*Ø +¸+ÑF×JÑJÈ6ÐS^Ó_Ð_à'°kÑB×FÑFÀvÈ{Ó[Ð[r#   é   é   )ÚminÚmaxT)ÚstopÚwaitÚreraisec                óÈ  — |j                   j                  dd¬«       g }| j                  gt        ¢­D ]  }||vsŒ|j	                  |«       Œ d }|D ]ä  }	 || _        |xs | j                  |«      }	|j                  d«      rh d£}
nh d£}
|	|
v r|	nd}	||d d |	dd	œ}|j                  d«      rd
|d<   | j                  ||j                  d«      «      }| j                  |«      r|c S t        |«      }|d   dz   dz   d d |d<   | j                  ||«      }| j                  |«      r|c S t        d«      ‚ t        d|› d|› �«      ‚# t        $ r}|}Y d }~�Œ	d }~ww xY w)NT)ÚparentsÚexist_okr7   >   r<   r8   r9   >   Úautor<   r=   r>   r<   r.   é   )r   ÚpromptÚsizeÚnÚhdÚqualityz.pngrN   z@ Enforce premium cinematic composition, no flat poster framing, zRclear focal subject, layered depth, rich textures, and subtle negative space only.z)Generated image failed quality gate twicez#Image generation failed for models z: )ÚparentÚmkdirr   ÚIMAGE_MODEL_FALLBACKSÚappendr   rA   r?   Ú_generate_onceÚwith_suffixÚ_passes_quality_gateÚdictÚRuntimeErrorÚ	Exception)r    rN   Úout_pathrO   r@   ÚmodelsÚmÚlast_errr   Úuse_sizeÚallowedÚkwargsÚstricterÚexcs                 r!   ÚgeneratezImageGenerator.generateK   sª  € à�‰×Ñ d°TÐÔ:ØˆØ×&Ñ&Ð?Ô)>Ô?ˆAØ˜ŠØ—‘˜aÕ ð @ð &*ˆÛˆEð#Ø"�”
ØÒ> 4×#6Ñ#6°vÓ#>�Ø×#Ñ# HÔ-ÚE‘GâM�GØ'/°7Ñ':™8À�ð #Ø$ U d˜mØ$Øñ	 �ð ×#Ñ# HÔ-Ø(,�F˜9Ñ%à×.Ñ.¨v°x×7KÑ7KÈFÓ7SÓT�Ø×,Ñ,¨XÔ6Ø#’Oô   ›<�à˜8Ñ$ØXñYàjñkð �4ð	&�˜Ñ"ð
  ×.Ñ.¨x¸ÓB�Ø×,Ñ,¨XÔ6Ø#’OÜ"Ð#NÓOÐOðC ôJ Ð@ÀÀÈÈ8È*ÐUÓVÐVøô ò Ø�Ýûðús&   ÁBEÃ+A EÄ.EÅ	E!ÅEÅE!c                ó’  —  | j                   j                  j                  di |¤Ž}|j                  d   }t	        |dd «      }t	        |dd «      }|r&|j                  t        j                  |«      «       |S |rDt        j                  |d¬«      }|j                  «        |j                  |j                  «       |S t        d«      ‚)Nr   Úb64_jsonÚurléZ   )Útimeoutz+Image API returned neither url nor b64_json© )r   Úimagesrf   ÚdataÚgetattrÚwrite_bytesÚbase64Ú	b64decodeÚrequestsr0   Úraise_for_statusÚcontentr[   )r    rc   r]   ÚresultÚitemÚb64ri   Úresps           r!   rW   zImageGenerator._generate_once{   sµ   € Ø,�—‘×#Ñ#×,Ñ,Ñ6¨vÑ6ˆØ�{‰{˜1‰~ˆÜ�d˜J¨Ó-ˆÜ�d˜E 4Ó(ˆÙØ× Ñ ¤×!1Ñ!1°#Ó!6Ô7ð ˆñ Ü—<‘< ¨RÔ0ˆDØ×!Ñ!Ô#Ø× Ñ  §¡Ô.ð ˆô ÐLÓMÐMr#   c                ó¸  — 	 t        j                  |«      j                  d«      }|j                  d«      }t	        j
                  |«      }|j                  r|j                  d   nd}|j                  t        j                  «      }t	        j
                  |«      }|j                  r|j                  d   nd}|j                  \  }	}
|j                  dd|	|
dz  f«      |j                  d|
dz  |	d|
z  dz  f«      |j                  dd|
z  dz  |	|
f«      g}|D �cg c]$  }t	        j
                  |«      j                  d   ‘Œ& }}t        d„ |D «       «      }|	d	z  |
d	z  d|	z  d	z  d|
z  d	z  f\  }}}}|j                  ||||f«      }t	        j
                  |«      j                  d   }|d
k\  xr |dk\  xr |dk\  xr |dk  S # t        $ r Y yw xY wc c}w )zž
        Lightweight quality gate to reduce flat/poster-like generations.
        Reject if image is too low-detail, low-contrast, or overly uniform.
        ÚRGBFÚLr   g        é   rB   c              3  ó,   K  — | ]  }|d k  sŒ	d–— Œ y­w)é   rM   Nrl   )Ú.0Úss     r!   Ú	<genexpr>z6ImageGenerator._passes_quality_gate.<locals>.<genexpr>¥   s   è ø€ Ð?©* Q¸¸B»œq©*ùs   ‚
�r-   é   é   é   rM   )r   ÚopenÚconvertr\   r   ÚStatÚstddevÚfilterr   Ú
FIND_EDGESÚmeanrO   ÚcropÚsum)r    Ú
image_pathÚimgÚgrayÚstatÚstdÚedgesÚestÚ	edge_meanÚwÚhÚthirdsÚtÚ
third_stdsÚtoo_flat_regionsÚcx0Úcy0Úcx1Úcy1ÚcenterÚ
center_stds                        r!   rY   z#ImageGenerator._passes_quality_gateŠ   så  € ð
	Ü—*‘*˜ZÓ(×0Ñ0°Ó7ˆCð �{‰{˜3ÓˆÜ�~‰~˜dÓ#ˆØ $§¢ˆd�k‰k˜!Šn°ˆð —‘œK×2Ñ2Ó3ˆÜ�n‰n˜UÓ#ˆØ#&§8¢8�C—H‘H˜Q’K°ˆ	ð �x‰x‰ˆˆ1à�I‰I�q˜!˜Q  Q¡Ð'Ó(Ø�I‰I�q˜!˜q™& ! a¨!¡e°¡\Ð2Ó3Ø�I‰I�q˜1˜q™5 Q™,¨¨1Ð-Ó.ð
ˆñ
 <BÓB¹6°a”i—n‘n QÓ'×.Ñ.¨qÓ1¸6ˆ
ÐBÜÑ?©*Ó?Ó?Ðð  !™V Q¨!¡V¨a°!©e¸©\¸AÀ¹EÀa¹<ÐGÑˆˆS�#�sØ—‘˜C  c¨3Ð/Ó0ˆÜ—^‘^ FÓ+×2Ñ2°1Ñ5ˆ
ð �2‰Iò &Ø˜R‘ò&à˜bÑ ò&ð ! AÑ%ð		
øô7 ò 	Ùð	üò& Cs   ‚$G Ä)GÇ	GÇG)r   )r   Ústrr   r£   )r2   r£   r'   r£   r(   r£   r)   r£   r*   zlist[str] | Noner+   r£   Úreturnr£   )Úsquare)r@   r£   r¤   r£   )Nr¥   )
rN   r£   r]   r   rO   z
str | Noner@   r£   r¤   r   )rc   rZ   r]   r   r¤   r   )r�   r   r¤   Úbool)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r"   r5   rA   r	   r
   r   rf   rW   rY   rl   r#   r!   r   r      s¦   „ ÙKôð Ø"0Ø .Ø$(Øñð ðð ð	ð
  ðð ðð "ðð ðð 
óô<\ñ Ñ" 1Ó%Ñ,<ÀÈÔ,KÐUYÔZó-Wó [ð-Wó^ô'
r#   r   )Ú
__future__r   rq   Úpathlibr   rs   Úopenair   ÚPILr   r   r   Útenacityr	   r
   r   r/   rU   r   rl   r#   r!   Ú<module>r°      sc   ðÝ "ã Ý ã Ý ß -Ñ -ß @Ñ @ð ]Ø]ØhØ_Ø]ØbØPØVØZØIØRØXñÐ ð  4Ð ÷S
ò S
r#   