Ë
    @ÙÆj&"  ã                   óè  — d Z ddlZddlZddlZddl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mZmZmZmZ e
dz  dz  Ze
dz  d	z  Zd
Z ej2                  dej4                  «      Z ej2                  dej4                  «      Z ej2                  dej4                  «      Z ej2                  dej4                  «      Z ej2                  dej4                  «      Z ej2                  dej4                  «      Z d„ Z!d„ Z"d„ Z#d„ Z$d„ Z%e&dk(  r e%«        yy)aâ  
Reporte de los bloques PENDIENTES de revision (REJECT con motivo 'REVISAR PROMPT').

Para cada uno te da lo que hace falta para decidir si se queda o se va:
  - que imagenes hay que mirar (los .png de Output/test_blocks/<pool>/)
  - el .txt de origen del WD14
  - el LoRA y la linea COMPLETA del personaje tal cual va en el prompt
  - los CHOQUES entre la linea del personaje y el bloque de pose

Un choque es cuando el personaje y el bloque se contradicen, y el bloque pierde.
Los casos que mas se han visto en las auditorias:
  - el LoRA trae ROPA horneada y el bloque pide 'nude'  (Yelan, Furina, Nilou)
  - el LoRA fue entrenado con un TAMANO de busto que el bloque no puede cambiar
  - el bloque trae 'solo' y a la vez pide 1boy/hetero (dos personas)
  - el personaje es de complexion pequena y el bloque empuja a 'breasts'

    python Engine/review_pendientes.py
    python Engine/review_pendientes.py --pool explicit
    python Engine/review_pendientes.py --block 7      # ver uno solo
é    N)ÚPath)ÚPromptBuilder)ÚREJECTÚ
DOWNWEIGHTÚapply_weightÚseverityÚstrip_weights_ofÚArchivosÚwildcards_harvestÚOutputÚtest_blocks)ÚdesnudoÚvestidoÚsfwÚspicyÚexplicitÚsfw_vestidoÚspicy_vestidoÚexplicit_vestidoa  shirt|blouse|dress|skirt|panties|^bra$|.*_bra$|thighhighs|thigh_highs|kneehighs|stockings|pantyhose|uniform|gloves|socks|shoes|boots|jacket|coat|sweater|apron|lingerie|bikini|swimsuit|leotard|bodysuit|harness|collar|^tie$|necktie|bow|ribbon|scarf|^belt$|jewelry|earrings|necklace|neckwear|bracelet|anklet|wristband|armband|robe|kimono|armor|^top$|top_|bottom$|legwear|underwear|^pants$|corset|garter|stocking|camisole|cardigan|blazer|waistband|choker|^hat$|^cap$|^shoes$|^boots$|arm_warmers|leg_warmers|tights|sock_pulled_upz±large_breasts|small_breasts|medium_breasts|huge_breasts|big_breasts|giant_breasts|flat_chest|small_chest|medium_chest|large_chest|breast_size|solop breasts|small_tits|large_titsz9^nude$|completely_nude|topless|bottomless|undressed|nakedz,^1boy$|^hetero$|^couple$|^group_sex$|^twins$z^breasts$|^boobs$|^tits$|^bust$zw^loli$|^child$|^shota$|^minigirl$|^petite$|^slim$|^slender$|^small_breasts$|^medium_breasts$|^flat_chest$|^small_chest$c                 óà   — t         | z  |z  }|j                  «       r|S dD ]%  }t         | z  |z  |z  }|j                  «       sŒ#|c S  t        t         j                  |«      «      }|r|d   S |S )zÏLocaliza el PNG reales. Prioridad: <pool>/, luego las carpetas de
    veredicto (APROBADO / DESCARTADO / REVISAR PROMPT) que creaste tu, porque
    moviste ahi los ficheros y la ruta del manifest ya no vale.)ÚAPROBADOÚ
