+
    b �j£  ã                   óô   € R t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt	 ^ RI
t
RtRtRtR tR tR tR tRR	 ltR
 tRR ltRR ltRR ltRR ltR t]R8X  d
   ]! 4        R# R#   ] d    Rt
 LNi ; i)u�  
å¸¦è´§çŸ­è§†é¢‘å·¥ä½œæµ� â€”â€” AutoDL ComfyUI API å®¢æˆ·ç«¯

æµ�ç¨‹:
  1. æ��äº¤äº§å“�å›¾(ref_image_*) + å¸¦è´§æ��ç¤ºè¯� -> MiniMax H3 å›¾ç”Ÿè§†é¢‘
  2. è½®è¯¢å¼‚æ­¥ä»»åŠ¡, æˆ�åŠŸå�Žç«‹å�³ä¸‹è½½è§†é¢‘(ç»“æžœURLçŸ­æ—¶æ•ˆ, å¿…é¡»é©¬ä¸Šä¿�å­˜)
  3. å�¯é€‰: è°ƒ indextts2 ç”Ÿæˆ�å¸¦è´§é…�éŸ³ -> ffmpeg å�ˆæˆ�è¿›è§†é¢‘

å…³é”®çº¦æ�Ÿ(å®žæµ‹ç¡®è®¤):
  - å›¾ç‰‡å¿…é¡»æ˜¯å�¯å…¬ç½‘è®¿é—®çš„URL(jpg/png/webp)ã€‚
    æœ¬åœ°å›¾ç‰‡æ— æ³•ç›´æŽ¥ä¸Šä¼ : /api/v1/file éœ€è¦�æµ�è§ˆå™¨ç™»å½•æ€�, token è°ƒç”¨è¿”å›ž"ç™»å½•è¶…æ—¶"ã€‚
    æœ¬åœ°å›¾ç‰‡éœ€å…ˆä¼ åˆ°å›¾åºŠ/COS/OSS æ‹¿åˆ°å…¬å¼€ URLã€‚
  - ç»“æžœ video URL æœ‰æ•ˆæœŸçŸ­, æ‹¿åˆ°ç«‹åˆ»ä¸‹è½½ã€‚
  - è®¡è´¹: è§†é¢‘æŒ‰ minimax_h3 æ¡£ä½�(20 credits, é—²æ—¶ 10); TTS 20 credits/æ¬¡ã€‚

ç”¨æ³•:
  export AUTODL_TOKEN=xxx
  python3 douyin_video.py --image "URL" --prompt "é•œå¤´æ��è¿°"       --duration 5 --resolution 480pç«– --narration "æ–‡æ¡ˆ" --voice "éŸ³è‰²URL" --out ./run
