Ë
    ¡ÖÈjö  ã                   ó|  — d Z ddlZ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 ddlm	Z	  e	e
«      j                  «       j                  j                  Zej                  j                  d e e	e
«      j                  «       j                  «      «       ddlmZ ddlmZ edz  dz  Zd	Zd
„ Zd„ Zd„ Zedk(  r e«        yy)aû  
Regenera los APROBADOS con el ensamblador actual (BREAK + hombre simplificado
+ dedupe de conteos + hombre reducido en POV).

No manipula el prompt viejo con regex: reconstruye desde la linea del personaje
y el bloque, que es lo que hace test_blocks.py. Asi el regenerado y una
generacion normal dan EXACTAMENTE el mismo prompt.

    python Engine/regen_aprobados.py --dry-run
    python Engine/regen_aprobados.py --pool explicit

Salida en Output/test_blocks/<pool>/REGEN/ (mismos nombres que APROBADO/).
é    N)Údatetime)ÚPath)ÚPromptBuilder)Úassemble_promptÚOutputÚtest_blockszhttp://127.0.0.1:7860c                 ó^  — i }t        t        j                  d«      «      D ]z  }	 t        j                  |j                  d¬«      «      }|D ]M  }|j                  dd«      }|sŒ||vsŒ|j                  d«      sŒ/|j                  d«      sŒA|d   |d   f||<   ŒO Œ| |S # t        $ r Y ŒŠw xY w)zÏ-> {nombre_png: (char, block)}.

    Fusiona TODOS los manifests: algunas imagenes se generaron en corridas
    viejas cuyo manifest no es el mas grande, asi que si solo se mira el mayor
    se pierden.
    úmanifest_*.jsonú	utf-8-sig©ÚencodingÚfileÚ ÚcharÚblock)ÚsortedÚTEST_BLOCKSÚrglobÚjsonÚloadsÚ	read_textÚ	ExceptionÚget)ÚpoolÚoutÚmÚdataÚeÚfs         ú8C:\Users\Usuario\Downloads\NEW\Engine\regen_aprobados.pyÚ
load_batchr!       s¬   € ð €CÜ”K×%Ñ%Ð&7Ó8Ö9ˆð	Ü—:‘:˜aŸk™k°;˜kÓ?Ó@ˆDó ˆAØ—‘�f˜bÓ!ˆAÚ�Q˜c’\ a§e¡e¨F¥m¸¿¹¸g½Ø˜F™) Q w¡ZÐ0��A’ñ ð :ð €Jøô ò 	Ùð	ús   ¥%B Â 	B,Â+B,c                 óî  — t         dz  dz  }|dz  }|j                  «       si S i }|j                  d¬«      j                  «       D ]k  }d|vs|j	                  d«      rŒ|j                  d«      \  }}}|j                  |g «      j                  t        |«      |j                  d«      d	   f«       Œm i }|j                  «       D ]§  \  }}	|d
|z  z  }
|
j                  «       sŒ|
j                  d¬«      j                  «       D �cg c]3  }|j                  «       r!|j	                  d«      s|j                  «       ‘Œ5 }}t        |	«      D ]  \  }\  }}|t        |«      k  sŒ||   ||<   Œ! Œ© |S c c}w )al  -> {.txt de origen: bloque CURADO del pool}.

    Importa: el manifest guarda el bloque TAL COMO ESTABA cuando se genero la
    imagen. Si despues se limpio el bloque (por ejemplo quitando 'solo_focus',
    que rompia la escena), el manifest se queda obsoleto y regenerar desde ahi
    reintroduce el tag que acabamos de eliminar. El pool es la version buena.
    ÚArchivosÚwildcards_harvestzbloques_indice.txtúutf-8r   Ú	Ú#Ú/éÿÿÿÿzbloques_%s.txt)ÚBASE_DIRÚexistsr   Ú
splitlinesÚ
startswithÚsplitÚ
setdefaultÚappendÚintÚitemsÚstripÚ	enumerateÚlen)r   ÚhÚidxÚper_poolÚlineÚgiÚsevÚorgr   r2   r   ÚlÚlinesÚposÚnames                  r    Úload_current_blocksrA   4   sl  € ô 	�:ÑÐ 3Ñ3€AØ
Ð"Ñ
"€CØ�:‰:Œ<Øˆ	Ø€HØ—‘ w�Ó/×:Ñ:Ö<ˆØ�tÑ˜tŸ™¨sÔ3ØØ—z‘z $Ó'‰ˆˆC�Ø×Ñ˜C Ó$×+Ñ+¬S°«W°c·i±iÀ³nÀRÑ6HÐ,IÕJð	 =ð
 €CØ—n‘nÖ&‰
