Ë
    ±çÐ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ej                  j                  ej                  j                  ej                  j                  e
«      «      «      Zej                  j                  dej                  j                  ed«      «       ej                  j                  dej                  j                  ed«      «       ddlZddlZddlmZ dddœZd	„ Zed
k(  r eej,                  d   «       yy)aN  Turn a finished Astra author job into a library card version. usage: python3 tools/import_job.py <job_dir>
Reads job.json (+ <slug>.glb, NOTES.md), copies the GLB into store/blobs by hash, writes cards/.../v<version>.json.
Spatial numbers are measured from the file; the GPU pass (tools/gpu/run.sh) adds exact sizes and the thumbnail.é    NÚlibÚtools)Ú
build_card)zgpt-6-astra (Blender)ÚAstra)z(gemini-4-argon via Antigravity (Blender)z Gemini 4 Argon (Antigravity CLI))ÚastraÚgemini4c                 óæ  — t         j                  j                  | «      } t        j                  t        | › d�«      «      }|d   j                  d«      \  }}| › d|d   › d�}t         j                  j                  |«      st        d|› �«      ‚t         j                  j                  | › d�«      rt        | › d�«      j                  «       nd}t        t        t        j                  d	|«      «      «      d d
 }t        j                  t        |d«      j                  «       «      j!                  «       }t        j"                  t$        › d�d¬«       t'        j(                  |t$        › d|› d�«       |j                  d«      d   }ddddddœj+                  |d«      }	|j-                  d«      rd}	t/        ||||j+                  d«      xs$ |d   d d j1                  «       j3                  «       |j+                  dd«      |r|j5                  «       d   d d n|d   d|	d|j+                  d d!«      t/        d"dd#d$t6        j+                  |j+                  d%d&«      t6        d&   «      d   › d't         j                  j9                  | «      › d(d)j;                  |«      xs d*› d+�¬,«      t/        t6        j+                  |j+                  d%d&«      t6        d&   «      d   d-t         j                  j9                  | «      › �d.t         j                  j9                  | «      |j+                  d/«      ¬0«      ¬1«      }
t=        j>                  |«      }tA        |d2   «      d3kD  }d4d4|rd5nd6|sd7nd5d5d8œj+                  |d6«      }|d9   |kD  rd:|
d <   d;|d9   d<›d=|› d>�|
d?<   nd@|d9   d<›dA|› dB|dC   › dD�|
d?<   tC        |
||«      }tE        jF                  t$        |«      }tI        ||dE   dC   dC|dF   d dG «       y )HNz	/job.jsonÚidú/Úslugz.glbzno z	/NOTES.mdÚ z\b[a-z0-9]+(?:_[a-z0-9]+)+\bé   Úrbz/store/blobsT)Úexist_okz/store/blobs/ú.r   zlibrary/vehicle-+Z-frontzkit/+Z-frontz!weapon/grip-origin-muzzle-minus-z)ÚvehicleÚbuildingÚpropÚpartÚweaponzvehicle.seaz&library/vessel-waterline-origin-+Z-bowÚtitleÚnameéP   Úversioné   i,  Ú	realisticÚauthoredÚstatusÚapprovedÚownedFzForge Úpenr   z Blender job z2 (Nano Banana Pro sheet, CC0 Poly Haven textures: z, zsee NOTES.mdú))ÚkindÚgame_useÚraw_redistributeÚevidencezjobs/zlibrary-authorÚfeedback)ÚauthorÚsourceÚkitÚjobr'   )Úfiler   Úpathr   r   ÚsummaryÚstyleÚframeÚgatesr   ÚlicenceÚ
provenanceÚsize_xyzé
   é   é   é   é   )r   r   r   r   r   Úgpu_mb_decodedÚ	candidatezfail: decoded texture memory z.0fz MB > z
 MB budgetr1   zpass: z MB of z MB texture budget, Útrisz trisÚrenderÚreleaseé   )%Úosr-   ÚabspathÚjsonÚloadÚopenÚsplitÚexistsÚ
