Ë
    ÐÅjÞM  ã            
       ó  — 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 ej                  j                  d e j                  j                  e j                  j                  e
«      «      «       d dlmZmZ d dlmZ d dlmZ 	 d dlmZmZ e j                  j                  e j                  j                  e j                  j                  e
«      «      «      Ze j                  j/                  ed«      Ze j                  j/                  ed«      Ze j                  j/                  ed	«      Z e j6                  ed
¬«        e j6                  ed
¬«        ej8                  ej:                  d ej<                  e j                  j/                  ed«      d¬«       ej>                  «       g¬«        ej@                  e!«      Z"d„ Z#d„ Z$d„ Z%d d„Z&d„ Z'd„ Z(d„ Z)d„ Z*d„ Z+d!d„Z,d„ Z-d!d„Z.d„ Z/d„ Z0e!dk(  r e0«        yy# e$ r dZdZY �Œ~w xY w)"é    N)Údatetime)ÚForgeClientÚVisionClient)ÚPromptBuilder)ÚVisionCritic)ÚPromptDesignerÚLiterouterDesignerÚConfigÚOutputÚLogsT©Úexist_okz'%(asctime)s [%(levelname)s] %(message)sz
engine.logúutf-8©Úencoding)ÚlevelÚformatÚhandlersc                  ó¼   — t         j                  j                  t        d«      } t	        | dd¬«      5 }t        j                  |«      cd d d «       S # 1 sw Y   y xY w)Nzplumloom_engine.yamlÚrr   r   )ÚosÚpathÚjoinÚ
CONFIG_DIRÚopenÚyamlÚ	safe_load)Úconfig_pathÚfs     ú8C:\Users\Usuario\Downloads\NEW\Engine\plumloom_engine.pyÚload_configr!   '   s=   € Ü—'‘'—,‘,œzÐ+AÓB€KÜ	ˆk˜3¨Õ	1°QÜ�~‰~˜aÓ ÷ 
2×	1Ò	1ús   ³AÁAc           	      óJ  — | d   d   }t        |d   |d   ¬«      }| d   d   }t        |d   |d   |d   ¬«      }| j                  d	i «      }|j                  d
d«      }t        € t        €t
        j                  d«       ||d fS |dk(  �r/| d   d   }t        j                  j                  t        dd«      }g }	t        j                  j                  |«      r}t        |dd¬«      5 }
