+
    i                     f   R t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIH	t	 ]	! R4      t
]
R,          t]R,          t]R,          R,          t]	! R4      t]R	,          t]	! R
4      tRtRtRtRtR R ltR R ltR R ltR R ltR!R ltR tR R ltR R ltR R ltR t]R 8X  d
   ]! 4        R# R# )"u   
maker_run.py — Picks next ready_for_maker item, generates PNG via DALL-E, validates output.
No AI agent needed — calls OpenAI API directly.
N)Pathz#/Users/tonyclaw/.openclaw/workspaceEtsyzpipeline-state.jsontoolszpipeline_state.pyz&/Users/tonyclaw/Documents/Etsy Designsz01-Source-PNGz,/Users/tonyclaw/.openclaw/auth-profiles.jsonz,https://api.openai.com/v1/images/generationszdall-e-3	1024x1024standardc                $    V ^8  d   QhR\         /#    returnstr)formats   ";/Users/tonyclaw/.openclaw/workspace/Etsy/tools/maker_run.py__annotate__r       s     
4 
4 
4    c                      \         P                  ! \        P                  R R7      4      p V P	                  R/ 4      P                  4        F>  w  rRVP                  4       9   g   K  VP	                  R4      '       g   K5  VR,          u # 	  \        P                  P	                  RR4      #   \         d$    \        P                  P	                  RR4      u # i ; i)utf-8encodingprofilesopenaiapiKeyOPENAI_API_KEY )
jsonloadsAUTH_PROFILES	read_textgetitemslowerosenviron	Exception)r   nameprofiles      r   load_openai_keyr&       s    	4::m55w5GH%\\*b9??AMD4::<'GKK,A,Ax(( B zz~~.33 4zz~~.334s$   A!B. (B. 
B. !B. .+CCc                \    V ^8  d   QhR\         R\        \        \        \        3,          /# )r	   argsr
   )listtupleintr   )r   s   "r   r   r   -   s%     < <D <U3S=%9 <r   c                     ^ RI pVP                  R\        \        4      .V ,           RRRR7      pVP                  VP
                  P                  4       VP                  P                  4       3# )    Npython3FT)checktextcapture_output)
subprocessrunr   PIPELINE_TOOL
returncodestdoutstripstderr)r(   r2   rs   &  r   run_pipeline_toolr:   -   sZ    	C&'$.$t 	 	A <<)188>>+;;;r   c                $    V ^8  d   QhR\         /# r   dict)r   s   "r   r   r   6   s      D r   c                      \        \        R RR7      ;_uu_ 4       p \        P                  ! V 4      uuRRR4       #   + '       g   i     R# ; i)r9   r   r   N)open
STATE_PATHr   load)fs    r   
load_staterC   6   s-    	j#	0	0Ayy| 
1	0	0	0s	   <A	c                >    V ^8  d   QhR\         R\         R,          /# )r	   stater
   Nr<   )r   s   "r   r   r   ;   s      $ 4$; r   c                     V P                  R . 4       Uu. uF  qP                  R4      R8X  g   K  VNK  	  ppV'       g   R# VP                  R R7       V^ ,          # u upi )r   statusready_for_makerNc                 ^    \        V P                  R ^ 4      4      ) V P                  RR4      3# )priority
