+
    Si)e                    v  a  0 t $ R t^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
Ht ]P                  ! 4       R,          t]P                  ! 4       R,          tRtRtRR	R
RRRRR/tRR	R
RRRRR/t] R2tRtRtRt^tRtRt^t^t/ RRbRRbRRbRRbRRbR R!bR"R#bR$R%bR&R'bR(R)bR*R+bR,R-bR.R/bR0R1bR2R3bR4R5bR6R7bR8R9R:R;R<R=R>R?R@RARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRS/CtRT]RU&   RRVR
RWRRXRRY/tRZtR[t R\t!R]t". R^R]]!R_R`3NRaR]] RbRc3NRdR]]!ReRf3NRgR]] RhRi3NRjR]]"RkRl3NRmR]]!RnRo3NRpR]] RqRr3NRsR]] RtRu3NRvR
]]!RwRx3NRyR
]] RzR{3NR|R
]] R}R~3NRR
]]!RR3NRR
]]!RR3NRR
]] RR3NRR
]] RR3NRR]]!RR3NRR]]!RR3NRR]] RR3NRR]] RR3NRR]] RR3NRR]]!RR3NRR]]!RR3NRR]]!RR3NRR]]!RR3NRR]] RR3NRR]]!RR3NRR]] RR3NRR]] RR3NRR]]!RR3NRR]]!RR3NRR]]!RR3Nt#R]R&   R R lt$R R lt%R R lt&]3R R llt'R R lt(R R lt)R R lt*RR R llt+R t,]-R8X  d
   ],! 4        R# R# )ur  WHISPER Qwen-Image-2512 LoRA 학습용 데이터셋 생성기.

dockaiq i2i-qwen-image-edit-lightning-4step 로 face_sheet 기반 변주 31장 생성 후
musubi-tuner 요구 포맷(image.png + image.txt 쌍) 으로 저장.

구성비 (lora-character-qwen spec):
  close-up 8 / bust 7 / thigh-up 6 / full-body 10 = 31