|
D ]`  }|j                  «       }|j                  d«      sŒ%d|v sŒ*|j                  dd«      d   j                  «       }|sŒP|	j!                  |«       Œb 	 d d d «       |	s!t        j"                  j                  dd«      g}	t	        |	|j                  ddg«      |j                  dd«      |j                  dd«      ¬«      }nZ| d   d   }t        j"                  j                  dd«      }t        |d   ||j                  dd «      |j                  dd«      ¬!«      }|||fS # 1 sw Y   ŒÌxY w)"NÚ	endpointsÚ	forge_neoÚurlÚtimeout)r%   r&   ÚvisionÚmodel)r%   r(   r&   Úprompt_designerÚprimaryÚ
literouterz:prompt_designer no disponible: menu IA (7/8/9) desactivadoÚCONTEXTOzapis literouter.txtr   r   r   ÚkeyÚ=é   ÚLITEROUTER_API_KEYÚ Úmodelszdeepseek-v3.2:freeé   Útemperaturegffffffæ?)Úapi_keysr2   r&   r4   Ú	omnirouteÚOMNIROUTE_API_KEYz#sk-9e3027503ec29237-25cded-bd502dd0zcohere/command-r-plus-08-2024)Úomniroute_urlÚomniroute_keyr(   r4   )r   r   Úgetr   r	   ÚloggerÚwarningr   r   r   ÚBASE_DIRÚexistsr   ÚstripÚ
startswithÚsplitÚappendÚenviron)ÚconfigÚ	forge_cfgÚforgeÚ
vision_cfgr'   Údesigner_cfgr*   Úlit_cfgÚapi_keys_filer5   r   Úliner-   ÚdesignerÚomni_cfgÚapi_keys                   r    Úinit_clientsrO   -   s  € Ø�{Ñ# KÑ0€IÜ˜I eÑ,°iÀ	Ñ6JÔK€Eà˜Ñ$ XÑ.€JÜØ�uÑØ˜Ñ!Ø˜9Ñ%ô€Fð —:‘:Ð/°Ó4€LØ×Ñ˜y¨,Ó7€GäÐÔ"4Ð"<Ü�‰ÐSÔTØ�f˜dÐ"Ð"à�,ÓØ˜Ñ% lÑ3ˆÜŸ™Ÿ™¤X¨zÐ;PÓQˆØˆÜ�7‰7�>‰>˜-Ô(Ü�m S°7Õ;¸qÛ�DØŸ:™:›<�DØ—‘ uÕ-°#¸²+Ø"Ÿj™j¨¨aÓ0°Ñ3×9Ñ9Ó;˜ÚØ$ŸO™O¨CÕ0ñ ÷ <ñ ÜŸ
™
Ÿ™Ð';¸RÓ@ÐAˆHä%ØØ—;‘;˜xÐ*>Ð)?Ó@Ø—K‘K 	¨2Ó.Ø$×(Ñ(¨¸Ó<ô	
‰ð ˜+Ñ& {Ñ3ˆÜ—*‘*—.‘.Ð!4Ð6[Ó\ˆÜ!Ø" 5™/Ø!Ø×"Ñ" 7Ð,KÓLØ$×(Ñ(¨¸Ó<ô	
ˆð �&˜(Ð"Ð"÷7 <Ð;ús   Ã''HÄHÄ%HÄ:HÈH"c                  óF   — t        d«       t        d«       t        d«       y )Nz8
=======================================================z/       PLUMLOOM ENGINE v2 - PANEL DE GENERACIONú7=======================================================©Úprint© ó    r    Úprint_headerrV   b   s   € Ü	ˆ/ÔÜ	Ð
;Ô<Ü	ˆ(…OrU   c                 ó  — t        d«       t        d«       t        d«       t        d«       t        d«       t        d«       t        d«       t        d«       t        d	«       | €t        d
«       t        d«       t        d«       y )Nz'
[1] Generar lote sugerente (X/Twitter)u%   [2] Generar lote explÃ­cito (Patreon)z[3] Generar imagen individualz[4] Ver personajes disponiblesz[5] Ver wildcards disponiblesu!   [6] Verificar conexiÃ³n Forge Neou%   [7] Verificar conexiÃ³n DiseÃ±ador IAz[8] Generar prompts con IAz*[9] Generar lote con IA (prompts + imagen)z<    [7][8][9] desactivados: modulo de diseno IA no instaladoz	[0] Salirz7-------------------------------------------------------rR   )rL   s    r    Ú
print_menurX   h   sq   € Ü	Ð
4Ô5Ü	Ð
1Ô2Ü	Ð
)Ô*Ü	Ð
*Ô+Ü	Ð
)Ô*Ü	Ð
-Ô.Ü	Ð
1Ô2Ü	Ð
&Ô'Ü	Ð
6Ô7ØÐÜÐLÔMÜ	ˆ+ÔÜ	ˆ(…OrU   c           
      óô   — | j                  «       }t        dt        |«      › d�«       t        |d«      D ]A  \  }}| j	                  |«      }|j                  d«      rdnd}t        d|d›d	|› d
|› d�«       ŒC y )Nz
--- Personajes disponibles (ú) ---r/   Úoutfitu   âœ“ô   Ã—ú  Ú3dú. z
 [outfit: Ú])Úget_character_namesrS   ÚlenÚ	enumerateÚget_characterr:   )ÚbuilderÚnamesÚiÚnameÚcharÚ
has_outfits         r    Úshow_charactersrk   x   s|   € Ø×'Ñ'Ó)€EÜ	Ð*¬3¨u«:¨,°eÐ
<Ô=Ü˜U AÖ&‰ˆˆ4Ø×$Ñ$ TÓ*ˆØ"Ÿh™h xÔ0‘U°dˆ
Ü��1�R�&˜˜4˜& 
¨:¨,°aÐ8Õ9ñ 'rU   c           
      óØ   — dD ]e  }| j                  |«      }t        d|j                  «       › dt        |«      › d�«       t	        |d«      D ]  \  }}t        d|d›d|d d	 › �«       Œ Œg y )
N)ÚposeÚsceneÚdetailsr[   z
--- ú (z opciones) ---r/   r]   Ú2dr_   éF   )Úget_wildcard_optionsrS   Úupperrb   rc   )re   Úwc_typeÚoptionsrg   Úopts        r    Úshow_wildcardsrx   �   sp   € Û9ˆØ×.Ñ.¨wÓ7ˆÜ��w—}‘}“Ð' r¬#¨g«,¨°~ÐFÔGÜ ¨Ö+‰FˆAˆsÜ�B�q˜�f˜B˜s 3 B˜x˜jÐ)Õ*ñ ,ñ :rU   c                 óè   — t        d«       | j                  «       r=t        d«       	 | j                  «       }|j                  dd«      }t        d|› �«       y t        d«       y # t        $ r Y y w xY w)Nu'   
Verificando conexiÃ³n con Forge Neo...u&   âœ“ Forge Neo CONECTADO y respondiendoÚsd_model_checkpointÚdesconocidoz  Modelo activo: u?   âœ— Forge Neo NO responde. Verifica que estÃ© abierto con --api)rS   Úcheck_statusÚget_optionsr:   Ú	Exception)rF   Úoptsr(   s      r    Úcheck_forger€   ‰   ss   € Ü	Ð
4Ô5Ø×ÑÔÜÐ6Ô7ð	Ø×$Ñ$Ó&ˆDØ—H‘HÐ2°MÓBˆEÜÐ% e WÐ-Õ.ô 	ÐOÕPøô ò 	Ùð	ús   ¨0A% Á%	A1Á0A1c                 óî   — | €t        d«       y t        | t        «      rdnd}t        d|› d�«       | j                  «       \  }}|rt        d|› d�«       t        d|› �«       y t        d	|› d
|› �«       y )Nõ;   
âœ— Diseno IA no disponible (DeepSeek retirado del stack).úLiterouter (DeepSeek)úOmniroute (Command R+)u   
Verificando conexiÃ³n con ú...u   âœ“ z CONECTADO y respondiendoz  Respuesta: u   âœ— z NO responde: )rS   Ú
isinstancer	   Úcheck_connection)rL   Údesigner_typeÚokÚmsgs       r    Úcheck_command_rr‹   —   s„   € ØÐÜÐLÔMØä/9¸(ÔDVÔ/WÑ+Ð]u€MÜ	Ð(¨¨°sÐ
;Ô<Ø×'Ñ'Ó)�G€BˆÙ	Ü��]�OÐ#<Ð=Ô>Ü�˜c˜UÐ#Õ$ä��]�O >°#°Ð7Õ8rU   c                 ó  — | €t        d«       y t        | t        «      rdnd}t        d|› d�«       |j                  «       }t        dt	        |«      › �«       t        d«      j                  «       }|st        d«       y |j                  |«      }|st        d	|› d
�«       y t        d|d   d d › d�«       t        d«      j                  «       j                  «       }|dvrd}|dk(  rdnd}t        d«      j                  «       xs d }t        d«      j                  «       xs d }	t        d«       	 | j                  ||d   |||	¬«      \  }
}t        dd› �«       t        d«       t        d› «       t        |
«       t        d› «       t        d|› �«       t        dt	        |
«      › d�«       t        d«      j                  «       j                  «       }|dk7  r|
S 	 y # t        $ r}t        d |› �«       Y d }~y d }~ww xY w)!Nr‚   Ú
Literouterú
Command R+u$   
--- GeneraciÃ³n de Prompts con IA (rZ   ú
Personajes disponibles: z
Nombre del personaje: úDebes especificar un personajeúPersonaje 'ú' no encontradoz
Tags base: ÚbaseéP   r…   z6Nivel de contenido (sugerente/explicito) [sugerente]: )Ú	sugerenteÚ	explicitor•   Ú
suggestiveÚexplicitõ%   Idea de outfit (vacÃ­o = IA decide): õ(   Idea de escenario (vacÃ­o = IA decide): z$
Generando prompts con Command R+...)Úcharacter_nameÚcharacter_tagsÚspice_levelÚoutfit_hintÚ
scene_hintÚ
rQ   zPROMPT GENERADO POR IA:zTokens usados: z
Longitud: z caracteresu4   
Â¿Usar este prompt para generar imagen? (s/n) [s]: ÚnzError generando prompt: )rS   r†   r	   ra   rb   Úinputr?   rd   ÚlowerÚdesign_promptr~   )rL   re   rˆ   rf   Ú	personajeri   Úspicer�   rž   rŸ   Úprompt_textÚtokensÚusarÚes                 r    Úrun_ai_prompt_generationr«   ¦   s  € ØÐÜÐLÔMØä$.¨xÔ9KÔ$L‘LÐR^€MÜ	Ð1°-°ÀÐ
FÔGà×'Ñ'Ó)€EÜ	Ð&¤s¨5£z lÐ
3Ô4ÜÐ0Ó1×7Ñ7Ó9€IÙÜÐ.Ô/Øà× Ñ  Ó+€DÙÜ�˜I˜; oÐ6Ô7Øä	ˆM˜$˜v™, s¨Ð+Ð,¨CÐ
0Ô1ÜÐJÓK×QÑQÓS×YÑYÓ[€EØÐ.Ñ.Øˆà"'¨;Ò"6‘,¸J€KäÐ?Ó@×FÑFÓHÒPÈD€KÜÐAÓB×HÑHÓJÒRÈd€Jä	Ð
1Ô2ðØ&×4Ñ4Ø$Ø ™<Ø#Ø#Ø!ð 5ó 
Ñˆ�Vô 	��8�*ˆoÔÜÐ'Ô(Ü��
ÔÜˆkÔÜ��
ÔÜ� ˜xÐ(Ô)Ü�
œ3˜{Ó+Ð,¨KÐ8Ô9äÐLÓM×SÑSÓU×[Ñ[Ó]ˆØ�3Š;ØÐð ð øô	 ò ÜÐ(¨¨Ð,Ô-Üûðús   Ä4B+G" Ç"	HÇ+G>Ç>Hc                 ó

  — |€t        d«       y | d   }t        |t        «      rdnd}t        d|› d|› d�«       |j                  «       }t        dt	        |«      › �«       t        d	«      j                  «       }	|	r#|j                  |	«      }
|
sDt        d
|	› d�«       y t        j                  |«      }	|j                  |	«      }
t        d|	› �«       t        d«      j                  «       }	 t        |«      }t        d«      j                  «       xs d }t        d«      j                  «       xs d }t        d|› d|› d�«       	 |j                  |	|
d   ||||¬«      \  }}t        dt	        |«      › d|› d�«       t        dd› �«       t        d«       t        d› «       t        |d«      D ]  \  }}t        d|› d|d d  › d�«       Œ t        dd› �«       t        d!«      j                  «       j                  «       }|d"k(  rt        d#«       y t!        || d$   d%   | d$   d&   ¬'«      }|d(k(  rd)}d*}nd+}d,}t"        j$                  j'                  t(        |«      }t#        j*                  |d-¬.«       d/}d/}t-        j.                  «       j1                  d0«      }t        |«      D �]›  \  }}||k\  r �n�|dz  }t        d1|dz   › d2t	        |«      › d3|› d2|› �«       	 |j2                  › d4|
d   › d5|› d4|› �}|j4                  }t        d6|d d7 › d�«       |j7                  |||d8   |d9   |d:   |d;   |d<   |d=   ¬>«      \  }} |st        d?«       Œ¬|d/   }!| j9                  d@t        j:                  ddA«      «      }"t        dB«       |j=                  |!«      \  }#}$}%|#rX|dz  }|› dC|dD›dE|"› dF�}&t"        j$                  j'                  ||&«      }'|j?                  |!|'«       t        dG|› d2|› dH|&› �«       nKt"        j$                  j'                  t(        dI|› dJ|› dF�«      }(|j?                  |!|(«       t        dK|$› �«       �Œž t        dd› �«       t        dO«       t        dP|› d2|› �«       t        dQ|› �«       t        d› d�«       y # t        $ r d}Y �Œ¢w xY w# t        $ r}t        d|› �«       Y d }~y d }~ww xY w# t        $ r7}t@        jC                  dL|dz   › dM|› �«       t        dN|› �«       Y d }~�ŒWd }~ww xY w)RNr‚   Ú
generationr�   rŽ   z
--- Lote con IA (z): z ---r�   u,   
Nombre del personaje (vacÃ­o = aleatorio): r‘   r’   zPersonaje aleatorio: u   Cantidad de imÃ¡genes [5]: é   r™   rš   z
Generando z prompts con r…   r“   )r›   rœ   r�   Úcountrž   rŸ   zPrompts generados: rp   z tokens)zError generando prompts: r    rQ   zPROMPTS GENERADOS:r/   z
[z] éd   u3   
Â¿Generar imÃ¡genes con estos prompts? (s/n) [s]: r¡   Ú	CanceladoÚcriticÚmax_retriesÚauto_approve_on_error©Úvision_clientr³   r´   r—   Úcampaigns_Xúsuggestive, cleavageÚpatreon_NSFWú2undressing, bare shoulders, highly suggestive poseTr   r   ú%Y%m%d_%H%M%Sz	
[Imagen Ú/ú] Progreso: z, z, age up, mature female, ú
  Prompt: r”   ÚwidthÚheightÚstepsÚ	cfg_scaleÚsampler_nameÚ	clip_skip©ÚpromptÚnegative_promptr¿   rÀ   rÁ   rÂ   rÃ   rÄ   u     Forge no devolviÃ³ imagenÚseedéÿÉš;õ     Enviando a crÃ­tico visual...Ú_ai_Ú03dÚ_seedú.pngõ     âœ“ APROBADA [õ   ] â†’ ÚrejectedÚ_ai_rej_õ     âœ— RECHAZADA: zError en imagen ú: õ     âœ— Error: z  LOTE IA COMPLETADOú  Aprobadas: ú  Carpeta: )"rS   r†   r	   ra   rb   r¢   r?   rd   ÚrandomÚchoiceÚintÚ
ValueErrorÚdesign_batchr~   rc   r£   r   r   r   r   Ú
OUTPUT_DIRÚmakedirsr   ÚnowÚstrftimeÚmaster_promptrÇ   Útxt2imgr:   ÚrandintÚ
full_auditÚ
save_imager;   Úerror))rD   rF   r'   re   rL   r�   Úgen_cfgrˆ   rf   r¥   ri   Úcantidad_strÚcantidadrž   rŸ   Úpromptsr¨   rª   rg   ÚpÚ	confirmarr²   Úoutput_subdirÚ
extra_tagsÚoutput_pathÚ	aprobadasÚintentosÚ	timestampÚ	prompt_aiÚpositiveÚnegativeÚimagesÚinfoÚimage_bytesrÈ   ÚapprovedÚverdictro   ÚfilenameÚfilepathÚrejected_paths)                                            r    Úrun_ai_batchrþ   ß   so  € ØÐÜÐLÔMØà�\Ñ"€GÜ$.¨xÔ9KÔ$L‘LÐR^€Mä	Ð ˜¨c°+°¸dÐ
CÔDà×'Ñ'Ó)€EÜ	Ð&¤s¨5£z lÐ
3Ô4ÜÐEÓF×LÑLÓN€IáØ×$Ñ$ YÓ/ˆÙÜ�K 	˜{¨/Ð:Ô;Øä—M‘M %Ó(ˆ	Ø×$Ñ$ YÓ/ˆÜÐ% i [Ð1Ô2äÐ6Ó7×=Ñ=Ó?€LðÜ�|Ó$ˆô Ð?Ó@×FÑFÓHÒPÈD€KÜÐAÓB×HÑHÓJÒRÈd€Jä	ˆL˜˜
 -°¨¸cÐ
BÔCðØ"×/Ñ/Ø$Ø ™<Ø#ØØ#Ø!ð 0ó 
‰ˆ�ô 	Ð#¤C¨£L >°°F°8¸8ÐDÔEô
 
ˆBˆxˆjˆ/ÔÜ	Ð
ÔÜ	ˆXˆJÔÜ˜' 1Ö%‰ˆˆ1Ü��A�3�b˜˜4˜C˜˜	 Ð%Õ&ð &ä	ˆBˆxˆjˆ/ÔäÐLÓM×SÑSÓU×[Ñ[Ó]€IØ�CÒÜˆkÔØäØØ˜8Ñ$ ]Ñ3Ø$ XÑ.Ð/FÑGô€Fð �lÒ"Ø%ˆØ+‰
à&ˆØIˆ
ä—'‘'—,‘,œz¨=Ó9€KÜ‡K�K� dÕ+à€IØ€HÜ—‘“×'Ñ'¨Ó8€Iä! '×*‰ˆˆ9Ø˜Ò Úà�A‰ˆÜ�
˜1˜Q™3˜%˜q¤ W£ ¨l¸9¸+ÀQÀxÀjÐQÔRð(	'Ø!×/Ñ/Ð0°°4¸±<°.Ð@YÐZcÐYdÐdfÐgqÐfrÐsˆHØ×.Ñ.ˆHä�J˜x¨¨˜}˜o¨SÐ1Ô2à Ÿ=™=ØØ (Ø˜gÑ&Ø˜xÑ(Ø˜gÑ&Ø! +Ñ.Ø$ ^Ñ4Ø! +Ñ.ð )ó 	‰LˆF�Dñ ÜÐ3Ô4Øà  ™)ˆKØ—8‘8˜F¤F§N¡N°1°iÓ$@ÓAˆDäÐ3Ô4Ø)/×):Ñ):¸;Ó)GÑ&ˆH�g˜wáØ˜Q‘�	Ø'˜[¨¨Y°s¨O¸5ÀÀÀdÐK�ÜŸ7™7Ÿ<™<¨°XÓ>�Ø× Ñ  ¨hÔ7ÜÐ(¨¨°1°X°J¸fÀXÀJÐOÕPä "§¡§¡¬Z¸È	À{ÐRZÐ[cÐZdÐdhÐEiÓ j�Ø× Ñ  ¨mÔ<ÜÐ)¨'¨Ð3Ô4ùðW +ôb 
ˆBˆxˆjˆ/ÔÜ	Ð Ô"Ü	ˆM˜)˜ A h ZÐ
0Ô1Ü	ˆK˜�}Ð
%Ô&Ü	ˆXˆJ�bˆ/ÕøôU ò Ø‹ðûô" ò ÜÐ)¨!¨Ð-Ô.Üûðûôb ò 	'Ü�L‰LÐ+¨A¨a©C¨5°°1°#Ð6Ô7Ü�M ! Ð%×&Ò&ûð	'úsJ   Ã-R Å8R ËA3SÍC0SÒRÒRÒ	R?Ò'R:Ò:R?Ó	TÓ,S=Ó=Tc                 óF  — t        d| › d�«       t        d«      j                  «       }|sd }t        d«      j                  «       }|sd }t        d«      j                  «       }|sd }t        d«      j                  «       }	 t        |«      }||||fS # t        $ r d}Y Œw xY w)Nu   
--- ConfiguraciÃ³n del lote (rZ   u    Personaje (vacÃ­o = aleatorio): u   Outfit (vacÃ­o = aleatorio): õ    Escenario (vacÃ­o = aleatorio): u   Cantidad de imÃ¡genes: r®   )rS   r¢   r?   rÚ   rÛ   )r�   r¥   r[   rn   rè   ré   s         r    Úget_batch_paramsr  g  s²   € Ü	Ð+¨K¨=¸Ð
>Ô?äÐ8Ó9×?Ñ?ÓA€IÙØˆ	äÐ2Ó3×9Ñ9Ó;€FÙØˆäÐ4Ó5×;Ñ;Ó=€EÙØˆäÐ2Ó3×9Ñ9Ó;€LðÜ�|Ó$ˆð �f˜e XÐ-Ð-øô ò ØŠðús   ÂB ÂB ÂB c                 ó
  — | d   }t        |«      \  }}}}	t        || d   d   | d   d   ¬«      }
|dk(  rd}d}nd	}d
}t        j                  j	                  t
        |«      }t        j                  |d¬«       d}d}t        j                  «       j                  d«      }t        dd› �«       t        d|	› d|› d�«       t        d|xs d› �«       t        d|xs d› �«       t        d|xs d› �«       t        d|› d�«       t        d› d�«       ||	k  �rÁ|dz  }t        d|› d|› d|	› �«       	 |r|j                  ||||¬«      \  }}nGt        j                  |j                  «       «      }|j                  ||¬«      \  }}t        d|› �«       t        d |d d! › d"�«       |j!                  |||d#   |d$   |d%   |d&   |d'   |d(   ¬)«      \  }}|st        d*«       ŒÐ|d   }|j#                  d+t        j$                  dd,«      «      }t        d-«       |
j'                  |«      \  }}}|rX|dz  }|› d.|d/›d0|› d1�}t        j                  j	                  ||«      }|j)                  ||«       t        d2|› d|	› d3|› �«       nKt        j                  j	                  t
        d4|› d5|› d1�«      }|j)                  ||«       t        d6|› �«       ||	k  r�ŒÁt        dd› �«       t        d:«       t        d;|› d|	› �«       t        d<|› �«       t        d=||z  d>z  d?›d@�«       t        d|› �«       t        d› d�«       y # t*        $ r4}t,        j/                  d7|› d8|› �«       t        d9|› �«       Y d }~�Œjd }~ww xY w)ANr­   r²   r³   r´   rµ   r—   r·   r¸   r¹   rº   Tr   r   r»   r    rQ   z  Iniciando lote: u    imÃ¡genes (Ú)z  Personaje: Ú	ALEATORIOz
  Outfit: z  Escenario: r×   r¼   r/   z
[Intento #r½   )r›   r[   rn   rî   )r›   r�   z  Personaje aleatorio: r¾   r”   r…   r¿   rÀ   rÁ   rÂ   rÃ   rÄ   rÅ   u"     âœ— Forge no devolviÃ³ imÃ¡genesrÈ   rÉ   rÊ   Ú_rÌ   rÍ   rÎ   rÏ   rÐ   rÑ   Ú_rej_rÓ   zError en intento rÔ   rÕ   z  LOTE COMPLETADOrÖ   z  Intentos totales: u     Tasa de Ã©xito: r°   z.1fÚ%)r  r   r   r   r   rÝ   rÞ   r   rß   rà   rS   Úbuild_promptrØ   rÙ   ra   Úbuild_randomrâ   r:   rã   rä   rå   r~   r;   ræ   )rD   rF   r'   re   r�   rç   r¥   r[   rn   ré   r²   rí   rî   rï   rð   rñ   rò   Ú
prompt_posÚ
prompt_negÚrandom_charrö   r÷   rø   rÈ   rù   rú   ro   rû   rü   rý   rª   s                                  r    Ú	run_batchr    sû  € Ø�\Ñ"€Gä)9¸+Ó)FÑ&€Iˆv�u˜häØØ˜8Ñ$ ]Ñ3Ø$ XÑ.Ð/FÑGô€Fð �lÒ"Ø%ˆØ+‰
à&ˆØIˆ
ä—'‘'—,‘,œz¨=Ó9€KÜ‡K�K� dÕ+à€IØ€HÜ—‘“×'Ñ'¨Ó8€Iä	ˆBˆxˆjˆ/ÔÜ	Ð˜x˜j¨°[°MÀÐ
CÔDÜ	ˆM˜)Ò2 {Ð3Ð
4Ô5Ü	ˆJ�vÒ, Ð-Ð
.Ô/Ü	ˆM˜%Ò. ;Ð/Ð
0Ô1Ü	ˆK˜� aÐ
(Ô)Ü	ˆXˆJ�bˆ/Ôà
�hÓ
Ø�A‰ˆÜ�
˜8˜* L°°¸1¸X¸JÐGÔHð5	ÙØ)0×)=Ñ)=Ø#,Ø!ØØ)ð	 *>ó *Ñ&�
™Jô %Ÿm™m¨G×,GÑ,GÓ,IÓJ�Ø)0×)=Ñ)=Ø#.Ø +ð *>ó *Ñ&�
˜Jô Ð/°¨}Ð=Ô>ä�J˜z¨#¨2˜Ð/¨sÐ3Ô4à Ÿ=™=Ø!Ø *Ø˜gÑ&Ø˜xÑ(Ø˜gÑ&Ø! +Ñ.Ø$ ^Ñ4Ø! +Ñ.ð )ó 	‰LˆF�Dñ ÜÐ:Ô;Øà  ™)ˆKØ—8‘8˜F¤F§N¡N°1°iÓ$@ÓAˆDäÐ3Ô4Ø)/×):Ñ):¸;Ó)GÑ&ˆH�g˜wáØ˜Q‘�	Ø'˜[¨¨)°C¨¸¸d¸VÀ4ÐH�ÜŸ7™7Ÿ<™<¨°XÓ>�Ø× Ñ  ¨hÔ7ÜÐ(¨¨°1°X°J¸fÀXÀJÐOÕPä "§¡§¡¬Z¸È	À{ÐRWÐX`ÐWaÐaeÐEfÓ g�Ø× Ñ  ¨mÔ<ÜÐ)¨'¨Ð3Ô4ði �hÔ
ôv 
ˆBˆxˆjˆ/ÔÜ	ÐÔÜ	ˆM˜)˜ A h ZÐ
0Ô1Ü	Ð   
Ð
+Ô,Ü	Ð˜y¨Ñ1°#Ñ5°cÐ:¸!Ð
<Ô=Ü	ˆK˜�}Ð
%Ô&Ü	ˆXˆJ�bˆ/Õøô ò 	Ü�L‰LÐ,¨X¨J°b¸¸Ð<Ô=Ü�M ! Ð%Ô&Ýûð	ús    Ä3B/M Ç#C0M Í	NÍ)M=Í=Nc                 óJ  — t        d«       t        d«      j                  «       }|st        d«       y t        d«      j                  «       xs d }t        d«      j                  «       xs d }t        d«      j                  «       xs d }t        d«      j                  «       xs d }| d   }	|j                  |||||¬	«      \  }
}t        d
|
d d › d�«       t        d«       |j	                  |
||	d   |	d   |	d   |	d   |	d   |	d   ¬«      \  }}|r‡|j                  dd«      }t        j                  «       j                  d«      }d|› d|› d�}t        j                  j                  t        d|«      }|j                  |d   |«       t        d|› �«       y t        d«       y )Nu   
--- GeneraciÃ³n Individual ---zPersonaje: r�   u!   Outfit (vacÃ­o = del personaje): r   u   Pose (vacÃ­o = aleatoria): u   Detalles (vacÃ­o = aleatorio): r­   )r›   r[   rn   rm   ro   z	
Prompt: r°   r…   zGenerando...r¿   rÀ   rÁ   rÂ   rÃ   rÄ   rÅ   rÈ   r   r»   Úsingle_rÍ   rÎ   r·   u   âœ“ Guardada: u    âœ— No se generÃ³ ninguna imagen)rS   r¢   r?   r  râ   r:   r   rß   rà   r   r   r   rÝ   rå   )rD   rF   r'   re   r¥   r[   rn   rm   ro   rç   r
  r  rö   r÷   rÈ   rò   rû   rü   s                     r    Ú