ˆˆUØÐ! CÑ'Ñ(ˆØ�x‰xŒzØØ$%§K¡K¸ KÓ$A×$LÑ$LÔ$Nó 9Ñ$N˜qØ—G‘G”I a§l¡l°3Ô&7ð —‘•Ð$Nˆð 9ô  )¨Ö/‰OˆC‘�"�dØ”S˜“ZÓØ! #™J��D’	ñ  0ð 'ð €Jùò9s   Ä8E2c                  ój  — t        j                  d¬«      } | j                  dd¬«       | j                  dt        dd¬	«       | j                  d
d¬«       | j                  dt        d¬«       | j                  ddd d¬«       | j	                  «       }t
        |j                  z  dz  }t        |j                  «      }t        |j                  «      }t        t        t        «      «      }t        d„ |j                  d«      D «       «      }|j                  r|D �cg c]  }||j                  v sŒ|‘Œ }}i }t        t
        j                  d«      «      D ]t  }		 t!        j"                  |	j%                  d¬«      «      }
|
D ]G  }|j)                  dd«      }|sŒ||vsŒt+        |j)                  d«      xs d«      j,                  ||<   ŒI Œv g g }}|D ]»  }||vr|j/                  |«       Œ||   \  }}|j1                  |«      }|j)                  |«      }|r	||v r||   }|r|s|j/                  |«       Œdt3        t5        |j6                  d«      «      D ]6  }t9        |j:                  |d   |«      \  }}|j/                  ||||||f«       Œ8 Œ½ t=        t?        |«      › d|j                  › d�«       |r,t=        t?        |«      › d �«       |D ]  }t=        d!|› �«       Œ |j@                  rJ|D ]D  \  }}}}}}t=        d"«       t=        ||j6                  dkD  rd#|dz   z  ndz   «       t=        |«       ŒF y t
        |j                  z  d$z  }|jC                  d%d%¬&«       d'd l"}g }tG        |d«      D �]u  \  }\  }}}}}}||jH                  d(d)|jJ                  d*d+ddd,d-d.œ}|d d/ }|j6                  dk  r|n
|› d0|dz   › d1�}t=        d2|› d3t?        |«      › d4|› �«       	 tM        jL                  «       }|jO                  tP        › d5�|d6¬7«      } | jS                  «        | j!                  «       }!||z  jU                  tW        jX                  |!d8   d'   «      «       	 t!        j"                  |!j)                  d9d:«      «      j)                  d;d<«      }"t=        d=tM        jL                  «       |z
  d>›d?|"› d@|j[                  dA«      › �«       |j/                  ||||"|||dz   dBœ«       �Œx t]        j^                  «       ja                  dD«      }#|dE|#› dF�z  jc                  t!        jd                  |dGd¬H«      dI¬«       t=        dJt?        |«      › dK|› �«       t=        dL|#› dM�«       y c c}w # t&        $ r Y �Œ%w xY w# t&        $ r d<}"Y Œ÷w xY w# t&        $ r}t=        dC|› �«       Y d }~�Œ9d }~ww xY w)NNz'Regenera APROBADOS (ensamblador actual))Údescriptionz--poolÚexplicit)Údefaultz--variationsé   zseeds por imagen)ÚtyperE   Úhelpz	--dry-runÚ
store_true)Úactionz--stepsé   )rG   rE   z--onlyr0   z.regenera solo estos nombres de png (repetible))rJ   rE   rH   ÚAPROBADOc              3   ó4   K  — | ]  }|j                   –— Œ y ­w)N)r@   )Ú.0r   s     r    Ú	<genexpr>zmain.<locals>.<genexpr>e   s   è ø€ Ð5Ñ"4˜Q�!—&•&Ñ"4ùs   ‚z*.pngr
   r   r   r   r   Úoriginal_txtÚbasez a regenerar en z/REGEN/z5 sin datos en el manifest (no se pueden reconstruir):z    zK
