
    Ij4(                         d Z ddlZddlZddlmZ ddlZej                  dz  Z	d Z
d ZddZ	 	 dded	ed
ededef
dZd Zd Zd Zedk(  r e e              yy)u4  round6.html 빌더 — 6라운드(뿌리 결합 v3 + 실외 체인 재구동) 진행형 페이지.

5라운드 교훈 반영: 부분 페이지 즉시 게시 + 진행중 표시(⏳) + 미완료 시 30s 자동
새로고침. 프롬프트 원문은 runlog.jsonl 에서 산출 경로로 역참조(실호출 SOT).
    N)Pathzround6.htmlc                  f   i } t         j                  dz  }|j                         s| S |j                         j	                         D ]Y  }	 t        j                  |      }|j                  d      dk(  s.|j                  d      s@|j                  d      sR|| |d   <   [ | S # t        $ r Y iw xY w)Nzrunlog.jsonlkindimgoutprompt)	FEXPexists	read_text
splitlinesjsonloads	Exceptionget)mplineevs       K/Users/manta/Documents/Projects/TheRoad-I1/scratchpad/forest_exp/r6_page.py_runlog_by_outr      s    
A	A88:((*	D!B 66&>U"rvve}9IAbiL + H	  		s   
B$$	B0/B0c                 L    	 t        j                  |       S # t        $ r Y y w xY wN)r	   	load_planr   )names    r   _planr      s(    {{4   s    	##c           	      z    |rdnd}d| dt        j                  |        dt        j                  |xs d       dS )Nz open z<detailsz
><summary>z</summary><pre>z</pre></details>)_htmlescape)titlebodyopen_os       r   _detailsr%   %   sH    bAqcELL$7#8 9LL,--=? @    pngr!   sub
extra_htmlkoc                    |rdnd}dt        j                  |       d}|rdt        j                  |       dnd}	| j                         sd| d	| |	 d
| dS | j                  t        j
                        }
d}|r|t        d|      z  }|xs i j                  t        |             }|r|j                  d      xs g }|r2ddj                  d |D              z   d|j                  dd       dz   nd|j                  dd       d}|	|z  }	|t        d|j                  dd            z  }d| d	| |	 d|
 d|
 d| | dS )Nz
cell smallcellz<h4>z</h4>z<div class='ref'></div>r   z<div class='z'>uF   <div class='pend'>⏳ 생성 중… (완료되면 자동 표시)</div>u   프롬프트 (한국어)refsu   <div class='ref'>참조: , c              3   l   K   | ],  }t        j                  t        |      j                         . y wr   )r   r    r   r   ).0rs     r   	<genexpr>z_cell.<locals>.<genexpr><   s"     H4au||DGLL94s   24    · engineu/   <div class='ref'>참조 없음 (순수 T2I) · u&   실호출 프롬프트 원문 (영어)r   z	<a href='z' target='_blank'><img src='z'></a>)
r   r    r   relative_tor	   r
   r%   r   strjoin)r'   r!   r(   r)   runlogr*   smallclsheadsublinereldetr   r.   reflines                  r   _cellrA   +   s   ,VC%,,u%&e,D?B!%,,s"3!4F;G::<se2dVG9X,f& 	' //!%%
 C
C	x2B77
,B		CH	%B	vvf~# >B /YYH4HHIBFF8R0189 >bffXr>R=SSYZ 	 	7x@"&&SUBVWW3%r$yu8VeJ<v' (r&   c                 d    |xs i j                  |       }|sydt        j                  |       dS )Nr   u   <div class='verdict'>판정: r-   )r   r   r    )keyverdictstxts      r   _verdictrF   F   s5    >r

s
#C*5<<+<*=VDDr&   c                     t        d|        }|sydj                  |j                  d      xs g       }|j                  d      }dt        j                  |       d|rd d
S d	 d
S )Nroot_readback_v3r   r/   letters_foundinterior_layout_exposedu"   <div class='rb'>readback: 글자 [u   ] · 실내노출=YESnor-   )r   r8   r   r   r    )vrblettersintes       r   _readback_linerQ   M   s    	!!%	&Bii/526G66+,D0g1F0G H%)E4F< =/34F< =r&   c                  	   t        j                         } t               }t        d      xs i }t        d      xs i }t        d      xs i }t        d      xs i }dd l}g }g }| d   D ]E  }	|	d   r	| d   j                  |	d	         xs g D ]  }
|j                  t        |
d
                ! G t         j                  dz  }d}|D ]  }|t        |      j                  z  }|j                         r|n