실행:
  python generate.py                    # 전체 생성 (기존 .png 스킵 · resume)
  python generate.py --dry-run          # 프롬프트만 출력
  python generate.py --only fullbody_06 # 단일 생성
  python generate.py --recover          # 하드코딩 orphan 잡 회수 후 missing 보강
)annotationsN)Pathu=   Documents/vault/chosn/people/WHISPER/비주얼/face_sheet.pngz2ai/experiments/whisper-dataset-gen/dataset/croppedz#i2i-qwen-image-edit-lightning-4stepwhspclose-up bustz^Body: slim toned dancer build, broad but softly sculpted shoulders, long horizontal clavicles.zthigh-upzBody: lean dancer build, broad shoulders softly wider than hips, long horizontal clavicles, narrow waist, gently curved glutes from years of dance training.z	full-bodyzBody: approximately 173cm tall, slim lean dancer build, broad but softly sculpted shoulders subtly wider than hips, long horizontal clavicles, narrow natural waist, gently curved glutes, slender long toned legs, 8.5-to-9 head elongated proportion.z=slim dancer upper build, broad soft shoulders, long clavicleszKlean dancer build, broad soft shoulders, narrow waist, gently curved glutesz173cm tall, slim lean dancer build, broad soft shoulders subtly wider than hips, long clavicles, narrow waist, gently curved glutes, slender long legs, 8.5-head proportionz, Korean womani   g       @i  closeup_01_studio_neutral_bi  "closeup_02_threequarter_tungsten_bi   closeup_03_profile_rim_bi!  closeup_04_golden_curtain_bi"  closeup_05_candid_laugh_bi#  closeup_06_overcast_window_bi$  closeup_07_cliff_breeze_bi%  closeup_08_skylight_lookup_bi&  bust_01_white_cyc_tee_bi'  bust_02_evening_denim_bi(  bust_03_cafe_cashmere_bi)  bust_04_backstage_leather_bi*  bust_05_neon_alley_bi+  bust_06_rooftop_silk_bi,  bust_07_bedroom_oxford_bi-  thigh_01_street_cardigan_bi.  thigh_02_stage_silver_bi/  thigh_03_window_bar_slip_bi0  thigh_04_hotel_pajama_bi1  thigh_05_rose_garden_bi2  thigh_06_record_store_bi3  fullbody_01_studio_tee_jeans_bi4  fullbody_02_crosswalk_trench_bi5  fullbody_03_dance_studio_bi6  fullbody_04_park_path_pink_bi7  fullbody_05_subway_olive_bi8  fullbody_06_rooftop_night_bi9  fullbody_07_beach_linen_bi:   fullbody_08_backstage_corridor_bi;  fullbody_09_gallery_column_bi<  !fullbody_10_elevator_monochrome_bzdict[int, str]RECOVERYzExtreme close-up of face and jawline only, cropped tightly above the collarbone, NO shoulders, NO clothing visible in frame. Face fills three-quarters of the frame, rule of thirds composition with eyes on the upper horizontal line.zwBust shot from the mid-chest up, head in the upper third of the frame with gentle headroom, rule of thirds composition.zxThree-quarter frame from mid-thigh up, head in the upper third, rule of thirds composition with generous vertical space.ztFull body in frame head to toe with feet visible, wide framing, head in the upper third, rule of thirds composition.uu   Relaxed natural posture, weight shifted onto one leg, shoulders dropped, caught mid-moment — not posed for a photo.zAGentle closed-mouth smile with a faint eye crinkle, relaxed gaze.z9Composed calm expression, relaxed mouth, soft alert gaze.zLCandid unposed laugh caught mid-moment, eyes crinkled, teeth barely visible.closeup_01_studio_neutralzStudio face portrait in front of a plain light gray seamless backdrop. Soft cool north-window key light from camera left. Long natural wavy black hair framing the face. Minimal makeup. Direct eye contact with the lens.zzstudio portrait, gray seamless backdrop, cool north window light, long black wavy hair, minimal makeup, direct eye contact closeup_02_threequarter_tungstenzThree-quarter face angle turned slightly away from camera. Warm tungsten key light from camera-left with amber bokeh drifting behind. Hair tucked behind one ear.zVthree-quarter face angle, warm tungsten key light, amber bokeh, hair tucked behind earcloseup_03_profile_rimzClean side profile. Hard diffused rim light defines the nose bridge and jawline from behind. Hair pulled back into a low ponytail. Charcoal gray studio wall.zKclean side profile, rim light from behind, low ponytail, charcoal gray wallcloseup_04_golden_curtainzGolden hour daylight streaming through a sheer beige linen curtain. Hair slightly tousled by a breeze. Softly out-of-focus curtain background.zRgolden hour daylight, sheer linen curtain, wind-tousled hair, soft warm backgroundcloseup_05_candid_laughzCaught unposed in the middle of laughing. Natural catchlights in the eyes. Shallow depth of field. Leafy outdoor backdrop in afternoon sun.zXunposed candid laugh, natural catchlight, shallow depth of field, leafy outdoor backdropcloseup_06_overcast_windowzContemplative downcast gaze, lashes visible. Cool overcast window light. Long black hair frames the face. Faint closed-mouth smile. Near-monochrome gray wall.zecontemplative downcast gaze, cool overcast window light, long hair framing face, monochrome gray wallcloseup_07_cliff_breezezStanding outdoors on a cliff edge, the ocean breeze blowing hair across the face which she holds back gently. Late afternoon sun low and warm. Sea-spray haze in background.zaoutdoor cliff edge, ocean breeze, hand holding hair back, late afternoon warm sun, sea spray hazecloseup_08_skylight_lookupzFace tilted slightly upward. Soft skylight bouncing from a high ceiling as diffused top light. Glinting eyes. Deep focus interior gallery behind.zNface tilted up, skylight top light, glinting eyes, interior gallery backgroundbust_01_white_cyc_teezClean white cyclorama studio. Fitted plain white cotton tee. Long black hair loose over the shoulders. Soft frontal softbox lighting.zOwhite cyclorama studio, white cotton tee, loose long hair, soft frontal softboxbust_02_evening_denimzGolden hour outdoor evening. Distressed blue denim jacket layered over a charcoal tank. Leaning on a weathered wooden bench. Warm city glow blurred behind.zbgolden hour outdoor evening, distressed denim jacket, charcoal tank, wooden bench, warm city bokehbust_03_cafe_cashmerezCafe interior with warm tungsten pendant lamps. Oversized cream cashmere turtleneck. Elbows resting on a pale oak table. Steaming coffee cup blurred in the foreground.zgcafe interior, warm tungsten pendants, cream cashmere turtleneck, oak table, coffee cup foreground blurbust_04_backstage_leatherzBackstage dressing room. Hollywood mirror bulbs rim-light the silhouette. Cropped black leather bomber with silver snap closures. One hand adjusting a silver earring.zhbackstage dressing room, hollywood mirror bulbs, cropped leather bomber, silver snaps, adjusting earringbust_05_neon_alleyzSeoul back alley at night between old brick buildings. Pink and cyan neon signs cast contrasting rim light. Oversized matte black leather biker jacket worn over a sheer gray top.zZseoul back alley night, pink cyan neon rim light, matte black biker jacket, sheer gray topbust_06_rooftop_silkzRooftop garden in mid-morning. Crisp ivory silk blouse with mother-of-pearl buttons, collar open at the collarbone. A concrete planter out of focus in the foreground. Soft-blurred downtown skyline behind.zxrooftop garden morning, ivory silk blouse, mother of pearl buttons, concrete planter foreground, soft skyline backgroundbust_07_bedroom_oxfordzSoft morning sun through linen curtains. Oversized pastel blue men's oxford shirt buttoned halfway. Seated cross-legged on an unmade bed with rumpled white sheets.zUmorning sun linen curtain, pastel blue oxford shirt, unmade bed, rumpled white sheetsthigh_01_street_cardiganzWalking along a repaved Seoul side street at dusk. Faded straight-cut blue jeans and a cropped charcoal cardigan over a white tank. Hands tucked into the cardigan pockets.zaseoul side street dusk, faded blue jeans, cropped charcoal cardigan, white tank, hands in pocketsthigh_02_stage_silverzOn a black-floored stage under purple and amber wash lights from above. Sequined silver mini dress cinched at the waist. Weight shifted onto one leg, mic stand blurred in the foreground.zlblack stage floor, purple amber wash lights, sequined silver mini dress, cinched waist, mic stand foregroundthigh_03_window_bar_slipzSeated on a tall stool at a cafe window-bar. Cappuccino-beige satin slip dress with thin spaghetti straps. Espresso cup on the bar. Long hair gathered to one side.zhcafe window bar stool, cappuccino beige slip dress, thin straps, espresso cup, hair gathered to one sidethigh_04_hotel_pajamazLuxury hotel suite in late afternoon. Matching bone-colored silk pajama set with ivory satin piping. Hand resting on a tufted velvet chair back. Gold floor-lamp glow.zbluxury hotel suite, bone silk pajama set, ivory satin piping, tufted velvet chair, gold floor lampthigh_05_rose_gardenzManicured rose garden at noon. White broderie anglaise tiered sundress and flat leather sandals. Sun flare peeking through a wooden trellis. Arms relaxed at sides.zerose garden noon, broderie anglaise sundress, leather sandals, wooden trellis sun flare, arms relaxedthigh_06_record_storezBrowsing vinyl in a wood-paneled record store. Vintage oversized band tee tucked into high-waisted forest green corduroy trousers. One hand pulling a record sleeve from the bin.zjvinyl record store, wood paneling, vintage band tee, forest green corduroy trousers, hand on record sleevefullbody_01_studio_tee_jeanszPlain neutral gray seamless photography studio. White cotton tee and straight-leg indigo jeans. Barefoot. Arms relaxed at the sides. Even softbox lighting head to toe.zxneutral gray seamless studio, white tee, straight leg indigo jeans, barefoot, even softbox lighting, full figure visiblefullbody_02_crosswalk_trenchzCrossing a wide pedestrian crossing in late autumn. Long camel wool trench coat open over a black turtleneck. Black ankle boots. Caught mid-stride. Blurred traffic behind.zzpedestrian crosswalk late autumn, camel wool trench coat, black turtleneck, black ankle boots, mid stride, blurred trafficfullbody_03_dance_studiozBright mirrored dance studio with a wooden floor. Charcoal ribbed tank and high-waisted black bike shorts. White sneakers. Mid-warmup stretch with one arm extended overhead. Floor-to-ceiling windows behind.zmirrored dance studio, wooden floor, charcoal ribbed tank, black bike shorts, white sneakers, warmup stretch, floor to ceiling windowsfullbody_04_park_path_pinkzTree-lined park path in early spring. Soft pastel pink midi dress and off-white loafers. One hand loosely holding a canvas tote bag. Dappled sunlight across the scene.zdpark path early spring, pastel pink midi dress, off white loafers, canvas tote bag, dappled sunlightfullbody_05_subway_olivezEmpty subway platform in evening. Oversized olive field jacket over a fitted black dress. Low-heel black booties. Platform fluorescents casting clean horizontal shadows. A train blurred behind.zempty subway platform evening, olive field jacket, fitted black dress, low heel booties, fluorescent horizontal shadows, blurred trainfullbody_06_rooftop_nightzRooftop balcony at night with Seoul skyline behind. Oversized matte black leather jacket over a white tee and loose dark jeans. Hands loose at sides. City bokeh in background.zdrooftop night seoul skyline, oversized matte leather jacket, white tee, dark loose jeans, city bokehfullbody_07_beach_linenzWalking barefoot along a quiet sandy beach at golden hour. Flowing ivory linen maxi dress with a side slit. Hair loose in the breeze. Gentle waves and warm low sun behind.zbsandy beach golden hour, ivory linen maxi dress, side slit, barefoot, hair in breeze, gentle wavesfullbody_08_backstage_corridorzConcrete backstage corridor with exposed overhead pipes. Black performance outfit of a fitted cropped top and high-waist wide-leg pants. Walking toward camera. Cool fluorescent overhead lighting.zconcrete backstage corridor, exposed pipes, fitted black cropped top, high waist wide leg pants, walking forward, fluorescent lightingfullbody_09_gallery_columnzWhite-cube art gallery with a large abstract canvas behind her. Minimal black sleeveless column dress and pointed black pumps. One hand tucked into the dress side pocket. Track lighting overhead.zwhite cube art gallery, abstract canvas background, black sleeveless column dress, pointed black pumps, hand in side pocket, track lightingfullbody_10_elevator_monochromeu   Inside a modern mirrored elevator with warm brass trim. Full monochrome charcoal look — cashmere sweater, tailored wide trousers, loafers. Reflection partially visible in the mirrored wall. Warm ceiling downlight.zmirrored elevator brass trim, monochrome charcoal look, cashmere sweater, tailored wide trousers, loafers, partial reflection, warm ceiling downlightz5list[tuple[str, str, tuple[int, int], str, str, str]]ITEMSc               (    V ^8  d   QhRRRRRRRR/# )   compositionstrexprscenereturn )formats   "</Volumes/fast/ai/experiments/whisper-dataset-gen/generate.py__annotate__rR      s(      c  S S     c                    \         V ,          p\        V ,          pR V.pV'       d   VP                  V4       V\        VRV 2R.,          pRP	                  V4      # )zAKeep the exact face, hair, and identity from the reference image.zScene: zCPhotorealistic, natural color, subtle filmic grain, 35mm lens feel. )FRAMINGBODY_ANATOMYappendPOSE_DEFAULTjoin)rJ   rL   rM   framingbodypartss   &&&   rQ   build_promptr^      sf    k"G$DKE T	
%M	 E 88E?rS   c               $    V ^8  d   QhRRRRRR/# )rI   rJ   rK   tailrN   rO   )rP   s   "rQ   rR   rR      s!      s # # rS   c                    \         V ,          p\        .pV'       d   VP                  V4       W0V.,          pR P                  V4      # ), )BODY_CAPTION_TAILCAPTION_IDENTITYrX   rZ   )rJ   r`   	body_tailsegmentss   &&  rQ   build_captionrg      s?    !+.I !H	"d##H99XrS   c               (    V ^8  d   QhRRRRRRRR/# )rI   promptrK   sizeztuple[int, int]labelrN   intrO   )rP   s   "rQ   rR   rR      s(     3 3s 3/ 3# 3# 3rS   c                   R RR\         RV R\        \        4      R\        V^ ,          4      R\        V^,          4      RRR	V.p\        p\	        \
        4       EF   p\        P                  ! VR
