
    3jn,                         S SK Jr  S SKrS SKrS SKrS SKrS SKJrJ	r	   " S S\	R                  5      r " S S\	R                  5      r " S S	\	R                  5      r " S
 S\5      rS\4S jrg)    )overrideN)ComfyExtensionioc            
           \ rS rSr\S\R                  4S j5       r\SS.S\S\S\S\R                  4S	 jj5       r
S
rg)EmptyHiDreamO1LatentImage   returnc                 6   [         R                  " SSSS[         R                  R                  SSSSS	S
9[         R                  R                  SSSSS	S
9[         R                  R                  SSSSS9/[         R                  " 5       R                  5       /S9$ )Nr   zEmpty HiDream-O1 Latent Imagezmodel/latent/hidreama,  Empty pixel-space latent for HiDream-O1-Image. The model was trained at ~4 megapixels; lower resolutions go off-distribution and quality regresses noticeably. Trained resolutions: 2048x2048, 2304x1728, 1728x2304, 2560x1440, 1440x2560, 2496x1664, 1664x2496, 3104x1312, 1312x3104, 2304x1792, 1792x2304.widthi   @   i       )iddefaultminmaxstepheight
batch_size   )r   r   r   r   node_iddisplay_namecategorydescriptioninputsoutputs)r   SchemaIntInputLatentOutputclss    =/home/wildlama/comfy/ComfyUI/comfy_extras/nodes_hidream_o1.pydefine_schema'EmptyHiDreamO1LatentImage.define_schema   s    yy/8+T 24bQ$BDrRaQBG
 YY['')*!
 	
    r   )r   r   r   r   c                    [         R                  " USX!4[        R                  R	                  5       S9n[
        R                  " SU05      $ )N   )devicesamples)torchzeroscomfymodel_managementintermediate_devicer   
NodeOutput)r#   r   r   r   latents        r$   execute!EmptyHiDreamO1LatentImage.execute!   sB    F*))==?
 }}i011r'    N)__name__
__module____qualname____firstlineno__classmethodr   r   r%   intr1   r3   __static_attributes__r5   r'   r$   r   r      sV    
bii 
 