t        |      }t        |      j                  t        t         j                              r|j                  t         j                        n|}|d| dt        j                   t        |      j                         dz  } dD ]e  \  }}t         j                  |z  }|j                         s*|d|j                  t         j                         dt        j                   |       dz  }g d}dddd}|j"                  dz   |j                  d      xs ddz   |j$                  d}dD ]  }t         j                  dz  d| dz  }|j                         s|j                  |       |j                  d      |k(  rdnd}|t'        |||   |z   ||j                  |d      t)        |      t+        d| |      z         z  } d}g d}g d}d |fd!|ffD ]  \  }}|j                  |      xs g D ]n  }| d"   |   }|j                  d#      xs i } d$j-                  |j                  d%      xs g       xs d&}!t         j                  d'z  |z  }"d}#|D ]=  \  }$}%|"|$z  }|j                         s|j                  |       |#t'        ||%|d()      z  }#? t         j                  d*z  |z  }&|&j                         r3d+D ].  \  }$}%|&|$z  j                         s|#t'        |&|$z  |%|d()      z  }#0 |j                  d,      xs d}'|d-| d.|! d/t        j                   | j                  d0      xs d       d1t        j                   |'       d2|# d3t+        ||      z   d3z   z  }q  |sd4}|rd5nd}(d})|j                  d      r/d6|d    d.t        j                   |j                  d7d             d3})d8|( d9| d:| d;|) d<| d=}*t.        j1                  |*       t.        S )>Nr6_verdictsroot_v3b_corer6_root_choicer6_shotsr   members	is_indoor	fp_by_locloc_idpng_pathinputsr   z<div class='thumb'><img src='z'><div>u(   <br>기하 앵커(실외 fp)</div></div>))zroot_v2/root_v2.pngu)   4라운드 root_v2 (기하+마커 검증))zbirdseye2/p1_plan_t2i.pngu   5라운드 p1 (형태 검증)z</div></div>u?   v3a — 템플릿 결합 (fp 3장 앵커 + p1 스타일 언어)u:   v3b — LLM 저작 코어 (fp 3장 앵커 + 공통 블록)u@   v3c — 2-hop 재스타일 (root_v2 → 형태 전환+기울임))abcun   

(+ 공통 블록: fp 참조 기하 고정/부지 데이터/마커 12/우측 범례 — 영어 원문 참조)core_kou   

(+ 동일 공통 블록)root_v3z.pngrootu
    ★채택)r9   r*   r)   ))
