
    Hj                        d Z ddlZddlZddlZddlmZ ej                  j                  d e ee	      j                               ddlZddlZej                  dz  adZdefdZd Zdd	efd
ZddedefdZd Zedk(  r e        yy)u   s3 — 실외 체인: 뿌리 스케치 마킹(O1) → 배경 plate(O2) → 임시샷 → A/B/C → 최종.

fp 미사용 — 뿌리(조감 스케치)가 유일한 공간 control.
사용: .venv/bin/python s3_outdoor.py --root A|B [--only mark|plate|paths]
    N)PathoutdooruR  The attached image is a TOP-DOWN aerial site sketch with circled capital letters marking site elements (and possibly a legend panel on the right). Keep the sketch EXACTLY as it is — same geometry, same circled letters, same legend, do not redraw or restyle anything.
ADD exactly these annotations for ONE camera setup:
- ONE green camera icon with a green triangular view-CONE showing where the camera stands and what it looks at, following this staging description:
{cam}
{figures}Add NOTHING else — no new structures, no new text other than the new capital letters in their small circles.returnc                    | j                  d      xs i }|j                  d      xs i j                  d      xs g }t        d |D              }|dk  rt        |j                  d      xs g       }|dk  rydj                  d	 t	        |      D              }d
| d| ddj                  d |j                  d      xs g D              z   dz   S )Nstagingframe_spatial_contractconstraintsc              3   j   K   | ]+  }t        |t              s|j                  d       dk(  rd - yw)target_kind	character   N)
isinstancedictget).0cs     s3_outdoor.py	<genexpr>z!figures_clause.<locals>.<genexpr>#   s0      5t!z!T2m$3 ts   33r   character_anglesu>   - This shot has NO people — add no lettered person circles.
 c              3   @   K   | ]  }d t        d|z          d  yw)(P   )N)chr)r   is     r   r   z!figures_clause.<locals>.<genexpr>)   s"     <8a3rAv;-q)8s   - z$ red circle(s) with capital letters z; inside the view-cone where the staging places the people:

c              3   P   K   | ]  }d t        j                  |d      z      yw)z  * F)ensure_asciiN)jsondumps)r   cas     r   r   z!figures_clause.<locals>.<genexpr>,   s)      F#CB BU!CC#Cs   $&)r   sumlenjoinrange)sstconsnletterss        r   figures_clauser-       s    	
y		RBVV,-388GM2D 5t 5 	5AAv)*0b1AvPhh<58<<G7y A@ Aii F#%66*<#=#C#CF FF IMM N    c                    | d   |   }t        |j                  d      xs i j                  d      xs d      }t        j                  |t	        |            }t        j                  | d||gt        |z  dz        S )	Nshotsr   camera_direction )camfigures	_rootmarkroot_marked.pngrefsout_path)strr   MARK_PROMPTformatr-   Fimg_gptOUTDIR)reconskroot_pngr(   r3   prompts         r   o1_markrD   0   s    grA
quuY%2**+=>D"
ECC1BCF99t9%vXJ$rk,==? ?r.   extrac                    | d   |   }t         |z  dz  }| d   D cg c]  }|d   |d   v s| }}dj                  d |D              }dj                  dd	d
dddddddddd|ddt        |j                  dd            dt	        j
                  |      g|r|gng z         }	t        j                  | d|rdnd |	|gt         |z  dz        S c c}w )Nr0   r6   membersloc_idloc_idsr   c              3   h   K   | ]*  }d |j                  d       d|j                  d        , yw)r   labelz: summaryN)r   )r   ms     r   r   zo2_plate.<locals>.<genexpr><   s1     RTBquuW~.by1A0BCTs   02zFThe attached image is a TOP-DOWN aerial site sketch of one real place,zFwith a green camera icon and view-cone marking ONE camera position andzGits viewing direction. Circled letters mark site elements; red lettereduB   circles (if any) mark where people stand — but render NO people.r2   zCDraw the PHOTOREALISTIC outdoor view that THAT camera sees from itsz>marked position at eye level, looking along the view-cone: thezFstructures, ground surfaces, openings and approaches the sketch placeszDin front of that camera, at real-world human scale. This is an EMPTYz?background plate: absolutely no people, no text, no letters, nouB   circles, no arrows, no sketch lines — pure photographic realism.z-WHAT THIS PLACE LOOKS LIKE (production data):zSite orientation notes:sketch_notes_plate_v2	plate.pngr7   )r?   r&   r:   r   Cstaging_linesr=   r>   )