SystemExitÚreadÚsortedÚsetÚreÚfindallÚhashlibÚsha256Ú	hexdigestÚmakedirsÚROOTÚshutilÚcopyfileÚgetÚ
startswithÚdictÚstripÚ
capitalizeÚ
splitlinesÚPENSÚbasenameÚjoinÚglbÚmeasureÚmaxr   ÚcardlibÚwriteÚprint)ÚjdÚjÚclsr   ÚfÚnotesÚphÚhr#   ÚcontractÚsÚmÚbigÚbudgetÚcÚps                   ú?/home/claude-agent/forge-build/forge-assets/tools/import_job.pyÚmainrr      sé  € Ü	�‰�‰˜Ó	€B¤$§)¡)¬D°B°4°yÐ1AÓ,BÓ"C˜aØ�$‘—‘˜cÓ"�I€CˆØˆ$ˆa��&‘	ˆ{˜$Ð€AÜ�7‰7�>‰>˜!ÔÜ˜3˜q˜c˜Ó#Ð#Ü-/¯W©W¯^©^¸r¸dÀ)Ð<LÔ-MŒD�B�4�yÐ!Ó"×'Ñ'Ô)ÐSU€EÜ	””B—J‘JÐ>ÀÓFÓGÓ	HÈÈ"Ð	M€BÜ�‰”t˜A˜t“}×)Ñ)Ó+Ó,×6Ñ6Ó8€AÜ‡K�K”4�&˜Ð%°Õ5Ü
‡O�O�Aœ$˜˜}¨Q¨C¨tÐ4Ô5Ø�9‰9�S‹>˜!Ñ€DØ5À>Ð[ið  tBØ=ñ?ß?B¹sÀ4ÈÓ?Xð à
‡~�~�mÔ$Ø;ˆÜ�!˜$ S¨q¯u©u°W«~Ò/dÀÀ6ÁÈ3ÈBÀ×AUÑAUÓAW×AbÑAbÓAdÐno×nsÑnsÐt}ð  @Aó  oBÙ5:�e×&Ñ&Ó(¨Ñ+¨D¨SÑ1ÀÀ&Á	ÐR]ÐemÐuØ—E‘E˜( JÓ/Ü˜w°ÈØ%+¬D¯H©H°Q·U±U¸5À'Ó5JÌDÐQXÉMÓ,ZÐ[\Ñ,]Ð+^Ð^kÔln×lsÑls×l|Ñl|Ð}ó  mAð  lBð BWØW[×W`ÑW`ÐacÓWdÒWvÐhvÐVwÐwxð$zô{ô ¤D§H¡H¨Q¯U©U°5¸'Ó-BÄDÈÁMÓ$RÐSTÑ$UÐ`eÔfh×fmÑfm×fvÑfvÐwyÓfzÐe{Ð^|Ø!1´r·w±w×7GÑ7GÈÓ7KÐVW×V[ÑV[Ð\fÓVgôiô	j€Aô 	�‰�A‹€AÜ
ˆa�
‰mÓ
˜rÑ
!€CØ ±S©r¸bÑX[ÉbÐacÐoqÑr×vÑvÐw{Ð}ó  A€FØÐ	Ñ˜VÒ#Ø!ˆˆ(‰Ø4°QÐ7GÑ5HÈÐ4MÈVÐTZÐS[Ð[eÐfˆˆ'Š
à˜aÐ 0Ñ1°#Ð6°g¸f¸XÐEYÐZ[Ð\bÑZcÐYdÐdiÐjˆˆ'‰
Ü�1�a˜Ó€AÜ�‰”d˜AÓ€AÜ	ˆ!ˆQˆx‰[˜Ñ  &¨!¨I©,°s¸Ð*;Õ<ó    Ú__main__r   )Ú__doc__rM   rB   r@   rK   rR   Úsysr-   ÚdirnamerA   Ú__file__rQ   Úinsertr\   r]   Úcardr`   Úimport_existingr   rZ   rr   Ú__name__Úargv© rs   rq   ú<module>r      s¿   ðñs÷ *× )× )Ø	‡w�w‡��r—w‘w—‘ r§w¡w§¡°xÓ'@ÓAÓB€Ø ‡�‡���2—7‘7—<‘<  eÓ,Ô -¨s¯x©x¯©¸qÀ"Ç'Á'Ç,Á,ÈtÐU\ÓB]Ô/^ß Ý &ð 4Øcñe€ò"=ðJ ˆzÒÙˆ�‰�!‰Õð rs   