Nz!https://autodl.art/api/v1/comfyuiÚ&minimax_h3_image_audio_to_video_v2_15szindextts2-v1c                  óˆ   € \         P                  P                  R 4      p V '       g   \        P                  ! R4       RV RR/# )ÚAUTODL_TOKENuU   è¯·å…ˆè®¾ç½®çŽ¯å¢ƒå�˜é‡� AUTODL_TOKEN (ä»¤ç‰Œç®¡ç�†->åˆ›å»ºä»¤ç‰Œ->åˆ†ç»„é€‰ ComfyUI)ÚAuthorizationzContent-Typezapplication/json)ÚosÚenvironÚgetÚsysÚexit)Útokens    Ú6/Users/cheyod/AIGC/DSH/douyin_workflow/douyin_video.pyÚheadersr   !   s4   € Ü�J‰J�N‰N˜>Ó*€EßÜ�ŠÐhÔiØ˜U NÐ4FÐGÐGó    c                 óÆ  € \         fŽ   \        P                  P                  \        V ,           \
        P                  ! V4      P                  4       \        4       RR7      p\
        P                  ! \        P                  P                  V^<R7      4      # \         P                  ! \        V ,           V\        4       ^<R7      pVP                  4        VP                  4       # )NÚPOST)Údatar   Úmethod©Útimeout)Újsonr   r   )ÚrequestsÚurllibÚrequestÚRequestÚBASEr   ÚdumpsÚencoder   ÚloadÚurlopenÚpostÚraise_for_status)ÚpathÚbodyÚreqÚrs   &&  r   Ú_postr%   '   s—   € ÜÒÜ�n‰n×$Ñ$¤T¨D¥[´t·z²zÀ$Ó7G×7NÑ7NÓ7PÜ-4«Y¸vð %ó Gˆä�yŠyœŸ™×/Ñ/°¸RÐ/Ó@ÓAÐAÜ�Š”d˜T•k¨´g³iÈÔL€AØ×ÑÔØ�6‰6‹8€Or   c                 ó~  € \         fk   \        P                  P                  \        V ,           \        4       RR7      p\        P                  ! \        P                  P                  V^<R7      4      # \         P                  ! \        V ,           \        4       ^<R7      pVP                  4        VP                  4       # )NÚGET)r   r   r   )r   r   )r   r   r   r   r   r   r   r   r   r   r    )r!   r#   r$   s   &  r   Ú_getr(   0   s{   € ÜÒÜ�n‰n×$Ñ$¤T¨D¥[¼'»)ÈEÐ$ÓRˆÜ�yŠyœŸ™×/Ñ/°¸RÐ/Ó@ÓAÐAÜ�Š”T˜D•[¬'«)¸RÔ@€AØ×ÑÔØ�6‰6‹8€Or   c                 ó   € \        R V ,           V4      pVP                  R4      R8w  d2   \        RVP                  R4      : RVP                  R4      : 24      hVR,          R,          p\        RVR,          R	,          : R
V: 2RR7       V# )z/comfyui_workflow/ÚcodeÚSuccessu   æ��äº¤å¤±è´¥: z - Úmsgr   Útask_idz[submit] workflow=Úworkflowz	 task_id=T©Úflush)r%   r   ÚRuntimeErrorÚprint)Úworkflow_idr"   ÚjÚtids   &&  r   Úsubmitr6   8   ss   € ÜÐ" [Õ0°$Ó7€AØ‡u�uˆVƒ}˜	Ô!Ý°a·e±e¸F¶mÀQÇUÁUÈ5Å\ÐRÓSÐSØ
ˆF�)�IÕ
€CÝ	¨q°­y¸×/DÐ/DÂcÐ
JÐRVÕWØ€Jr   c                 óî  € R V ,           p\         P                   ! 4       p \        V4      pVP                  R/ 4      pVP                  R4      p\        RV: RVP                  R4      : R2RR7       VR	8X  d   V# VR9   d)   \	        R
\
        P                  ! VRR7      ,           4      h\         P                   ! 4       V,
          V8”  d   \        RV: RV : 24      h\         P                  ! V4       KØ  )z/comfyui_workflow/result/Tr   Ústatusz[poll] status=z
 duration=ÚdurationÚsr/   ÚSUCCESSu   ä»»åŠ¡å¤±è´¥: F©Úensure_asciiu   è¶…æ—¶ zs: task_id=)ÚFAILEDÚERROR)	Útimer(   r   r2   r1   r   r   ÚTimeoutErrorÚsleep)r-   Úpoll_secr   ÚurlÚt0r4   ÚdÚsts   &&&     r   ÚwaitrH   @   s¸   € Ø
%¨Õ
/€CÜ	�Š‹€BØ
Ü�‹IˆØ�E‰E�&˜"ÓˆØ�U‰U�8‹_ˆÝ³°Q·U±U¸:Ö5FÐGÈtÕTØ�Œ?ØˆHØÐ$Ô$ÜÐ/´$·*²*¸QÈUÔ2SÕSÓTÐTÜ�9Š9‹;˜Õ˜gÔ%Ý»7ÂGÐLÓMÐMÜ�
Š
�8Ör   c           	      ób  € \         P                  ! V4      P                  P                  R R R7       \	        RV,           R R7       \
        f”   \        P                  P                  V RR/R7      p\        P                  P                  VRR	7      ;_uu_ 4       p\        VR