r@   rA   	root_planrE   r(   markedrM   locs	loc_linesrC   s
             r   o2_platerX   8   s   grAb[,,FY'G'!1X;!I,+FA'DG		RTRRIYYPPQL
MHPNIL
7
!3y}}^R'H#I
AOOA#$ %r%# $F& 99t65%b!9:F&$rkK79 9+ Hs
   CCmannequin_previewv2c           	         | d   |   }t         |z  }|dz  }|dz  }t        j                  | |      }|rdnd}	|r4t        j                  |      t        j                  t        j
                  gnd }
t        j                  | d|	 ||||dz  |
      }t        j                  | d	|	 ||||d
z  ||
       t        j                  ||	z   |      }t        j                  | d|	 |||dz  ||
      }t        j                  | d|	 ||||dz  |
       t        j                  | d|	 ||dz        }t        j                  | d|	 |||dz  ||
      }t        j                  | d|	 ||||dz  |
       |rHt        j                  | d|	 |||dz  |d|
      }t        j                  | d|	 ||||dz  |
       y y )Nr0   rQ   r6   rP   r2   _tempztemp.png)	contracts_final_Azfinal_A.png)control_pngr]   _bgBzbg_B.png)compr]   _final_Bzfinal_B.png_contourzcontour.png_bgCzbg_C.png)contour_pngr]   _final_Czfinal_C.png_bgC_mz
bg_C_m.pngT)re   	mannequinr]   
_final_C_mzfinal_C_m.png)r?   rR   passports_for_shotpeople_contractMARKER_NOT_PEOPLEEYE_LEVEL_CONTRACT	temp_shot
final_shotvlm_compositionbg_regencontour)r@   rA   rY   rZ   r(   denvcontrol	passportstagvr]   tempra   bg_bcontbg_cbg_cms                    r   run_shotr}   T   s   grAA
k/C##G$$UA.I5BD+- ##A&(;(;&&(37  ;;"U4&)1c7A
N!*,D LLB4xv&3	1};L$	; R$Y-D::D'CZd )+DLLB4xv&4A<M$& 99t8D6*D!m2CDD::D'CZT )+DLLB4xv&4A<M$&

bTv.3L8H'+tyR	t:dV,a	(I	? r.   c            	         t        j                         } | j                  ddddgd       | j                  ddg d	
       | j                  ddddgd       | j                         }|j                  dk(  }|rt
        j                  dz  at        j                         }t        j                  d      }t
        j                  dz  d|j                   dz  }|j                         st        d|       t        j                  d      d   }t        |      D ]  \  }}|rxt
        j                  dz  |z  dz  }	t        |z  dz  }
|	j                         rC|
j                         s3|
j                  j                  dd       dd l}|j#                  |	|
       |j$                  dv r|st'        |||       |j$                  dv r!t)        ||||rt*        j,                  nd       |j$                  dv st/        |||dk(  |         t        j0                  d!d"|j$                  |j                  |j                  |d#       y )$Nz--rootTABu   s1 육안 선정 root 변형)requiredchoiceshelpz--onlyall)r   markplatepaths)defaultr   z	--variantv1rZ   u9   v2 = 인원/마커/eye-level 계약 추가 (1.5라운드))r   r   r   
outdoor_v2rT   rootroot_z.pngzroot image missing: subsetr   r6   )parentsexist_okr   )r   r   )r   r   r2   )rE   )r   r   )rY   rZ   stage
s3_outdoor)kindr   doner   variantr   )argparseArgumentParseradd_argument
parse_argsr   r=   OUTr?   
load_recon	load_planr   exists
SystemExit	enumerateparentmkdirshutilcopyfileonlyrD   rX   rR   rm   r}   runlog)apargsrZ   r@   rT   rB   r   r   rA   srcdstr   s               r   mainr   v   s   		 	 	"BOOHtc3Z7  9OOHe 6?O @OOKd|T  V==?D		B	%LLNEK(Iuuv~%		{$ 77H??/z:;;[["9-F6"2%%)#b(+<<C2+ 11Czz|CJJL

   =S)99'E2x(99((UB	46A00BA99((UB16rB # HHgdiiiiDLLFL Mr.   __main__)r2   )F)__doc__r   r!   syspathlibr   pathinsertr:   __file__r   
forest_libr=   forest_chainrR   r   r?   r;   r-   rD   rX   boolr}   r   __name__ r.   r   <module>r      s   
   
  3tH~,,- .  	
	
/ N N ?9# 98?4 ?T ?D$MN zF r.   