DESCARTADOzREVISAR PROMPTÚrevisarr   )ÚTEST_BLOCKSÚexistsÚlistÚrglob)ÚpoolÚfnameÚdirectÚverdictÚcandÚhitss         ú:C:\Users\Usuario\Downloads\NEW\Engine\review_pendientes.pyÚ
find_imager%   C   sv   € ô ˜4Ñ %Ñ'€FØ‡}�}„ØˆÛJˆÜ˜TÑ! GÑ+¨eÑ3ˆØ�;‰;�=ØŠKð Kô ”×!Ñ! %Ó(Ó)€DÙˆ4�‰7Ð& Ð&ó    c                  ó®  ‡— i } t        t        j                  d«      «      D �]  }|j                  j                  }	 t        j                  |j                  d¬«      «      }|D ]Û  }|j                  d«      xs d}t        |«      j                  }|sŒ0|j                  dd«      Š|j                  d«      }|r|t        vrt        ˆfd„t        D «       d	«      xs |}| j                  |g «      j                  |‰t        |‰«      |j                  d
d«      |j                  dd«      |j                  dd«      dœ«       ŒÝ �Œ" | S # t        $ r Y �Œ1w xY w)a…  -> {nombre_txt_origen: [(pool, file, char, block, prompt), ...]}

    OJO: los manifestsViejos estan en la RAIZ de Output/test_blocks/ (antes de
    que el pool fuera subcarpeta) y los nuevos en la subcarpeta del pool. El
    pool de los viejos no viene en el manifest, asi que se deduce del tag que
    lleva el nombre del PNG. Sin esto saldrian rutas tipo 'test_blocks/test_blocks'.
    zmanifest_*.jsonz	utf-8-sig)ÚencodingÚoriginal_txtÚ Úfiler   c              3   ó4   •K  — | ]  }d |› d �‰v sŒ|–— Œ y­w)Ú_N© )Ú.0Úpr   s     €r$   Ú	<genexpr>z!load_manifests.<locals>.<genexpr>j   s!   øè ø€ ÐH©
 1¸¸!¸¸A°hÀ%Ò6GœQ©