4      ;_uu_ 4       pVP                  VP                  4       4       RRR4       RRR4       V# \
        P                  ! V R RR7      ;_uu_ 4       pVP                  4        \        VR
4      ;_uu_ 4       pVP                  R4       F  pVP                  V4       K  	  RRR4       RRR4       V#   + '       g   i     Lœ; i  + '       g   i     T# ; i  + '       g   i     LA; i  + '       g   i     T# ; i)T)ÚparentsÚexist_okz[download] -> r/   Nz
User-AgentzMozilla/5.0)r   i,  r   Úwb)Ústreamr   i   )ÚpathlibÚPathÚparentÚmkdirr2   r   r   r   r   r   ÚopenÚwriteÚreadr   r    Úiter_content)rD   Údestr#   r$   ÚfÚchunks   &&    r   ÚdownloadrY   P   s7  € Ü‡L‚L�Ó×Ñ×#Ñ#¨D¸4Ð#Ô@Ü	Ð
˜TÕ
!¨Õ.ÜÒÜ�n‰n×$Ñ$ S°<ÀÐ2OÐ$ÓPˆÜ�^‰^×#Ñ# C°Ð#×5Ô5¸¼DÀÀt×<LÔ<LÐPQØ�G‰G�A—F‘F“HÔ÷ =M×5ð €Kô �\Š\˜# d°C×8Õ8¸AØ×ÑÔ Ü�d˜D×!Ô! QØŸ^™^¨GÖ4�EØ—G‘G˜E–Nñ 5÷ "÷ 9ð
 €K÷ =M×<Lú×5Ö5ð €Kú÷ "×!ú÷ 9Ö8ð
 €KúsH   ÂE6Â/ E#	ÃE6Ä%FÄ'*F
	ÅFÅ#E3Å.E6Å6F	Æ
FÆFÆF.	c                ó®  € \        V 4      p V P                  R4      '       g   V P                  R4      '       d   V # ^ RIp^ RIp^ RIpVP
                  P                  V 4      '       g   \        RV ,           4      h^ RIpVP                  4       pVP
                  P                  V 4      pRVP                  ! R4      ,           R,           VP                  4       P                  R,          ,           R	,           V,           pVP                  W`V4       RVR
,          ,           R,           VR,          ,           R,           V,           p	\        RV	,          4       V	# )uH   æœ¬åœ°å›¾ç‰‡è‡ªåŠ¨ä¼  COS æ‹¿å…¬ç½‘URL; å·²æ˜¯httpsçš„URLåŽŸæ ·è¿”å›žã€‚zhttp://zhttps://Nu   å›¾ç‰‡ä¸�å­˜åœ¨ä¸”ä¸�æ˜¯URL: zdouyin/z%Y%m%dÚ/:Né   NÚ_Úbucketz.cos.Úregionz.myqcloud.com/u   [cos] æœ¬åœ°å›¾ç‰‡å·²ä¸Šä¼ : %s)ÚstrÚ
startswithr   r@   Úuuidr!   ÚexistsÚ
SystemExitÚ
cos_uploadÚload_configÚbasenameÚstrftimeÚuuid4ÚhexÚ
put_objectr2   )
ÚuÚout_dirr   r@   Ú_uuidre   ÚcfgÚbaseÚkeyÚpublics
   &&        r   Úensure_public_urlrs   _   s   € äˆA‹€AØ‡|�|�I×Ò !§,¡,¨z×":Ò":Øˆß"Ó"Ø�7‰7�>‰>˜!×ÒÜÐ8¸1Õ<Ó=Ð=ÛØ
×
 Ñ
 Ó
"€CØ�7‰7×Ñ˜AÓ€DØ
�d—m’m HÓ-Õ
-°Õ
3°e·k±k³m×6GÑ6GÈÕ6KÕ
KÈcÕ
QÐTXÕ
X€CØ×Ñ˜# #Ô&Ø˜#˜h�-Õ'¨'Õ1°C¸µMÕAÐDTÕTÐWZÕZ€FÜ	Ð
+¨fÕ
4Ô5Ø€Mr   c                 ór  € R VR\        V4      RV/p\        V R,          4       F  w  rg\        Wt4      VRV,          &   K  	  \        \        V4      p\        V4      p	V	R,          ^ ,          R,          p
\        \        P                  ! V4      R,          4      p\        W«4       \        RV,           4       V# )	Úpromptr9   Ú
resolution:Né	   Nzref_image_%dÚresultsrD   zproduct_video.mp4z[done] video saved: )ÚintÚ	enumeraters   r6   ÚWF_IMAGE_AUDIO_VIDEOrH   r`   rN   rO   rY   r2   )Ú
image_urlsru   r9   rv   rm   r"   Úirl   r5   rF   ÚvideorV   s   &&&&&       r   Ú	gen_videor   p   s�   € Ø�f˜j¬#¨h«-¸ÀzÐR€DÜ˜* R�.Ö)‰ˆÜ#4°QÓ#@ˆˆ^˜aÕÓ ñ *ä
Ô% tÓ
,€CÜˆS‹	€AØˆi�L˜�O˜EÕ"€EÜŒw�|Š|˜GÓ$Ð':Õ:Ó;€DÜˆUÔÜ	Ð
  4Õ