R
R7      pVP                  ^ 8X  d|   \        P                  ! RVP                  VP                  ,           4      pV'       g&   \        RVP                   RVP                   24      h\        VP                  ^4      4      u # RVP                  VP                  ,           9   d4   V\
        ^,
          8  d"   \         P"                  ! V4       V^,          pK  \        RVP                   RVP                   24      h	  \        R4      h)dockaiqz	submit-wfz--workflow-idz--promptz--imagez--widthz--heightz
--prioritynormalz--labelTcapture_outputtextz#(\d+)zno job id in submit output: rU   zdatabase is lockedzsubmit failed: 
zsubmit exhausted retries)WORKFLOWrK   FACESUBMIT_LOCK_BACKOFFrangeSUBMIT_LOCK_RETRY
subprocessrun
returncoderesearchstdoutstderrRuntimeErrorrl   grouptimesleep)ri   rj   rk   cmdbackoffattemptrms   &&&     rQ   
submit_oner      s6   ;F3t93tAw<CQLh5	C "G*+NN3t$?<<1		)QXX%89A"%A!((1QXXJ#WXXqwwqz?"AHHqxx$78WGX[\G\=\JJwqLG_QXXJb
CDD , 1
22rS   c               $    V ^8  d   QhRRRRRR/# )rI   job_idrl   timeoutrN   rK   rO   )rP   s   "rQ   rR   rR     s&     A AS A3 A# ArS   c                (   ^ pW!8  d   \         P                  ! RR\        V 4      .RRR7      pVP                  p\        P
                  ! RV\        P                  4      pV'       d   VP                  ^4      MRpVR9   d@   \        P
                  ! RV4      pV'       g   \        RV  R	24      hVP                  ^4      # VR9   d   \        RV  R
V 24      h\        P                  ! \        4       V\        ,          pK  \        RV  RV R24      h)    rn   showTrp   z^\s*state:\s*(\S+)r   zoutput_paths:\s*\[\"([^\"]+)\"zjob z done but output_paths missingrU   z timeout after s)done	completed	succeeded)failederrorcanceled)ry   rz   rK   r~   r|   r}   Mr   r   r   r   POLL_INTERVALTimeoutError)r   r   elapsedr   txtstate_matchstate	out_matchs   &&      rQ   poll_oner     s    G

NNIvs6{;DW[\hhii 5sBDDA(3!!!$66		"CSII"T&1O#PQQ??1%%33fXQug677

=!= 
fX_WIQ?
@@rS   c                    V ^8  d   QhRRRR/# )rI   stemrK   rN   
str | NonerO   )rP   s   "rQ   rR   rR   $  s      3 : rS   c                N    \          F  w  rr4rVW8X  g   K  \        W&4      u # 	  R # )N)rG   rg   )r   r   comp_size_expr_scener`   s   &      rQ   caption_for_stemr   $  s(    /4+v9 ,, 05 rS   c               $    V ^8  d   QhRRRRRR/# )rI   r   rl   
label_stemrK   rN   boolrO   )rP   s   "rQ   rR   rR   +  s!      C S T rS   c           	        \         P                  ! RRV4      p\        V4      pVf"   \        RV R2\        P
                  R7       R#  \        V 4      p\        T R2,          p\        T R2,          pTP                  R4      '       d_   \        P                  ! RRRT 2\        T4      .4      P                  pT^ 8w  d'   \        RT  R	T RT 2\        P
                  R7       R# M\        P                  ! YF4       TP!                  TR,           4       \        RTP"                   RT  R24       R#   \         d0   p\        RT  R	T R
T 2\        P
                  R7        Rp?R# Rp?ii ; i)u   Poll job and copy output to dataset dir as {label_stem}.png/.txt.
label_stem 은 suffix 포함 가능 (예: 'closeup_01_studio_neutral_b').
캡션 lookup 은 suffix 제거 후 ITEMS 매칭.z_[ab]$r   Nz  WARN: stem 'u   ' 이 ITEMS 에 없음 (스킵))fileFz  FAIL #rU   z: .pngz.txtz/home/inhohur/rsyncz-azzspark:z  FAIL rsync #z: rc=rs   z  saved z (#)T)r|   subr   printsysr   r   	ExceptionDATASET_DIR
startswithry   rz   rK   r{   shutilcopy
write_textname)	r   r   barecaptionout_srcedst_pngdst_txtrcs	   &&       rQ   copy_job_outputr   +  sQ   
 66)R,Dt$Gtf$CD3::V6" zl$//Gzl$//G*++^^WevgY-?WNOZZ7N6(!J<uRDA

S  	G%w~&	HW\\N#fXQ
/0  *Rs3#**Es   
D6 6E0$E++E0c                   V ^8  d   QhRR/# )rI   rN   zset[str]rO   )rP   s   "rQ   rR   rR   I  s       rS   c                    \        4       p \        '       g   V # \        R\        \        4       R24       \	        \        P                  4       4       Fr  w  r\        V R2,          P                  4       '       d&   \        RV RV R24       V P                  V4       KN  \        W4      '       g   Ka  V P                  V4       Kt  	  V # )z>Poll RECOVERY jobs, copy outputs. Return set of covered stems.z
[recover] u    orphan jobs 회수 중 ...r   z  skip #rU   u    (이미 존재))
setr'   r   lensorteditemsr   existsaddr   )coveredr   r   s      rQ   recover_orphansr   I  s    G8	Js8}o%@
ABx~~/0TF$-'//11HVHAdV+;<=KK6((KK 1 NrS   c               0    V ^8  d   QhRRRRRRRRRRR	R
/# )rI   onlyr   dry_runr   recoversuffixrK   skip_closeuprN   NonerO   )rP   s   "rQ   rR   rR   Y  s@     <R <Rj <R4 <R$ <R <RX\ <Rim <RrS   c                  aa \         P                  4       '       g   \        P                  ! R \          24       \        P                  RRR7       V '       g   \        M$\         Uu. uF  qU^ ,          V 8X  g   K  VNK  	  uppV '       d#   V'       g   \        P                  ! RV  R24       V'       d!   V Uu. uF  qU^,          R8w  g   K  VNK  	  pp\        R\        V4       R\         R\         24       V'       dR   V FI  w  rxrr\        WV4      p\        W4      p\        R	V R
V RV	^ ,           RV	^,           RV RV 24       KK  	  R# \        4       pV'       d#   \        4       p\        R\        V4       R24       S'       d   RS 2MRoR VV3R llpV Uu. uF  pV! V^ ,          4      '       d   K  VNK  	  pp\        V4      \        V4      ,
          pV'       d   \        RV R24       V'       g!   \        R\        V4       R\         24       R# . pV Ft  w  rxrr\        WV4      p\        W4      pV S 2p\        VV	RV 24      p\        RV RV 24       VP!                  VVVV	34       \"        P$                  ! \&        4       Kv  	  \        R\        V4       R24       ^ pV F%  w  pppp	\)        VV4      '       g   K  V^,          pK'  	  V\        V4      ,           V,           p\        RV R\        V4       R V R!V R"\        V4       R\         24       R# u upi u upi u upi )#u   FATAL: face_sheet 없음: T)parentsexist_okzFATAL: --only 'u   ' 매치 없음r   z[dataset-gen] u   장 타겟 · workflow=u    · trigger=z
=== z (rb   xz) ===
  PROMPT: z
  CAPTION: Nz[recover] covered=z stems
_r   c                    V ^8  d   QhRRRR/# )rI   r   rK   rN   r   rO   )rP   s   "rQ   rR   run.<locals>.__annotate__u  s     X X X XrS   c                   <a  S'       d!   \         S  S R 2,          P                  4       # \        ;QJ d    V 3R lR 4       F  '       g   K   R# 	  R# ! V 3R lR 4       4      # )r   c              3  d   <"   T F%  p\         S V R 2,          P                  4       x  K'  	  R# 5i)r   N)r   r   ).0r   r   s   & rQ   	<genexpr>2run.<locals>._stem_has_any_file.<locals>.<genexpr>x  s/     WFVKTF1#T"22::<<FVs   -0TF)r   _a_b)r   r   any)r   sfxr   s   frQ   _stem_has_any_filerun.<locals>._stem_has_any_fileu  sP    TF3%t"44<<>>sWFVWssWsWsWFVWWWrS   u!   장 이미 존재 — skip resumeu    [dataset-gen] 모두 완료 — z
 pairs in zwhsp-ds-z  enqueued #z  z
[dataset-gen] submitted u    jobs · polling sequentiallyz
[dataset-gen] complete: z new + z recovered + z pre-existing = /)ru   r   r   exitr   mkdirrG   r   r   rt   TRIGGERr^   rg   r   r   r   rX   r   r   SUBMIT_SPACINGr   )r   r   r   r   r   itr   r   r   rj   rL   rM   r`   pcr   r   	to_submitskippendingri   r   r   r   r   totalr   s   &&&f&                     @rQ   rz   rz   Y  s   ;;==-dV45dT2E#H2Q%4-BB#HEE?4&89#;e!u
':e;	N3u:,&=hZ|T[S\
]^38/DET/Ad)AF4&4&47)1T!WI=NqcQ^_`^abc 49 	G!#"3w<.9: !AfX,bCX X $Ee+=be+DeIEu:I&Dtf$EFG0UJ{mTU <>G/8+Dd%0+vcU^
FDHZL*ABVHBzl34
FGT:;