ùs   ƒ‘NÚcharÚblockÚprompt)r   r+   Úpathr2   r3   r4   )Úsortedr   r   ÚparentÚnameÚjsonÚloadsÚ	read_textÚ	ExceptionÚgetr   Ú
POOL_NAMESÚnextÚ
setdefaultÚappendr%   )	ÚoutÚmÚfolderÚdataÚeÚsrcr8   r   r   s	           @r$   Úload_manifestsrH   R   s<  ø€ ð €CÜ”K×%Ñ%Ð&7Ó8×9ˆØ—‘—‘ˆð	Ü—:‘:˜aŸk™k°;˜kÓ?Ó@ˆDó ˆAØ—%‘%˜Ó'Ò-¨2ˆCÜ˜“9—>‘>ˆDÙØØ—E‘E˜& "Ó%ˆEØ—5‘5˜“=ˆDÙ˜4¤zÑ1äÓH­
ÓHØ ó"ò ,Ø%+ð à�N‰N˜4 Ó$×+Ñ+ØØÜ" 4¨Ó/ØŸ™˜f bÓ)ØŸ™˜w¨Ó+ØŸ%™% ¨"Ó-ñ-õ ò ð :ð2 €Jøô+ ò 	Úð	ús   ½%EÅ	EÅEc                  óœ   — t        j                  «       D � �ci c]'  \  } }|j                  «       j                  d«      r| |“Œ) c}} S c c}} w )z-Los REJECT cuyo motivo empieza por 'REVISAR'.ÚREVISAR)r   ÚitemsÚupperÚ
startswith)r8   Úwhys     r$   Úpending_rejectsrO   w   sG   € ä'-§|¡|¤~ô 2¡~™)˜$ Ø�y‰y‹{×%Ñ% iÔ0ð �#‰I ~ò 2ð 2ùó 2s   ˜,Ac           	      ól  — | j                  d«      D �cg c]#  }|j                  «       sŒ|j                  «       ‘Œ% }}|D �cg c]  }|j                  «       ‘Œ }}t        |«      j                  d«      D �cg c]#  }|j                  «       sŒ|j                  «       ‘Œ% }}g }|D �cg c],  }t        j                  |«      sŒ|j                  d«      rŒ+|‘Œ. }}|D �cg c]  }t        j                  |«      sŒ|‘Œ }}|r<|r:|j                  dddj                  |dd «      › ddj                  |«      › �f«       |D �cg c]  }t        j                  |«      sŒ|‘Œ }	}|	r%|j                  d	dj                  |	«      › d
�f«       t        d„ |D «       «      rd|v }
|
r|j                  d«       t        d„ |D «       «      rM|D �cg c]  }t        j                  |«      sŒ|‘Œ }}|r&|j                  dddj                  |«      › d�f«       |S c c}w c c}w c c}w c c}w c c}w c c}w c c}w )zJTags del personaje y del bloque que se contradicen. -> [(motivo, detalle)]Ú,z<lorazropa horneada vs desnudazpersonaje trae z, Né   z | bloque pide ztamano de busto fijo en el LoRAz  - el bloque no lo puede cambiarc              3   óF   K  — | ]  }t         j                  |«      –— Œ y ­w©N)ÚPAIRSÚmatch©r/   Úts     r$   r1   zclashes.<locals>.<genexpr>�   s   è ø€ Ð
&¡2˜aŒ5�;‰;�q�>¡2ùó   ‚!Úsolo)z*'solo' dentro de un bloque de dos personaszPel MASTER tambien pone 1girl,solo -> el 'solo' del bloque puede borrar al hombrec              3   óF   K  — | ]  }t         j                  |«      –— Œ y ­wrT   )ÚBREASTSrV   rW   s     r$   r1   zclashes.<locals>.<genexpr>—   s   è ø€ Ð
(¡R Œ7�=‰=˜×¡RùrY   z)bloque con 'breasts' en personaje pequenozpersonaje: z | bloque: breasts)ÚsplitÚstripÚlowerr	   ÚCLOTHINGÚsearchrM   ÚNUDITYrA   ÚjoinÚ	BUST_SIZEÚanyÚSMALL_FRAME)Ú	char_liner3   rX   ÚctagsÚclÚblrB   ÚwearÚnudeÚbsrZ   Úsmalls               r$   Úclashesro   }   s  € à )§¡°Ô 4ÓBÑ 4˜1¸¿¹½	ˆQ�W‰W�YÐ 4€EÐBÙ"Ó	#™U˜ˆ!�'‰'�)˜U€BÐ	#Ü-¨eÓ4×:Ñ:¸3Ô?Ó	MÑ?˜À1Ç7Á7Å9ˆ!�'‰'�)Ð?€BÐ	Mà
€CáÓQ‘u�!¤§¡°Õ 2¸1¿<¹<ÈÕ;PŠA�u€DÐQÙÓ.‘r�!œVŸ]™]¨1Õ-ŠA�r€DÐ.Ù‘Ø�
‰
Ð.Ø% d§i¡i°°R°a°Ó&9Ð%:¸/È$Ï)É)ÐTXË/ÐIZÐ[ð]ô 	^ñ Ó	2‘U�œi×.Ñ.¨qÕ1Š!�U€BÐ	2Ù	Ø�
‰
Ð5Ø—y‘y “}�oÐ%EÐFðHô 	Iô Ñ
&¡2Ó
&Ô&Ø˜ˆ|ˆÙØ�J‰Jð 2ô 3ô Ñ
(¡RÓ
(Ô(Ù!Ó;™E�q¤[×%7Ñ%7¸Õ%:’˜EˆÐ;ÙØ�J‰JÐCØ% d§i¡i°Ó&6Ð%7Ð7IÐJðLô Mð €Jùò= CùÚ	#ùÚ	Mùò RùÚ.ùò
 
3ùò <sR   ”HªHÁHÁ7HÂHÂ'H"ÃH"ÃH"ÃH'Ã9H'ÅH,ÅH,ÇH1Ç#H1c                  óò  — t        j                  d¬«      } | j                  dd d¬«       | j                  dt        d d¬«       | j	                  «       }t        «       }t        «       }|st        d	«       y t        t        t        «      «      }d
}t        t        |j                  «       «      «      D �]¤  \  }\  }}|j                  �||j                  k7  rŒ&|dz  }|j                  |g «      }	|j                   r"|	D �
cg c]  }
|
d   |j                   k(  sŒ|
‘Œ }	}
t        d«       t        d|› d|› �«       t        d|› �«       |	st        d«       Œ£|	d d D ]ú  }
|j#                  |
d   «      }|r|d   nd}|
d   }|j%                  «       r|j'                  t        j(                  «      n|}|j%                  «       rdnd}t        d|› |› �«       t        d|
d   › �«       t        d|› �«       t        d|
d   d d › �«       t+        ||
d   «      }|r2t        d«       |D ]!  \  }}t        d |› �«       t        d!|› �«       Œ# Œðt        d"«       Œü �Œ§ t        d«       t        |› d#�«       y c c}
w )$Nz!Detalle de los bloques pendientes)Údescriptionz--poolzfiltra por pool de la imagen)ÚdefaultÚhelpz--blockzsolo el .txt de origen n)Útyperr   rs   z([!] No hay bloques pendientes de revisarr   é   r   zN==============================================================================Ú[z] z    motivo : zC    (sin imagenes generadas todavia: no hay manifest con este .txt)é   r2   Úbasez(personaje no encontrado)r5   r*   z  [NO ENCONTRADO]z
    --- MIRAR: z    personaje: z    LoRA+tags: z    bloque   : r3   é–   z    CHOQUES:z      ! z        z(    CHOQUES: ninguno detectado por reglaz bloques pendientes listados)ÚargparseÚArgumentParserÚadd_argumentÚintÚ
parse_argsrH   rO   Úprintr   ÚstrÚBASE_DIRÚ	enumerater6   rK   r3   r=   r   Úget_characterr   Úrelative_tor7   ro   )r0   ÚargsÚmansÚpendÚBÚnÚir8   rN   r#   Úhr2   Úliner5   ÚrelÚmarkri   ÚmotÚdets                      r$   Úmainr‘       sV  € Ü×ÑÐ,OÔP€AØ‡N�N�8 TÐ0N€NÔOØ‡N�N�9¤3°Ð;U€NÔVØ�<‰<‹>€DäÓ€DÜÓ€DÙÜÐ8Ô9Øä”cœ(“mÓ$€AØ	€AÜ#¤F¨4¯:©:«<Ó$8×9‰ˆ‰;ˆD�#Ø�:‰:Ð! a¨4¯:©:¢oØØ	ˆQ‰ˆØ�x‰x˜˜bÓ!ˆØ�9Š9Ù#Ó>™t˜! q¨¡y°D·I±IÓ'=’A˜tˆDÐ>äˆhŒÜ��!��B�t�fˆoÔÜ�˜c˜UÐ#Ô$ÙÜÐWÔXØØ�b�q“ˆAØ—?‘? 1 V¡9Ó-ˆDÙ#'�4˜’<Ð-HˆDØ�V‘9ˆDØ7;·{±{´}�$×"Ñ"¤8§?¡?Ô3È$ˆCØŸ™œ‘2Ð,?ˆDÜÐ% c U¨4¨&Ð1Ô2Ü�O A f¡I ;Ð/Ô0Ü�O D 6Ð*Ô+Ü�O A g¡J¨t°Ð$4Ð#5Ð6Ô7Ü˜˜q ™zÓ*ˆBÙÜ�nÔ%Û "‘H�C˜Ü˜H S EÐ*Ô+Ü˜H S EÐ*Õ+ñ !#ô Ð@ÕAò# ð :ô@ 
ˆ(„OÜ	ˆQˆCÐ+Ð
,Õ-ùò7 ?s   Ã?I4ÄI4Ú__main__)'Ú__doc__rz   r9   ÚreÚsysÚpathlibr   Ú__file__Úresolver7   r�   r5   Úinsertr€   Úprompt_builderr   Úwd14_blocksr   r   r   r   r	   ÚHARVESTr   r>   ÚcompileÚIr`   rd   rb   rU   r\   rf   r%   rH   rO   ro   r‘   Ú__name__r.   r&   r$   Ú<module>r       sp  ðñó( Û Û 	Û 
Ý á�‹>×!Ñ!Ó#×*Ñ*×1Ñ1€Ø ‡�‡��‘3‘t˜H“~×-Ñ-Ó/×6Ñ6Ó7Ô 8Ý (÷õ ð �ZÑ
Ð"5Ñ
5€Ø˜Ñ! MÑ1€ðB€
ð ˆ2�:‰:ð=ð ‡D�Dó
€ð ˆB�J‰Jð7ð ‡D�Dó	€	ð 
ˆ�‰ÐPÐRT×RVÑRVÓ	W€Øˆ�
‰
ÐBÀBÇDÁDÓI€Ø
ˆ"�*‰*Ð7¸¿¹Ó
>€Øˆb�j‰jðCà‡D�Dó€ò'ò"òJ2ò òF/.ðd ˆzÒÙ…Fð r&   