( CD 2s 2C 2S 2 2 2r'   r   c                       \ rS rSrSr\S\R                  4S j5       r\S\R                  R                  S\R                  4S j5       rSrg)	HiDreamO1ReferenceImages*   zCAttach reference images to both positive and negative conditioning.r	   c                 
   [         R                  " SSSS[         R                  R                  SS9[         R                  R                  SS9[         R                  R                  S[         R                  R                  [         R                  R                  S	5      [        S
S5       Vs/ s H  nSU 3PM
     snS
S9SS9/[         R                  R                  SS9[         R                  R                  SS9/S9$ s  snf )Nr>   zHiDream-O1 Reference Imageszmodel/conditioning/hidreamzuAttach 1-10 reference images to conditioning, one for edit instructionor multiple for subject-driven personalization.positiver   negativeimagesimager   r   image_)namesr   zLReference images. 1 image = instruction edit; 2-10 images = multi reference.)templatetooltip)r   r   )	r   r   Conditioningr   AutogrowTemplateNamesImageranger!   )r#   is     r$   r%   &HiDreamO1ReferenceImages.define_schema-   s    yy.61B %%%4%%%4!![[66w/5:1b\B\s|\B 7 
 l " 	 &&J&?&&J&?-
 	
 Cs   ,D  rD   c                    [        SS5       Vs/ s H  nSU 3U;   d  M  USU 3   PM     nn[        R                  " USU0SS9n[        R                  " USU0SS9n[        R                  " X5      $ s  snf )Nr   r   rF   reference_latentsT)append)rN   node_helpersconditioning_set_valuesr   r1   )r#   rA   rC   rD   rO   refss         r$   r3    HiDreamO1ReferenceImages.executeK   s    .3ArlUlqclf>T$s|$lU77CVX\B]fjk77CVX\B]fjk}}X00 Vs
   A4A4r5   N)r6   r7   r8   r9   __doc__r:   r   r   r%   rK   Typer1   r3   r<   r5   r'   r$   r>   r>   *   sR    M
bii 
 
: 1BKK4D4D 1 1 1r'   r>   c                      \ rS rSrSrSrSS// SQ/ SQSS	// S
Q/ SQS.rS/S/SS// SQS.r\SS\	S\	S\	S\
R                  4S jj5       r\S\R                  4S j5       r\S\S\S\S\S\S\S\R&                  4S j5       rSrg) HiDreamO1PatchSeamSmoothingS   r      r   r      r`   )r^   r`   r   r   r`   r_   )r^   ra   rb   r_      rd   )   rd   )rd   re   )re   re   rg   rc   )rf   )rd   rg   )rg   rd   rc   ))rh   )r]   rh   )rh   r]   )r]   r]   )ri   )   ri   )ri   rj   )rj   rj   ))single_shift   )rk   r]   )rk   rd   )	symmetricrl   )rm   r]   )rm   rd   rl   )rl   r]   rd   24ramp_2_4
ramp_2_4_8cycxsizer	   c                    US-  n[         R                  " U5      R                  US5      n[         R                  " U5      R                  SU5      nX@-
  U-   U-  U-
  nXQ-
  U-   U-  U-
  nSS[         R                  " [         R                  U-  U-  5      -   -  S[         R                  " [         R                  U-  U-  5      -   -  $ )z9size x size Hann tile peaking at (cy, cx) within a patch.rl   r   g      ?)r,   arangeviewcospi)rs   rt   ru   halfyyxxdydxs           r$   
_hann_tile&HiDreamO1PatchSeamSmoothing._hann_tilei   s     qy\\$$$T1-\\$$$Q-w~%-w~%-q599UXX]T%9::;q599UXXXZ]]aMaCb?bccr'   c                 4   [         R                  " SSSSS[         R                  R                  SS9[         R                  R                  SS	S
SSSS9[         R                  R                  SSS
SSSS9[         R
                  R                  SSS/SSS9[         R
                  R                  S/ SQSSS9[         R
                  R                  S/ SQSSS9[         R                  R                  SSS
SSSS9/[         R                  R                  5       /S 9$ )!Nr[   zHiDream-O1 Patch Seam Smoothingzmodel/patch/hidreamTzyAverage the model output across multiple shifted patch-grid positions during the late portion of sampling. Cancels seams.modelrB   start_percentg?              ?g{Gz?z?Sampling progress (0=start, 1=end) at which the blend turns ON.)r   r   r   r   r   rI   end_percentz/Sampling progress at which the blend turns OFF.patternrk   rm   zShift layout. single_shift: one pass at the natural patch grid + others offset. symmetric: all passes off-grid, shifts split around origin.)r   optionsr   rI   passesrn   ro   zNumber of passes per gated step. 2/4 = fixed. ramp_*: pass count increases as sampling approaches end (more smoothing where seams are most visible).blend)averagewindowmedianr   zaverage: equal-weight mean. window: Hann-windowed weighting favoring each pass away from its patch boundaries. median: per-pixel median, rejects wraparound-outlier passes.strengthzLInterpolation between the natural-grid pred (0) and the averaged result (1).)r   r   r   is_experimentalr   r   r   )r   r   Modelr   FloatCombor!   r"   s    r$   r%   )HiDreamO1PatchSeamSmoothing.define_schemas   s6   yy1:* P '*/3CSW[]   -#3UYM    +[9* j	   @ s	   ;% J	   *csRVj  5< XX__&'O(
 (	
r'   r   r   r   r   r   r   c                  ^ ^^^^^^^^^ TS::  d  X2::  a  [         R                  " U5      $ T R                  mTS-  nT R                  U    V	s/ s H  n	T R                  XI4   PM     sn	mTS:X  a[  T V
VVs/ s HH  n
[
        R                  " U
 VVs/ s H"  u  pT R                  X-
  T-  X-
  T-  T5      PM$     snnSS9PMJ     snnn
mOS /[        T5      -  mUR                  5       nUR                  S5      n[        UR                  5      n[        UR                  U5      5      U-  m[        UR                  U5      5      U-  m0 mS[        S[        S	[
        R                  4UU U4S
 jjmUUUUUUUU4S jnUR!                  ["        R$                  R&                  R(                  SU5        [         R                  " U5      $ s  sn	f s  snnf s  snnn
f )Nr   rl   r   r   dimmodel_samplingHWr	   c           
      ~  > XX#4nTR                  U5      nUb  U$ TR                  n[        R                  " [        R                  " X[        R
                  S9U S-
  [        R                  " X[        R
                  S9-
  5      n[        R                  " [        R                  " X[        R
                  S9US-
  [        R                  " X[        R
                  S9-
  5      nUT-
  U-  R                  SS5      n	UT-
  U-  R                  SS5      n
U	S S 2S 4   U
S S S 24   -  R                  U5      nUTU'   U$ )Nr*   dtyper   r   )getEDGE_FEATHERr,   minimumrw   float32clampto)r   r   r*   r   keycachedfeatherysxsy_maskx_maskrampPr#   edge_ramp_caches               r$   get_edge_ramp:HiDreamO1PatchSeamSmoothing.execute.<locals>.get_edge_ramp   s   'C$((-F!&&Gu||AEMMR !Aaemm)\\^Bu||AEMMR !Aaemm)\\^BAv(//15FAv(//15F1d7OfT1Wo599%@D#'OC Kr'   c           	        > US   n[        US   S   5      nU " U0 UD6nTUs=::  a  T::  d   U$   U$ [        T5      S:X  a  SnOBTU-
  [        TT-
  S5      -  n[        [	        U[        T5      -  5      [        T5      S-
  5      nTU   nT U   n	/ n
U Hr  u  pUS:X  a  US:X  a  U
R                  U5        M$  [        R                  " X;U4SS9nU " U/USS  Q70 UD6nU
R                  [        R                  " X* U* 4SS95        Mt     [        R                  " U
SS9nUR                  u      nnnTS:X  a  UR                  S   nU	R                  UR                  UR                  S9nUR                  SUT-  UT-  5      S S 2S U2S U24   nUR                  SS	S
9n[        R                  " US:  [        R                   " USU-  5      UUR#                  SS9-  5      nUUS S 2S S S S 2S S 24   -  R                  SS9nO5TS:X  a   [        R$                  " USS9R&                  nOUR)                  SS9nT" UUUR                  UR                  5      nUSUT-  -
  -  UUT-  -  -   $ )Nr   r   g:0yE>))shiftsdimsr   r   r   T)r   keepdimgMbP?r   )r   r   )floatlenr   r   r;   rS   r,   rollstackshaper   r*   r   repeatsumwhere	full_liker   r   valuesmean)!executorargskwargsxtpred	level_idxphaser   window_tilespredssysxx_rolledpred_rolledstacked_r   r   Ntileswsum_wavgmaskr   r   end_tr   shift_levelsstart_tr   window_tile_levelss!                            r$   smoothing_wrapper>HiDreamO1PatchSeamSmoothing.execute.<locals>.smoothing_wrapper   s   QAd1gaj!AT,V,DQ)') *< A%	 1GeOT(BBEC,=$= >L@QTU@UV	!),F-i8LE 7rQwLL& ::aRxH&xE$qr(EfEUZZS2#JXVW ! kk%Q/G#MMMAq!Q MM!$$w~~W]]SLLAFAF3Arr2A2I>!T2KKeooaq.I1u{{_c{OdKde1dD!Q#6!77<<<C("ll7299llql) !At{{DJJ?D301C4(?4KKKr'   hidream_o1_patch_seam_smoothing)r   r1   
PATCH_SIZERAMP_LEVELSSHIFTS_BY_PATTERNr,   r   r   r   cloneget_model_objectr   
multiplierpercent_to_sigmar;   Tensoradd_wrapper_with_keyr.   patcher_extension
WrappersMPDIFFUSION_MODEL)r#   r   r   r   r   r   r   r   r{   nlstr   r   mr   r   r   r   r   r   r   r   r   r   s   `     ``         @@@@@@@r$   r3   #HiDreamO1PatchSeamSmoothing.execute   s   s?k:==''NNAvEH__U[E\]E\--wl;E\]H ("'C _bc_bU[UWS^^TY!Odi1_aP_bcijk'"
 #'#l*;!;KKM++,<=>445
77FG*Tn55kBCjP "	S 	S 	ELL 	 	 '	L '	LR 	
u66AAQQSt  wH  	I}}QY ^ d"s   G7G)G;GGr5   N)r   )r6   r7   r8   r9   r   r   r   r   staticmethodr;   r,   r   r   r:   r   r   r%   r   strr1   r3   r<   r5   r'   r$   r[   r[   S   s   JL %h/AB&/AF	 cc!f	K ds d d3 d d d )
bii )
 )
V R e R % R RU R _b R kn R z R   EG  ER  ER R  R r'   r[   c                   L    \ rS rSr\S\\\R                        4S j5       r	Sr
g)HiDreamO1Extension   r	   c                 ,   #    [         [        [        /$ 7fN)r   r>   r[   )selfs    r$   get_node_list HiDreamO1Extension.get_node_list   s      &$'
 	
s   r5   N)r6   r7   r8   r9   r   listtyper   	ComfyNoder   r<   r5   r'   r$   r   r      s)    
T$r||*<%= 
 
r'   r   r	   c                     #    [        5       $ 7fr   )r   r5   r'   r$   comfy_entrypointr      s     s   )typing_extensionsr   r,   comfy.model_managementr.   comfy.patcher_extensionrT   comfy_api.latestr   r   r   r   r>   r[   r   r   r5   r'   r$   <module>r     sd    &     /2 2>&1r|| &1R_ ",, _ D
 
  2  r'   