==========================================================================z  (variacion %d)ÚREGENT)ÚparentsÚexist_okr   i@  iÀ  g      @zDPM++ 2M Karrasr)   é   )ÚpromptÚnegative_promptÚwidthÚheightÚstepsÚ	cfg_scaleÚsampler_nameÚ
batch_sizeÚn_iterÚseedÚ	clip_skipéüÿÿÿÚ_vz.pngÚ[r(   z] z/sdapi/v1/txt2imgi,  )r   ÚtimeoutÚimagesÚinfoz{}r_   Ú?z	    [OK] z.0fzs seed=z BREAKs=ÚBREAK)r   r   r   r_   rV   ÚsegmentsÚ	variacionz    [FAIL] z%Y%m%d_%H%M%SÚregen_z.jsonF)Úensure_asciiÚindentr%   z
[OK] z -> z[OK] regen_z".json (prompt + segmentos + block))3ÚargparseÚArgumentParserÚadd_argumentr1   Ú
parse_argsr   r   r!   rA   r   Ústrr*   r   ÚglobÚonlyr   r   r   r   r   r   r   r@   r0   Úget_characterÚrangeÚmaxÚ
variationsr   Úmaster_promptÚprintr5   Údry_runÚmkdirÚrequestsr4   rW   rZ   ÚtimeÚpostÚFORGEÚraise_for_statusÚwrite_bytesÚbase64Ú	b64decodeÚcountr   ÚnowÚstrftimeÚ
write_textÚdumps)$ÚpÚargsÚapprÚbatchÚcurrentÚBÚpngsÚp_Ú	origin_ofr   r   r   r   ÚjobsÚskipÚpngÚckeyr   ÚchÚorigÚvr?   ÚsegsÚsÚoutdirr}   ÚmanifestÚiÚpayloadÚstemr@   Út0ÚrÚdr_   Ústamps$                                       r    Úmainr¥   U   s}  € Ü×ÑÐ,UÔV€AØ‡N�N�8 Z€NÔ0Ø‡N�N�>¬°QØ*ð ô ,à‡N�N�; |€NÔ4Ø‡N�N�9¤3°€NÔ3Ø‡N�N�8 H°dØHð ô Jà�<‰<‹>€Dä˜Ÿ™Ñ" ZÑ/€DÜ�t—y‘yÓ!€EÜ! $§)¡)Ó,€GÜ”cœ(“mÓ$€AäÑ5 $§)¡)¨GÔ"4Ó5Ó5€DØ‡y‚yÙ!Ó5™T�r R¨4¯9©9¢_’˜TˆÐ5ð €IÜ”K×%Ñ%Ð&7Ó8Ö9ˆð	Ü—:‘:˜aŸk™k°;˜kÓ?Ó@ˆDó ˆAØ—‘�f˜bÓ!ˆAÚ�Q˜iÒ'Ü# A§E¡E¨.Ó$9Ò$?¸RÓ@×EÑE�	˜!’ñ ð :ð �Rˆ$€DÛˆØ�eÑØ�K‰K˜ÔØØ˜C‘j‰ˆˆeØ�_‰_˜TÓ"ˆð �}‰}˜SÓ!ˆÙ�D˜G‘OØ˜D‘MˆEÙ™Ø�K‰K˜ÔØÜ”s˜4Ÿ?™?¨AÓ.Ö/ˆAÜ'¨¯©¸¸F¹ÀUÓK‰IˆC�Ø�K‰K˜˜d E¨3°°aÐ8Õ9ñ 0ð ô& 
ŒS�‹YˆKÐ'¨¯	©	 {°'Ð
:Ô;ÙÜ”�T“�ÐPÐQÔRÛˆAÜ�D˜˜�*Õð ð ‡|‚|Û.2Ñ*ˆC��u˜c 4¨Ü�/Ô"Ü�#¸¿¹È1Ò9LÐ+¨q°1©uÒ5ÐRTÑUÔVÜ�#�Jð /3ð 	ä˜4Ÿ9™9Ñ$ wÑ.€FØ
‡L�L˜¨€LÔ-ãØ€HÜ/8¸¸q×/AÑ+ˆÑ+ˆC��u˜c 4¨Ø °Q×5FÑ5FØ¨4¸$¿*¹*Ø #Ð5FØ!"¨a¸È!ñMˆð
 �3�BˆxˆØ—o‘o¨Ò*‰s°4°&¸¸1¸q¹5¸'ÀÐ0FˆÜ��!��A”c˜$“i�[  4 &Ð)Ô*ð	%Ü—‘“ˆBØ—‘¤ Ð'8Ð9ÀÐQT�ÓUˆAØ×ÑÔ Ø—‘“ˆAØ�d‰]×'Ñ'¬×(8Ñ(8¸¸8¹ÀQ¹Ó(HÔIðÜ—z‘z !§%¡%¨°Ó"5Ó6×:Ñ:¸6À3ÓG�ô �IœdŸi™i›k¨"™n¨SÐ1°¸¸¸hÀsÇyÁyÐQXÓGYÐFZÐ[Ô\Ø�O‰O T°4À%Ø%)°SÀdØ*+¨a©%ñ1ö 2ð) 0Bô4 �L‰L‹N×#Ñ# OÓ4€EØ��u�g˜UÐ#Ñ#×/Ñ/Ü�
‰
�8¨%¸Ô:ÀWð 0ô Nä	ˆG”C˜“M�? $ v hÐ
/Ô0Ü	ˆK˜�wÐ@Ð
AÕBùòe 6øô ò 	Úð	ûô| ò Ø’ðûô ò 	%Ü�K ˜sÐ#×$Ò$ûð	%ús\   ÄU*Ä0U*Å%U/Ï#A<VÑ 5U?ÒAVÕ/	U<Õ;U<Õ?VÖ
VÖVÖVÖ	V2ÖV-Ö-V2Ú__main__)Ú__doc__rn   rƒ   r   ÚreÚsysr~   r   Úpathlibr   Ú__file__ÚresolveÚparentr*   ÚpathÚinsertrr   Úprompt_builderr   r   r   r   r€   r!   rA   r¥   Ú__name__© ó    r    Ú<module>r´      s­   ðñó Û Û Û 	Û 
Û Ý Ý á�‹>×!Ñ!Ó#×*Ñ*×1Ñ1€Ø ‡�‡��‘3‘t˜H“~×-Ñ-Ó/×6Ñ6Ó7Ô 8Ý (Ý 'à˜Ñ! MÑ1€Ø€òò(òBdCðN ˆzÒÙ…Fð r³   