run_singler  ä  sµ  € Ü	Ð
,Ô-ä�mÓ$×*Ñ*Ó,€IÙÜÐ.Ô/ØäÐ6Ó7×=Ñ=Ó?ÒGÀ4€FÜÐ4Ó5×;Ñ;Ó=ÒEÀ€EÜÐ.Ó/×5Ñ5Ó7Ò?¸4€DÜÐ5Ó6×<Ñ<Ó>ÒFÀ$€Gà�\Ñ"€Gà$×1Ñ1Ø ØØØØð 2ó Ñ€J�
ô 
ˆJ�z $ 3Ð'Ð(¨Ð
,Ô-Ü	ˆ.Ôà—=‘=ØØ"Ø�gÑØ�xÑ Ø�gÑØ˜+Ñ&Ø˜^Ñ,Ø˜+Ñ&ð !ó 	�L€FˆDñ Ø�x‰x˜ Ó"ˆÜ—L‘L“N×+Ñ+¨OÓ<ˆ	Ø˜Y˜K u¨T¨F°$Ð7ˆÜ—7‘7—<‘<¤
¨M¸8ÓDˆØ×Ñ˜ ™ HÔ-Ü�˜x˜jÐ)Õ*äÐ0Õ1rU   c                  óÈ  — 	 t        «       } t        | «      \  }}}t	        t
        «      }|€d}d}n@t        |t        «      rdnd}t        |t        «      r|j                  «       n|j                  }t        «        t        dt        |j                  «       «      › �«       t        dt        |j                  «      › d�«       t        d	|› d