created_atr   )r+   r   )xs   &r   <lambda> pick_next_item.<locals>.<lambda>?   s(    Cj!(<$=#=quu\SU?V"Wr   )key)r   sort)rE   it
candidatess   &  r   pick_next_itemrS   ;   sY    $yy"5_59IM^9^""5J_OOWOXa=	 `s
   AAc                    R R\        \        4      RV RVRVRRRV.pV'       d   VRV.,          pV'       d*   VP                  4        F  w  rxVR	V R
V 2.,          pK  	  \        V4      w  rpV	^ 8w  d   \	        T;'       g    R4      hR# )set--path--idz--stagez--status--by
etsy-maker	--messagez--design_namez	--path_kv=zpipeline_state set failedN)r   r@   r   r:   RuntimeError)item_idstagerG   messagedesign_namepathsr(   kvrcouterrs   &&&&&&      r   ps_setrg   C   s    xZ5FWD +..KKMDA[QCq*--D "$T*LBS	Qw3=="=>> r   c           	      L    R R\        \        4      RV RRRV.	p\        V4       R# )errorrV   rW   rX   rY   rZ   N)r   r@   r:   )r]   r_   r(   s   && r   ps_errorrj   V   s-    3z?W	D dr   c                0    V ^8  d   QhR\         R\         /# )r	   themer
   r   )r   s   "r   r   r   `   s     ( (3 (3 (r   c                    V P                  4       p\        P                  ! R RV4      p\        P                  ! RRV4      P                  R4      p\        P                  ! RRV4      p\	        V4      ^28  d
   VR,          # T# )z[^a-z0-9\s-]r   z\s+-z-+:N2   N)r    resubr7   len)rl   ss   & r   slugifyrt   `   sg    A
A&A
vsA$$S)A
uc1AVb[1S6'a'r   c                0    V ^8  d   QhR\         R\        /# )r	   itemr
   )r=   r   )r   s   "r   r   r   h   s     " "T "c "r   c                f   V P                  RR4      pV P                  RR4      pV P                  R. 4      ;'       g    . pV P                  R. 4      ;'       g    . pTpRV9   d(   VP                  R^4      ^,          P                  4       p\        P                  ! RRV4      P                  4       pRR	R
RRRRR/pVP                  VR4      pVP                  VR7      pV'       dD   V U	u. uF  qR9  g   K  V	NK  	  p
p	V
'       d#   VRRP                  V
R,          4       2,          pV# u up	i )z
Build a DALL-E prompt from pipeline item.
Following prompt-guidelines.md: black silhouette, clean lines, no SVG/vector language.
rl   r   nichekeywords	avoidListz) z\(no text\)zUSMC/Militaryzbold black silhouette of a {subject}, clean simple lines, high contrast black on pure white background, suitable for vinyl cutting or laser engraving, no gradients, no shading, no textzReformed Christianzclean black silhouette of {subject}, elegant simple lines, high contrast black on pure white background, suitable for vinyl cutting, no gradients, no text, no scripture text	Patrioticzbold black silhouette of {subject}, clean simple lines, high contrast black on pure white background, suitable for vinyl cutting, no gradients, no textzNature/Outdoorzclean black silhouette of {subject}, simple nature illustration style, high contrast black on pure white background, suitable for vinyl cutting, no gradients, no textz{bold black silhouette of {subject}, clean simple lines, high contrast black on pure white background, no gradients, no text)subjectz	. Avoid: z, :N   N)trademarkedphrasesbibleverser0   )r   splitr7   rp   rq   r   join)rv   rl   rx   ry   avoid
core_themeniche_stylestyle_templatepromptaclean_avoids   &          r   build_dalle_promptr   h   sD   
 HHWb!EHHWb!Exx
B'--2HHH["%++E Ju}[[q)!,224
 J7==?J 	  T  N  o  C	K !__U  -j  kN"":"6F "'i%Q4h+hqq%i	$))KO"<!=>>FM	 js   -D.:D.c                <    V ^8  d   QhR\         R\         R\        /# )r	   r   api_keyr
   )r   bytes)r   s   "r   r   r      s!       s u r   c                   \         P                  ! R\        RV R^R\        R\        RR/4      P                  R4      p\        P                  P                  \        VR	R