>" 09 
&s7|n4Q
RSD-4)
FGT6:..AID .5 3w<$&E	&tfGCL>tfTdejdkklmpqvmwlx  yC  DO  CP  Q  Ro $I <. Fs$   'L2;L2:L7L7%L<L<c                    \         P                  ! 4       p V P                  R RRR7       V P                  RRRR7       V P                  RRR	R7       V P                  R
RRR7       V P                  RRRR7       V P                  4       p\	        VP
                  VP                  VP                  VP                  VP                  4       R# )z--onlyNu7   단일 stem 만 생성 (예: fullbody_06_rooftop_night))defaulthelpz	--dry-run
store_trueu   프롬프트·캡션만 출력)actionr   z	--recoveru1   하드코딩 orphan 잡 회수 후 missing 보강z--suffixr   uD   파일명에 _{suffix} 덧붙임 (예: 'b' → closeup_01_..._b.png)z--skip-close-upuL   close-up 컷 제외 (B 세트에서 close-up 은 이전 런에서 처리됨))
argparseArgumentParseradd_argument
parse_argsrz   r   r   r   r   skip_close_up)r   argss     rQ   mainr     s    !ANN8T0iNjNN;|:ZN[NN;|:mNnNN:r0vNwNN$\  AON  P<<>D		4<<t{{D<N<NOrS   __main__)i8  i  )   r   )r   F).__conditional_annotations____doc__
__future__r   r   r|   r   ry   r   r   pathlibr   homeru   r   rt   r   rW   rc   rd   SIZE_PORTRAIT	SIZE_TALLSIZE_SQUAREr   POLL_TIMEOUTr   rx   rv   r'   __annotations__rV   rY   	EXPR_WARMEXPR_COMPOSED
EXPR_LAUGHrG   r^   rg   r   r   r   r   r   rz   r   __name__)r   s   @rQ   <module>r     s   #  	   
  yy{TTiikPP0
 
l  o  K	 
K]  	  Yn-  	   
' 
.  	
$  	
'	 
 	
%  	
(  	
%  	
(  	
#  	
#  	
#  	
'  	
   	
"  	
$   	
&! " 	
## $ 	
&
#
"
#
*
*
&
(
&
'
%
,
(
-? .  J   z
  F  K  H GO	K[
e@ j=- b BCe@
 (]I i]_e@ z=- eRTe@ !z=) VY[e@ z=* S_ae@" "z=- fln#e@( z=) thj)e@. "z=) YUW/e@8 v=- MVX9e@> v=) cik?e@D v=) onpEe@J !v=- noqKe@P v=- zacQe@V v=) TAWe@\ v=) k\^]e@f  z=- shjge@l z=- Bsume@r  z=) koqse@x z=) nikye@~ z=) klne@D z=- yqsEe@N ${I} oAOe@T ${I} s BCUe@Z  {I} V NO[e@` "{Iy okmae@f  {I} I NOge@l !{Iy wkmme@r {Iy sikse@x &{I} K NOye@~ "{I} K STe@D '{I} _ ]^Ee@< eP$36 *6 A&< <R~P zF rS   