|› d�«       	 t        |«       t        d«      j!                  «       }|dk(  rt#        | |||d«       n±|dk(  rt#        | |||d«       nœ|dk(  rt%        | |||«       nˆ|dk(  rt'        |«       nw|dk(  rt)        |«       nf|dk(  rt+        |«       nU|dk(  rt-        |«       nD|dk(  rt/        ||«       n2|dk(  rt1        | ||||d«       n|dk(  rt        d«       y t        d«       Œë# t        $ r}t        d|› �«       Y d }~y d }~ww xY w)Nu   Error cargando configuraciÃ³n: zninguno (DeepSeek retirado)Ú-rƒ   r„   zPersonajes: zWildcards: z tipos cargadosu   DiseÃ±ador: rp   r  u   Selecciona una opciÃ³n: Ú1r—   Ú2r˜   Ú3Ú4Ú5Ú6Ú7Ú8Ú9Ú0z
Hasta luego!zOpcion no valida)r!   r~   rS   rO   r   r=   r†   r	   Ú_get_current_modelr(   rV   rb   ra   Ú	wildcardsrX   r¢   r?   r  r  rk   rx   r€   r‹   r«   rþ   )	rD   rª   rF   r'   rL   re   rˆ   Údesigner_modelÚopcions	            r    Úmainr!    sÕ  € ðÜ“ˆô
 +¨6Ó2Ñ€Eˆ6�8ÜœHÓ%€GàÐØ5ˆØ‰ä3=¸hÔHZÔ3[Ñ/ÐayˆÜ:DÀXÔOaÔ:b˜×4Ñ4Ô6Ðhp×hvÑhvˆä„NÜ	ˆLœ˜W×8Ñ8Ó:Ó;Ð<Ð
=Ô>Ü	ˆKœ˜G×-Ñ-Ó.Ð/¨Ð
?Ô@Ü	ˆL˜˜ r¨.Ð)9¸Ð
;Ô<à
Ü�8ÔÜÐ1Ó2×8Ñ8Ó:ˆà�SŠ=Ü�f˜e V¨W°lÕCØ�sŠ]Ü�f˜e V¨W°jÕAØ�sŠ]Ü�v˜u f¨gÕ6Ø�sŠ]Ü˜GÕ$Ø�sŠ]Ü˜7Õ#Ø�sŠ]Ü˜ÕØ�sŠ]Ü˜HÕ%Ø�sŠ]Ü$ X¨wÕ7Ø�sŠ]Ü˜ ¨°¸À<ÕPØ�sŠ]ÜÐ"Ô#ØäÐ$Ô%ð5 øô' ò ÜÐ/°¨sÐ3Ô4Üûðús   ‚
G  Ç 	G!Ç	GÇG!Ú__main__)N)r—   )1r   ÚsysrØ   Úloggingr   r   r   ÚinsertÚdirnameÚabspathÚ__file__Ú
api_clientr   r   Úprompt_builderr   Úvision_criticr   r)   r   r	   ÚImportErrorr=   r   r   rÝ   ÚLOGS_DIRrÞ   ÚbasicConfigÚINFOÚFileHandlerÚStreamHandlerÚ	getLoggerÚ__name__r;   r!   rO   rV   rX   rk   rx   r€   r‹   r«   rþ   r  r  r  r!  rT   rU   r    Ú<module>r4     sÀ  ðÛ 	Û 
Û Û Û Ý à ‡�‡���2—7‘7—?‘? 2§7¡7§?¡?°8Ó#<Ó=Ô >ç 0Ý (Ý &ðßBð
 �7‰7�?‰?˜2Ÿ7™7Ÿ?™?¨2¯7©7¯?©?¸8Ó+DÓEÓF€Ø�W‰W�\‰\˜( HÓ-€
Ø�W‰W�\‰\˜( HÓ-€
Ø�7‰7�<‰<˜ &Ó)€à €‡�ˆJ Õ &Ø €‡�ˆH˜tÕ $à €× Ñ Ø
�,‰,Ø4àˆ×Ñ˜BŸG™GŸL™L¨°<Ó@È7ÔSØˆ×ÑÓðõð 
ˆ×	Ñ	˜8Ó	$€ò!ò2#òjóò :ò+òQò9ò6órEòP.ó0bòJ-2ò`0&ðf ˆzÒÙ…Fð øðo ò Ø€NØÓðús   Á>G8 Ç8	HÈH