Ë
    ÅWå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mZ ej                  j                  dd¬«        ee
«      j                  «       j                  j                  Zej                  j                  d eedz  «      «       ej                  j                  d eedz  «      «       ddlZddlZdd	lmZ d
Zd„ Zd„ Zedk(  r e«        yy)aã  
regen_batch_items: regenera imagenes sueltas de un batch de `batch_poses_chars`.

Reconstruye el job EXACTO (mismo tema, mismas variantes de outfit/escena/luz/
props, misma camara y mismo dress) leyendo `plan.json` + `manifest_all.json`, y
solo cambia la semilla (aleatoria). Sirve para corregir una imagen sin tocar el
resto del lote: lo viejo se mueve a `<char>/_reemplazadas/`.

    python Engine/regen_batch_items.py --run "Output/pilots/.../BATCH_X"         --items "clave:pose_id,clave:pose_id" --dry-run
    python Engine/regen_batch_items.py --run "..." --items "..." [--neg-extra "..."]

Nota: el prompt nuevo sale de la linea ACTUAL del banco y del outfit ACTUAL del
tema, asi que primero hay que corregir el banco/themes.json.
é    N)ÚPathúutf-8Úbackslashreplace)ÚencodingÚerrorsÚEngineÚArchivos)ÚPromptBuilder)Ú	sugerenteÚspicyÚ	explicitoc                 óz  — g }| j                  d«      D ]Ÿ  }|j                  «       }|sŒ|j                  d«      D �cg c]  }|j                  «       ‘Œ }}t        |«      dk  st        |«      dkD  rt        d|› d�«      ‚|d   |d   }}t        |«      dk(  r|d   nd	}|j	                  |||f«       Œ¡ |S c c}w )
z9`clave:pose_id[:stage]` -> [(clave, pose_id, stage|None)]Ú,Ú:é   é   z'[!] item sin 'clave:pose_id[:stage]': 'Ú'r   é   N)ÚsplitÚstripÚlenÚ
SystemExitÚappend)ÚtextÚoutÚchunkÚpÚpartsÚcharÚposeÚstages           úEngine/regen_batch_items.pyÚparse_itemsr#   $   s¾   € à
€CØ—‘˜C–ˆØ—‘“ˆÙØØ$)§K¡K°Ô$4Ó5Ñ$4˜q�—‘•Ð$4ˆÐ5Üˆu‹:˜Š>œS ›Z¨!š^ÜÐFÀuÀgÈQÐOÓPÐPØ˜1‘X˜u Q™xˆdˆÜ ›J¨!šO��a’°ˆØ�
‰
�D˜$ Ð&Õ'ð !ð €Jùò 6s   ½B8c                  óˆ  ‡.‡/‡0— t        j                  d¬«      } | j                  ddd¬«       | j                  ddd¬«       | j                  d	d d
¬«       | j                  dt        d d¬«       | j                  dt        d¬«       | j                  dd¬«       | j	                  «       }t        |j                  «      }|dz  }|dz  }|j                  «       r|j                  «       st        d|› d�«      ‚t        j                  |j                  d¬«      «      }t        j                  |j                  d¬«      «      }t        j                  «       }t        j                  «       }t        j                   «       }	t"        D �
ci c]  }
|
t        j$                  |
«      “Œ }}
t'        t)        t*        «      «      }|j,                  }|j.                  r|r|› d|j.                  › �n|j.                  }t1        |j2                  «      }t5        j6                  d«      }|j8                  s1t        j:                  «       st        dt        j<                  › d�«      ‚|D �]!  \  Š.Š/Š0t?        ˆ.fd„|d    D «       d «      }|st        d!‰.› d"�«      ‚t?        ˆ.ˆ/ˆ0fd#„|D «       d «      }|s#t        d!‰.› d$‰/› d%�‰0rd&‰0› d%�z   «      ‚d'z   «      ‚|jA                  d(«      xs ‰.}|jC                  ‰.«      }|st        d!‰.› d)�«      ‚|d*   }t"        D �
ci c]  }
|
|
|k(  rd+nd“Œ }}
|jA                  d,«      xs i j3                  «       D ��ci c]  \  }}|sŒ	||“Œ }}}|d-   }i }|jA                  d.«      r|d.   d+i|d/<   d|d0<   t        jD                  |gd+|d1||d2   d3||||	|fd+‰/gd4œ|¤Ž}tG        |«      d+k7  rt        d‰.› d5‰/› d6tG        |«      › d7�«      ‚|d   }|d8   |_$        |jJ                  |_%        t        jL                  |jN                  |d9   |«      }tQ        d:«       tQ        ‰.› d;|› d;‰/› d<|› d=|jH                  › �	«       tQ        d>|jR                  › �«       tQ        d?|jT                  › d@|jV                  xs dA› �«       tQ        dB|jX                  › �«       |j8                  r)tQ        dC«       tQ        dD|j[                  dEd;«      «       �Œy||z  }|dFz  }|dGz  } | j                  «       rt]        j^                  | «       t        j`                  |g|d9   |jN                  || |jJ                  |jb                  ‰.¬H«      \  }!}"|!s*tQ        dI‰.› d5‰/› �«       t]        j^                  | d¬J«       �Œ|!d   }#t        |#dK   «      jd                  }$t        |dK   «      jd                  }%|%jg                  dL«      d   }&|&› dL|$jg                  dLd+«      d+   › �}$||$z  }'|'j                  «       rt        dM|'› dN�«      ‚t]        jh                  t)        | t        |#dK   «      jd                  z  «      t)        |'«      «       t]        j^                  | d¬J«       ||%z  }(|(j                  «       rC|dOz  })|)jk                  dd¬P«       t]        jh                  t)        |(«      t)        |)|%z  «      «       tm        |#«      }#dQ|$› �|#dK<   |dRz  }*t        j                  |*j                  d¬«      «      }+|+D �,cg c]=  },|,jA                  dS«      ‰/k(  r%|,jA                  d.«      |jA                  d.«      k(  r|#n|,‘Œ? }+},|*jo                  t        jp                  |+dTd+¬U«      d¬«       |D �,cg c]H  },|,d(   |k(  r<|,dS   ‰/k(  r4|,jA                  d.«      |jA                  d.«      k(  ri |#¥||› d5|#dK   › �dVœ¥n|,‘ŒJ }},|jo                  t        jp                  |dTd+¬U«      d¬«       |dW   D ]U  }-|-dS   ‰/k(  sŒ|-jA                  d.«      |jA                  d.«      k(  sŒ0|-js                  |#d*   |#d8   |#d2   |#dX   |#dK   dYœ«       ŒW |d    |d <   |jo                  t        jp                  |dTd+¬U«      d¬«       tQ        dZ|%› d@|$› d[|#dX   › d\�«       �Œ$ |j8                  stQ        d]tG        |«      › d^|› �«       y y c c}
w c c}
w c c}}w c c},w c c},w )_Nz%Regenera imagenes sueltas de un batch)Údescriptionz--runTzcarpeta del batch (BATCH_...))ÚrequiredÚhelpz--itemszXclave:pose_id separados por coma (ej: 'ChamBronya...:pb0025,ASueStorm_character:pb0003')z--neg-extraz@tags extra para el NEGATIVE de estas imagenes (p.ej. 'backless'))Údefaultr'   z--seedz,semilla fija (default: aleatoria por imagen))Útyper(   r'   z--budgeté   )r)   r(   z	--dry-runÚ
store_true)Úactionz	plan.jsonzmanifest_all.jsonz[!] z9 no parece un batch (falta plan.json o manifest_all.json)r   )r   z, r   z[!] Forge NO responde en z. Arranca webui-user.bat --apic              3   ó4   •K  — | ]  }|d    ‰k(  sŒ|–— Œ y­w)r   N© )Ú.0ÚxÚchar_keys     €r"   Ú	<genexpr>zmain.<locals>.<genexpr>^   s   øè ø€ ÐJÑ 0˜1°A°f±IÀÓ4I”QÑ 0ùs   ƒ‘Úplanz[!] 'z' no esta en el planc              3   ó”   •K  — | ]?  }|j                  d «      xs |d   ‰k(  r"|d   ‰k(  r‰�|j                  d«      ‰k(  r|–— ŒA y­w)r   Úchar_dirÚpose_idNr!   )Úget)r/   Úrr1   r6   r!   s     €€€r"   r2   zmain.<locals>.<genexpr>a   sQ   øè ø€ ð D™{˜!ØŸ™˜f›Ò6¨¨:©¸8ÒCØ˜)™¨Ò/Ø˜¨!¯%©%°«.¸EÒ*Aô ™{ùs   ƒAAz' no tiene la pose 'r   z en el stage 'Ú r5   z' no esta en personajes.txtÚnivelr   ÚvariantsÚthemer!   Ústage_quotasÚallow_legacy_outfitÚfixedÚdressg        )Úmax_variantsÚbank_idsÚ/z: salieron z jobsÚcameraÚbasezZ==========================================================================================z | z | tema z | cam z  pose nueva: z  outfit:     z -> Ú-z  variants:   z	  prompt:z   Ú
ÚimgÚ
_regen_tmp)r   z$  [!] FALLO: no se genero nada para )Úignore_errorsÚfileÚ_z[!] ya existe z; borra o mueve antesÚ_reemplazadas)ÚparentsÚexist_okzimg/zpack_manifest.jsonr6   F)Úensure_asciiÚindent)r5   rK   ÚjobsÚseed)r:   rD   r@   rS   rK   z  [OK] z (seed Ú)z
[OK] z imagen(es) regeneradas en ):ÚargparseÚArgumentParserÚadd_argumentÚintÚ
parse_argsr   ÚrunÚexistsr   ÚjsonÚloadsÚ	read_textÚ	pose_bankÚ	load_bankÚ
load_avoidÚpbÚload_camerasÚLEVELSÚload_pool_linesr
   ÚstrÚBASE_DIRÚnegative_promptÚ	neg_extrar#   ÚitemsÚrandomÚRandomÚdry_runÚforge_availableÚFORGEÚnextr7   Úget_characterÚcompose_theme_jobsr   rD   rS   Úbuild_run_promptÚmaster_promptÚprintÚ	pose_lineÚ
outfit_keyÚoutfit_lineÚvariant_keysÚreplaceÚshutilÚrmtreeÚgenerateÚbudgetÚnamer   ÚmoveÚmkdirÚdictÚ
write_textÚdumpsÚupdate)1r   ÚargsÚrun_dirÚ	plan_pathÚall_pathÚplan_docÚall_recordsÚbankÚavoidÚcamerasÚlvÚpoolsÚBÚneg_baserj   ÚrngÚitemÚrecÚfolderr   r:   ÚquotasÚkÚvr;   r<   ÚextrarR   ÚjobÚpromptr5   Úimg_dirÚtmp_dirÚrecordsrL   Únew_recÚnew_nameÚold_nameÚprefixÚdestÚold_pngÚhistÚchar_manÚ	char_recsr8   Újr1   r6   r!   s1                                                 @@@r"   Úmainrª   4   s		  ú€ Ü×ÑÐ,SÔT€AØ‡N�N�7 TÐ0O€NÔPØ‡N�N�9 tðRð ô Sð ‡N�N�=¨$ð-ð ô .ð ‡N�N�8¤#¨tØFð ô Hà‡N�N�:¤C°€NÔ3Ø‡N�N�; |€NÔ4Ø�<‰<‹>€Dä�4—8‘8‹n€GØ˜+Ñ%€IØÐ,Ñ,€HØ×ÑÔ X§_¡_Ô%6Ü˜4 ˜yð )0ð 0ó 1ð 	1ô �z‰z˜)×-Ñ-°wÐ-Ó?Ó@€HÜ—*‘*˜X×/Ñ/¸Ð/ÓAÓB€Kä×ÑÓ €DÜ× Ñ Ó"€EÜ�o‰oÓ€GÝ28Ó9±&¨BˆR”×#Ñ# BÓ'Ñ'°&€EÐ9Ü”cœ(“mÓ$€AØ× Ñ €HØ‡~‚~Ù6>�h�Z˜r $§.¡.Ð!1Ñ2ÀDÇNÁNˆä˜Ÿ
™
Ó#€EÜ
�-‰-˜Ó
€Cà�<Š<¤× 2Ñ 2Ô 4ÜÐ4´R·X±X°Jð ?8ð 8ó 9ð 	9ô %*Ñ ˆ�'˜5ÜÓJ ¨Ò 0ÓJÈDÓQˆÙÜ˜u X JÐ.BÐCÓDÐDÜõ D™{ó Dð FJóKˆñ Ü˜u X JÐ.BÀ7À)È1ÐMÙ=B .°°°qÐ 9ñLó Mð MØHJñLó Mð Mð —‘˜Ó$Ò0¨ˆà�‰˜xÓ(ˆÙÜ˜u X JÐ.IÐJÓKÐKà�G‘ˆÝ:@ÓA¹&°B�"˜B %šK‘q¨QÑ.¸&ˆÐAØ&)§g¡g¨jÓ&9Ò&?¸R×%FÑ%FÔ%HÔNÑ%H™T˜Q ÊA�A�q‘DÐ%HˆÑNØ�G‘ˆð
 ˆØ�7‰7�7ÔØ%(¨¡\°1Ð$5ˆE�.Ñ!Ø+/ˆEÐ'Ñ(ä×$Ñ$ØˆG�Q˜ ¨°3°w±<ÀØ�%˜ ¨ð)à;<Ø�Yñ)ð #(ñ)ˆô ˆt‹9˜Š>Ü˜t H :¨Q¨w¨i°{Ä3ÀtÃ9À+ÈUÐSÓTÐTØ�1‰gˆð ˜‘]ˆŒ
Ø—9‘9ˆŒä×$Ñ$ Q§_¡_°d¸6±lÀCÓHˆÜˆhŒÜ��
˜#˜e˜W C¨ y°¸¸¸wÀsÇzÁzÀlÐSÔTÜ�˜sŸ}™}˜oÐ.Ô/Ü�˜sŸ~™~Ð.¨d°3·?±?Ò3IÀcÐ2JÐKÔLÜ�˜s×/Ñ/Ð0Ð1Ô2à�<Š<Ü�+ÔÜ�%˜Ÿ™¨¨eÓ4Ô5Ùà˜VÑ#ˆØ˜UÑ"ˆØ˜\Ñ)ˆØ�>‰>ÔÜ�M‰M˜'Ô"ä—[‘[ # ¨¨V©°a·o±oÀxØ!(¨$¯)©)°T·[±[ÀxôQ‰
ˆ�áÜÐ8¸¸
À!ÀGÀ9ÐMÔNÜ�M‰M˜'°Õ6Ùà˜!‘*ˆÜ˜ ™Ó(×-Ñ-ˆô ˜˜F™Ó$×)Ñ)ˆØ—‘ Ó$ QÑ'ˆØ�X˜Q˜xŸ~™~¨c°1Ó5°aÑ8Ð9Ð:ˆà˜Ñ!ˆØ�;‰;Œ=Ü˜~¨d¨VÐ3HÐIÓJÐJÜ�‰”C˜¤$ w¨v¡Ó"7×"<Ñ"<Ñ<Ó=¼sÀ4»yÔIÜ�‰�g¨TÕ2à˜HÑ$ˆØ�>‰>ÔØ˜oÑ-ˆDØ�J‰J˜t¨dˆJÔ3Ü�K‰Kœ˜G›¤c¨$°©/Ó&:Ô;ä�w“-ˆØ   
Ð+ˆ�‰ð Ð2Ñ2ˆÜ—J‘J˜x×1Ñ1¸7Ð1ÓCÓDˆ	ñ (ó)á'˜ð "#§¡ yÓ!1°WÒ!<Ø%&§U¡U¨7£^°s·w±w¸wÓ7GÒ%Gñ ØNOñPà'ð 	ð )ð 	×ÑœDŸJ™J y¸uÈQÔOØ%,ð 	ô 	.ñ !ó"ñ
 !�ð �
‰m˜vÒ%¨!¨I©,¸'Ò*AØ—%‘%˜“. C§G¡G¨GÓ$4Ò4ð5�ð 5 VØ˜  '¨&¡/Ð!2Ð3ó5ð <=ñ=ð !ð 	ð "ð 	×ÑœDŸJ™J {ÀÈqÔQØ%,ð 	ô 	.ð �f”ˆAØ�)‘ Ó'ØŸ™˜g›¨#¯'©'°'Ó*:Ó:Ø—‘ 7¨7Ñ#3Ø$+¨HÑ$5Ø#*¨7Ñ#3Ø")¨&¡/Ø")¨&¡/ñ	3õ 4ð ð $ FÑ+ˆ�ÑØ×ÑœTŸZ™Z¨¸uÈQÔOØ&-ð 	ô 	/ô 	�˜�z  h Z¨w°w¸v±Ð6GÀqÐIÖJðu %*ðx �<Š<Ü�œ˜E›
�|Ð#>¸w¸iÐHÕIð ùòS :ùòB BùÛNùòT)ùò"s&   Æb*Ìb/Í
b4Íb4Û0Ab:Ý!Ab?Ú__main__)Ú__doc__rU   r\   rk   r{   ÚsysÚpathlibr   ÚstdoutÚreconfigureÚ__file__ÚresolveÚparentrg   ÚpathÚinsertrf   r_   Úpack_builderrb   Úprompt_builderr
   rd   r#   rª   Ú__name__r.   ó    r"   Ú<module>rº      s»   ðñó Û Û Û Û 
Ý à ‡
�
× Ñ  Ð0BÐ Ô Cá�‹>×!Ñ!Ó#×*Ñ*×1Ñ1€Ø ‡�‡��‘3�x (Ñ*Ó+Ô ,Ø ‡�‡��‘3�x *Ñ,Ó-Ô .ã Û Ý (à	,€òò fJðR ˆzÒÙ…Fð r¹   