RRV 2/RR7      p\        P                  P                  V^<R7      ;_uu_ 4       p\         P                  ! VP                  4       P                  R4      4      pRRR4       XR,          ^ ,          R,          p\        P                  P                  V4      p\        P                  P                  V^<R7      ;_uu_ 4       pVP                  4       uuRRR4       #   + '       g   i     L; i  + '       g   i     R# ; i)z$Call DALL-E 3 API, return PNG bytes.modelr   nsizequalityresponse_formaturlr   zContent-Typezapplication/jsonAuthorizationzBearer POST)dataheadersmethod)timeoutNr   )r   dumpsDALLE_MODEL
DALLE_SIZEDALLE_QUALITYencodeurllibrequestRequestOPENAI_API_URLurlopenr   readdecode)r   r   payloadreqrespresult	image_urlimg_reqs   &&      r   generate_dalle_imager      s-   jj&Q
=5  vg  ..
 
 .wwi0
  ! C 
		R		0	0DDIIK..w78 
1 vq!%(I nn$$Y/G					4	4yy{ 
5	4 
1	0 
5	4	4s   4E0EE	E/	c                  *   \        4       p V '       g   \        R 4       R# \        4       p\        V4      pV'       g   \        R4       R# VR,          pVP	                  RV4      pVP	                  R4      ;'       g    \        V4      p\        VRRRR	7        \        V4      p\        R
V RVP	                  R4       24       \        RVR,           R24       \        V,          pVP                  RRR7       \        W`4      pWu R2,          p	V	P                  V4       VR,          p
V
P                  RV RVP	                  R4       RV R2RR7       \        RV	 R\        V4      R R24       V	P                  4       '       d    V	P                  4       P                   R8  d   \#        VRV	 24       R# \        VR R!R"\        V4      R R#2VR$\%        V4      R%\%        V	4      /R&7       \        R'V R(V R)24       R#   \&        P(                  P*                   dP   pTP-                  4       P/                  RR*R+7      p\#        TR,TP0                   R-TR.,           24        Rp?R# Rp?i\2         d   p\#        TR/T 24        Rp?R# Rp?ii ; i)0uQ   Maker: no OpenAI API key found — check auth-profiles.json or OPENAI_API_KEY envNzMaker: no items ready_for_makeridrl   r`   maker_in_progressblockedzClaimed for DALL-E generation)r^   rG   r_   zMaker: generating 'z
' | niche=rx   zMaker: prompt=:Nx   Nz...T)parentsexist_okz.pngz
prompt.txtzTheme: z
Niche: z	
Prompt: 
r   r   zMaker: saved z (,z bytes)i'  zPNG too small or missing: maker_completeready_for_criticzDALL-E PNG generated (z bytes).source_folderpng)r^   rG   r_   r`   ra   zMaker complete: z -> ready_for_critic ()replace)errorszDALL-E HTTP z: :N   NzUnhandled exception: )r&   printrC   rS   r   rt   rg   r   SOURCE_PNG_DIRmkdirr   write_bytes
write_textrr   existsstatst_sizerj   r   r   ri   	HTTPErrorr   r   coder#   )r   rE   rv   r]   rl   r`   r   folder	png_bytespng_pathprompt_pathebodys                r   mainr      st   GabLE% D/04jGHHWg&E((=);;WU^K 7-i2417#D)#K=
488G;L:MNOvd|nC01  +-TD1 )9	 m400Y' |+eWIdhhw&7%8
6("M 	 	

 	hZr#i.);7CD   HMMO$;$;e$CW :8*EF 	"%,S^A,>hG#Vs8}
	
 	 	)?}ANO<<!! Avvxwy9L4:,?@@ 71!5667s3   DH 8AH J AI**J7J8JJ__main__)NN) __doc__r   r!   rp   timeurllib.requestr   urllib.errorpathlibr   	WORKSPACEETSY_DIRr@   r4   DESIGNS_ROOTr   r   r   r   r   r   r&   r:   rC   rS   rg   rj   rt   r   r   r   __name__ r   r   <module>r      s   
  	 	    67	v--
7"%88<=/CD? 

4<
?&("J@E7P zF r   