'Ô(Ø€Kr   c                 óÊ  € R V RVRRRV/p\        \        V4      p\        V4      pVP                  R. 4       F  pVP                  R4      R9   g   K  \	        \
        P                  ! V4      R,          VP                  RR	4      ,           4      p\        VR
,          V4       \        RV,           4       Vu # 	  \        R\        P                  ! VRR7      ,           4       R# )Úprompt_textÚprompt_simpleÚemo_control_methodu   ä¸ŽéŸ³è‰²å�‚è€ƒéŸ³é¢‘ç›¸å�ŒÚ	emo_happyrx   Útypez
narration.Ú	file_typeÚmp3rD   z[done] narration saved: u   [warn] æœªæ‰¾åˆ°éŸ³é¢‘ç»“æžœ: Fr<   N)Úaudior~   )r6   ÚWF_TTSrH   r   r`   rN   rO   rY   r2   r   r   )	ÚtextÚvoice_ref_urlrm   r„   r"   r5   rF   ÚresrV   s	   &&&&     r   Úgen_narrationr�   |   sÀ   € Ø˜4 °-Ø Ð"?ÀÈiðY€Dä
”˜Ó
€CÜˆS‹	€AØ�u‰u�Y Ö#ˆØ�7‰7�6‹?Ð0Ö0Ü”w—|’| GÓ,¨|Õ;¸c¿g¹gÀkÐSXÓ>YÕYÓZˆDÜ�S˜•Z Ô&ÜÐ,¨tÕ3Ô4ØŠKñ $ô 
Ð
*¬T¯ZªZ¸ÈÔ-NÕ
NÔOÙr   c                 óò   € \        \        P                  ! V 4      P                  R 4      4      pRRRV RVRRV: RV: R2RR	RR
RRRRRV.p\        P
                  ! VRRR7       \        RV,           4       V# )z	final.mp4Úffmpegz-yz-iz-filter_complexz[0:a]volume=z[bg];[1:a]volume=z[vo]z-mapz0:vz[bg]z-c:vÚcopyz	-shortestT)ÚcheckÚcapture_outputz[done] final: )r`   rN   rO   Ú	with_nameÚ