sketch.pngu.   camview 스케치 (라인아트 눈높이 hop))plate_hop.pngu+   plate — hop 경유 (스케치=구도 SOT))zplate_direct.pngu5   plate — 직행 대조 (뿌리+staging 텍스트만)))rc   u   camview 스케치)rd   zplate (hop))ztemp.pngu(   임시샷 (ENV=plate, CONTROL=스케치))zcontour.pngu   윤곽 (C 경로))zbg_C.pngu    배경 재생성 (윤곽 기반))zfinal_C.pngu   최종샷 C (temp 경유))zfinal_direct.pngu+   최종샷 직행 대조 (plate+passport만)	no_personpersonshotsstagingr/   
charactersu	   무인물
outdoor_r6T)r9   r:   	outdoor_d))rc   u&   4라운드 스케치 (top-down 뿌리))z	plate.pngu   4라운드 plate (대비)descriptionz<div class='shotrow'><h3>u    — r4   framing_scalez</h3><div class='desc'>z</div><div class='row'>r-   uF   <div class='pend'>⏳ 체인 대기 — 뿌리 선정 후 시작</div>z(<meta http-equiv='refresh' content='30'>u&   <div class='verdict'>뿌리 채택: v3whyz<meta charset='utf-8'>u  <title>6라운드 — 뿌리 결합 + 실외 체인</title><style>
body{font-family:sans-serif;background:#171717;color:#eee;margin:24px;max-width:1880px}
h1{font-size:22px} h2{color:#8fd;margin-top:30px} h3{color:#fd9;margin:4px 0}
h4{color:#fd9;margin:2px 0 6px;font-size:13px}
.grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:16px}
.row{display:flex;gap:12px;overflow-x:auto;padding-bottom:6px}
.cell{background:#222;padding:10px;border-radius:10px}
.cell img{width:100%;border-radius:6px}
.cell.small{flex:0 0 340px}
.thumb{flex:0 0 190px;background:#222;padding:6px;border-radius:8px;font-size:10px;color:#aaa;text-align:center}
.thumb img{width:100%;border-radius:4px}
.ref{color:#8ac;font-size:12px;margin-bottom:6px}
.rb{color:#9c9;font-size:12px;margin-top:6px}
.desc{color:#bbb;font-size:12px;margin:2px 0 8px}
.pend{color:#fa5;padding:20px;font-size:14px}
.verdict{background:#1e3020;border-left:4px solid #4a4;padding:8px 12px;margin:8px 0;font-size:13px}
pre{white-space:pre-wrap;font-size:11px;color:#9c9;max-height:300px;overflow:auto;background:#1b1b1b;padding:8px}
.guide{background:#1e2430;padding:12px 16px;border-radius:8px;font-size:13px;line-height:1.7}
.shotrow{background:#1d1d1d;padding:12px;border-radius:10px;margin-bottom:14px}
summary{cursor:pointer;font-size:12px;color:#8ac}
</style>
<h1>6라운드 — 전체 부지 뿌리(두 접근 결합) + 실외 체인 재구동</h1>
<div class='guide'>뿌리 = <b>건물 전체(옥탑 거주부+옥상+건물 몸체+지상 마당/골목/출입구)</b>를
한 장에, <b>fp 도면 언어(가는 윤곽선/플랫 색 채움/설비 기호) + ~30° 축측 입체감</b>.
결합: 4라운드 root_v2 의 <b>실외 fp 3장 기하 앵커</b> × 5라운드 p1 의 <b>형태/간결·중립 계약</b>
× 검증된 마커 12+영어 범례. 체인 = 검증 조합(무인물: sketch-hop+직행 생략 없이 hop/직행
<b>균일 A/B</b> · 인물: 임시샷 경유 C 경로, CONTROL=눈높이 스케치, v2 계약 3줄).</div>
<h2>§1 뿌리 v3 — 세 변형</h2>
<div class='row'>z</div>
<div class='grid'>z</div>
u9   
<h2>§2 실외 체인 재구동 (뿌리 v3 기반)</h2>
u   
<div class='guide' style='margin-top:18px'>판정 기준: 기하 정합(fp 대비)·시점(staging 의도)
·무인/인원 준수·마커 누출 0·재질 사실감. 갤러리 1~5라운드는 gallery.html / birdseye.html.</div>
)r	   
load_reconr   r   s10_root_v3r   appendr   OUTr   r   r7   
startswithr
   r6   r   r    STYLE_CORE_A_KOC_RESTYLE_PROMPT_KOrA   rQ   rF   r8   PAGE
write_text)+reconr9   rD   b_corechoice
shots_metaS10pendfpsr   fpmirrorstripr   candsrcr>   r   label
root_cellsroot_titlesroot_korM   r'   chosen
chain_htmlorder_nporder_planeordersksstcharsdcellsfncapd4descrefreshchoice_linedocs+                                              r   buildr   W   s0   LLNEF]#)rH?#)rF#$*Fz"(bJD C9[>%))!H+6<"<BJJtBzN+, =  UUXFEQ$kkmda(+C(;(;CJ(Gcooaee$S1# 7,,tAw||455]_ 	`	 XeEEDL88:5ammAEE6J5K L#ll512,@ AE	X JNIOK
 '' +Z ZZZ	*0b4RR++-G eeiGA3d"33zz|KK!'F!3q!8beQ&(GKK2<N%a(8gaSM8+LLN 	N
  J_HTG %h/(G1DEe>>$'-2-Bgr"Ay!'RBIIaeeL17R8GKE$r)AE C"fzz|KK$sCdCC	 ! $r)Byy{ LGBR'')rBwF$!OO L 55'-2D+B4uUG4<< 7 =2>? @%%*\\$%7$8 9$$)7&2 2x(	) ,4	45J' . F4 ]
<@8bGKzz&?v?Ou,,vzz%'<=>fF$WI .8  ,   A#CH 	OOCKr&   __main__)F)r   r   Nr   F)__doc__htmlr   r   pathlibr   
forest_libr	   r
   rv   r   r   r%   r7   rA   rF   rQ   r   __name__print r&   r   <module>r      s   
    uu}@ CE+0(t (C (c (C ((6E=HV z	%'N r&   