subprocessÚrunr2   )Ú
video_pathÚ
audio_pathÚ	bg_volumeÚvoice_volumeÚoutÚcmds   &&&&  r   Úmuxrœ   Š   sz   € Ü
Œg�lŠl˜:Ó&×0Ñ0°Ó=Ó
>€CØ�T˜4 ¨T°:ÙËÓT`ÐaØ�5˜& &¨&°&Ø�6˜;¨ð-€Cô ‡N‚N�3˜d°4Õ8Ü	Ð
˜SÕ
 Ô!Ø€Jr   c                  ó‚  € \         P                  ! R R7      p V P                  RRRRR7       V P                  RRRR	7       V P                  R
\        ^RR7       V P                  RR. RO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\
        P                  ! VP                  RR7       \        VP                  VP                  VP                  VP                  VP                  4      pVP                  '       di   VP                  '       dW   \        VP                  VP                  VP                  4      pV'       d"   VP                   '       g   \#        W#4       R# R# R# \%        RV,           4       R# ) u   å¸¦è´§çŸ­è§†é¢‘å·¥ä½œæµ�)Údescriptionz--imageÚappendTu#   äº§å“�å›¾URL, å�¯å¤šæ¬¡(æœ€å¤š9å¼ ))ÚactionÚrequiredÚhelpz--promptu,   å¸¦è´§æ��ç¤ºè¯�(ä¸»ä½“/åŠ¨ä½œ/åœºæ™¯/é•œå¤´))r¡   r¢   z
--durationu   1-15ç§’)r…   Údefaultr¢   z--resolutionõ   480pç«–)r£   Úchoicesz--narrationNu   é…�éŸ³æ–‡æ¡ˆ)r£   r¢   z--voiceu   éŸ³è‰²å�‚è€ƒéŸ³é¢‘URLz--outr•   u   è¾“å‡ºç›®å½•z--no-muxÚ
store_trueu   ä¸�å�ˆæˆ�é…�éŸ³)r    r¢   )rK   z[ok] video ready: )r¤   u   768pç«–u   480pæ¨ªu   768pæ¨ª)ÚargparseÚArgumentParserÚadd_argumentry   Ú
parse_argsr   Úmakedirsrš   r   Úimageru   r9   rv   Ú	narrationÚvoicer�   Úno_muxrœ   r2   )ÚapÚar~   r­   s       r   Úmainr²   ”   sJ  € Ü	×	 Ò	 Ð-GÔ	H€BØ‡O�O�I h¸ÐDi€OÔjØ‡O�O�J¨Ð4b€OÔcØ‡O�O�L¤s°A¸I€OÔFØ‡O�O�N¨IÚHð ô Jà‡O�O�M¨4°n€OÔEØ‡O�O�I tÐ2I€OÔJØ‡O�O�G U°€OÔ@Ø‡O�O�J |Ð:K€OÔLØ
�‰‹€AÜ‡K‚K�—‘ Õ%Ü�a—g‘g˜qŸx™x¨¯©°Q·\±\À1Ç5Á5ÓI€EØ‡{‡{€{�q—w—w�wÜ! !§+¡+¨q¯w©w¸¿¹Ó>ˆ	ß˜QŸXŸX˜XÜ�Ö!ñ &‰9ô 	Ð" UÕ*Ö+r   Ú__main__)é
   i  )r•   )é   r¤   r•   )r•   g      à?)gš™™™™™Ù?gš™™™™™ù?)Ú__doc__r§   r   r   r	   r@   rN   r”   Úurllib.requestr   r   ÚImportErrorr   r{   r‰   r   r%   r(   r6   rH   rY   rs   r   r�   rœ   r²   Ú__name__© r   r   Ú<module>r»      s–   ðñ÷( J× I× I× IðÛð +€Ø?Ð Ø	€òHòòòôò ôô"
ôôò,ð* ˆzÔÙ†Fñ øð_ ô Ø‚Hðús   ¤A+ Á+	A7Á6A7