
    i                     @   S r SSKJrJrJr  SSKJrJrJr  SSK	J
r
  SSKrSSKrSr\S	-   r " S
 S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S  S!\5      r " S" S#\\5      r " S$ S%\5      r " S& S'\5      r " S( S)\5      r " S* S+\5      r " S, S-\5      r  " S. S/\5      r! " S0 S15      r" " S2 S35      r#S4 r$ " S5 S65      r%g)7z'Extractors for https://www.civitai.com/   )	ExtractorMessageDispatch   )textutil	exception)memcache    Nz(?:https?://)?civitai\.comz/user/([^/?#]+)c                       \ rS rSrSrSrSrSrSrSr	Sr
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rSS jrSS jrSrg)CivitaiExtractor   z!Base class for civitai extractorscivitaizhttps://civitai.com)
{category}{user[username]}imagesz{file[id]}.{extension}z{file[uuid]})g      ?g      ?c                    U R                  S5      S:X  a,  U R                  R                  S5        [        U 5      U l        O+U R                  R                  S5        [        U 5      U l        U R                  S5      =n(       a<  [        U[        5      (       d  SR                  U5      nXl	        US:X  a  SOS	U l
        OSU l	        SU l
        U R                  S
5      =n(       aW  [        U[        5      (       d  SR                  U5      nUS   S:X  a!  U R                  S-   UR                  S5      -   nX l        O#Ub  U(       a  U R                  U l        OSU l        SU l        U R                  S5      =n(       ao  [        U[        5      (       a  UR                  S5      nO[        U[        [         45      (       d  1 SknSU;   U l        SU;   U l        SU;   U l        SU;   U l        g S=U l        =U l        =U l        U l        g )NapirestzUsing REST APIzUsing tRPC APIquality,zoriginal=truepngjpgzquality-videosr   +z+,zoriginal=true,quality=100webmmetadata>   posttagsversion
generationr    r   r   r   F)configlogdebugCivitaiRestAPIr   CivitaiTrpcAPI
isinstancestrjoin_image_quality
_image_extlstrip_video_quality
_video_extsplitlisttuple_meta_generation_meta_version
_meta_post
_meta_tags)selfr   quality_videor   s       I/app/mltbenv/lib/python3.13/site-packages/gallery_dl/extractor/civitai.py_initCivitaiExtractor._init   s   ;;u'HHNN+,%d+DHHHNN+,%d+DHkk),,7,gs++((7+")(/?(BuDO"1D#DO KK(899=9mS11 # 7Q3&!%!4!4s!:!.!5!5d!;"<"/&7"&"5"5D"=D {{:..8.(C((#>>#.4-88D%1X%=D!"+x"7D%1DO%1DO #((D! (D$6 (    c              #   @  #    U R                  5       =n(       a:  S[        0nU H+  nU R                   SUS    3n[        R                  XB4v   M-     g U R                  5       =n(       a  U H  nSU;   a  US   nOU R                  R                  US   5      nU R                  R                  US   5      nU R                  US   5      US'   UUR                  S5      S.nU R                  (       a  U R                  U5      u  US	'   US
'   [        R                  SU4v   U R                  U5       H,  nUR                  U5        [        R                   US   U4v   M.     M     g U R#                  5       =n(       Ga  U GH  nUUR                  S5      S.nU R$                  (       a  U R'                  U5      US'   U R(                  (       a  U R+                  U5      US'   U R                  (       a5  U R                  US5      u  US	'   US
'   SU;   a  UR                  S5      US'   U R,                  (       a5  SU;  a/  U R/                  U5      =US'   nU(       a  UR                  SS 5        U R                  US   5      US'   U R1                  U5      =US'   n[2        R4                  " XB5        US   (       d0  UR7                  S5      S:X  a  U R8                  OU R:                  US'   [        R                  SU4v   [        R                   XB4v   GM     g g 7f)N
_extractorz/models/idr   publishedAtdateuser)r   r@   modelr    url)filer@   r    r   Fr   	createdAt	extensiontypevideo)modelsCivitaiModelExtractorrootr   Queuepostsr   images_postr   parse_datetime_isopopr2   _extract_meta_version	Directory_image_resultsupdateUrlr   r1   _extract_meta_generationr4   _extract_meta_tagsr3   _extract_meta_post_urlr   nameext_from_urlgetr-   r*   )	r5   rI   datarA   rC   rM   r   r   rD   s	            r7   itemsCivitaiExtractor.itemsI   s    [[]"6" "78D8E$K=9mmS..   JJL 5 t#!(^F!XX11$t*=Fxx}}T$Z0#66tM7JKV  HHV, %%2248 3DM4	? ''T11 //7DKK%!++tE{D88 8% * [[]"6" ! HHV,
 (()-)F)Ft)LD&??#'#:#:4#@DL%%224? 3DM4	?~'+xx'7V??vT'9*.*A*A$*GGDL4.#66tK7HIV$(IIdO3Uc%%c0K(+/88F+;w+F % ''T11kk3,,; < ? #s   LLc                     gN ra   r5   s    r7   rI   CivitaiExtractor.models       r:   c                     gr`   ra   rb   s    r7   rM   CivitaiExtractor.posts   rd   r:   c                     gr`   ra   rb   s    r7   r   CivitaiExtractor.images   rd   r:   c                    US   nUR                  S5      S:H  nU(       a  U R                  OU R                  nSU;   a/  UR                  SS5      nUS   US'   XES'   SR	                  U5      $ X!S'   UR                  S	5      nU(       dv  UR                  S
5      =n(       a)  UR                  S5       SUR                  S5      S    3nO5U(       a  U R                  OU R                  nUR                  S5       SU 3nSU SU SU 3$ )NrC   rG   rH   /   r   uuidr   namemimeTyper=   .z1https://image.civitai.com/xG1nkqKTMzGDvpLrqFT7WA/)r[   r,   r)   rsplitr(   
rpartitionr-   r*   )	r5   imagerC   rH   r   partsrm   mimeexts	            r7   rY   CivitaiExtractor._url   s
   El		&!W,).$%%D4G4G#:JJsA&E!!HE&M!H88E?"fyy yy,,t,))D/*!DOOC,@,C+DE).dooDOO))D/*!C515'!D6+ 	,r:   c           	   #   R  #    [        US5       GH  u  p#[        R                  " US   UUU R                  U5      S.5      nUS   (       d0  UR	                  S5      S:X  a  U R
                  OU R                  US'   SU;  a4  US   R                  5       (       a  [        R                  " US   5      US'   S	U;  a  U R                  US
   5      US	'   U R                  (       a  U R                  U5      US'   U R                  (       a  U R                  U5      US'   Uv   GM     g 7f)Nr   rC   )numrD   rC   rF   rG   rH   r=   filenamer?   rE   r    r   )	enumerater   rZ   rY   r[   r-   r*   	isdecimal	parse_intrO   r1   rV   r4   rW   )r5   r   rx   rD   r\   s        r7   rS   CivitaiExtractor._image_results   s	    "61-IC((e		$7 D
 $'+xx'77'BDOOOO [! 4D$4$>$>$@$@!^^D,<=T
T!#66tK7HIV$$%)%B%B4%H\"#66t<VJ% .s   D%D'c                     U R                  5         U R                  nSUS'   SUS'   SU;  a  SUS'   U R                  R                  U5      $ )NTauthedFuseIndex	reactions)LikeDislikeHeartLaughCry)_require_authparamsr   r   r5   r   s     r7   _image_reactions!CivitaiExtractor._image_reactions   sP    x"zf$"NF;xxv&&r:   c                     SU R                   R                  ;  a6  U R                  R                  SSS9(       d  [        R
                  " S5      eg g )NAuthorizationz__Secure-civitai-tokenz.civitai.com)domain)api-keyzauthenticated cookies)r   headerscookiesr[   r	   AuthRequiredrb   s    r7   r   CivitaiExtractor._require_auth   sN    $(("2"22LL$$( % A(()MNNA 3r:   c                 4    [         R                  " U1 Sk5      $ )N>   r   toolstypesr   
baseModels
techniquesfileFormats)r   parse_query_list)r5   values     r7   _parse_queryCivitaiExtractor._parse_query   s    $$ ,- 	-r:   c                      U R                   R                  US   5      $ ! [         a%  nU R                  R	                  U5      s S nA$ S nAff = fNr=   )r   image_generationdata	Exceptionr"   	tracebackr5   rr   excs      r7   rV   )CivitaiExtractor._extract_meta_generation   sE    	+8800t== 	+88%%c**	+     
AA
A
Ac                      U R                   R                  US   5      nU R                  US   5      US'   U$ ! [         a%  nU R                  R                  U5      s S nA$ S nAff = f)NpostIdr>   r?   )r   r   rO   r   r"   r   )r5   rr   r   r   s       r7   rX   #CivitaiExtractor._extract_meta_post   s`    	+88==x1D2243FGDLK 	+88%%c**	+s   69 
A(A#A(#A(c                      U R                   R                  US   5      $ ! [         a%  nU R                  R	                  U5      s S nA$ S nAff = fr   )r   tag_getvotabletagsr   r"   r   r   s      r7   rW   #CivitaiExtractor._extract_meta_tags   sE    	+88..uT{;; 	+88%%c**	+r   c                     U R                  X5      =n(       a=  U R                  R                  U5      R                  5       nUR	                  SS 5      U4$  g! [
         a%  nU R                  R                  U5         S nAgS nAff = f)NrA   )NN)_extract_version_idr   model_versioncopyrP   r   r"   r   )r5   itemis_post
version_idr   r   s         r7   rQ   &CivitaiExtractor._extract_meta_version   s    	$!55dDDzD((00<AAC{{7D17:: E
   	$HHs##	$s   AA 
B#BBc                 F   UR                  S5      =n(       a  U$ UR                  S5      =n(       a  US   $ UR                  S5      =n(       a  US   $ U(       a  g U R                  R                  US   5      =US'   nUR                  SS 5        U R	                  U5      $ )NmodelVersionIdmodelVersionIdsr   modelVersionIdsManualr   r   r@   )r[   r   r   rP   r   )r5   r   r   r   version_idsr   s         r7   r   $CivitaiExtractor._extract_version_id   s    "233:3((#455;5q>!((#:;;;;q>!"hhmmDN;;Vt''--r:   )	r*   r)   r1   r3   r4   r2   r-   r,   r   NT)__name__
__module____qualname____firstlineno____doc__categoryrK   directory_fmtfilename_fmtarchive_fmtrequest_intervalr8   r]   rI   rM   r   rY   rS   r   r   r   rV   rX   rW   rQ   r   __static_attributes__ra   r:   r7   r   r      sr    +H D@M+L K!)(V?B,,*'O-
+++.r:   r   c                   N    \ rS rSrSrSr\S-   rSrS r	S r
S rS	 rS
 rS rSrg)rJ      rA   )r   r   z{model[id]}{model[name]:? //}z!{version[id]}{version[name]:? //}z*/models/(\d+)(?:/?\?modelVersionId=(\d+))?z&https://civitai.com/models/12345/TITLEc              #     #    U R                   u  pU R                  R                  U5      nSU;   a	  US   nUS	 OUS   nUS	 US   nUS	 U(       a=  [        U5      nU H  nUS   U:X  d  M    O   U R                  R	                  U5      nU4nU Hw  nU R                  US   5      US'   UUUS.n[        R                  SU4v   U R                  X6U5       H,  nUR                  U5        [        R                  US	   U4v   M.     My     g 7f)
Nr@   creatormodelVersionsr=   rE   r?   )rA   r   r@   rB   rC   )groupsr   rA   intr   rO   r   rR   _extract_filesrT   rU   )	r5   model_idr   rA   r@   versionsr   r\   rD   s	            r7   r]   CivitaiModelExtractor.items  s#    #{{x(U?=Df#Di )/"ZJ#4=J. $ ((00<zHG"55gk6JKGFO !"D ##R--++EDAD!kk4;44 B  s   A'D-B Dc                 Z  ^^^^ U R                  S5      nUc  U R                  TTT5      $ U R                  U R                  U R                  U R                  S.m[	        U[
        5      (       a  UR                  S5      n[        R                  R                  UUUU4S jU 5       5      $ )Nfiles)rA   rr   gallerygallerier   c              3   \   >#    U  H!  nTUR                  S 5         " TTT5      v   M#     g7f)sN)rstrip).0ft
generatorsrA   r@   r   s     r7   	<genexpr>7CivitaiModelExtractor._extract_files.<locals>.<genexpr>:  s1      -
 ryy~&ugt<<s   ),)
r!   _extract_files_image_extract_files_model_extract_files_galleryr&   r'   r.   	itertoolschainfrom_iterable)r5   rA   r   r@   	filetypesr   s    ``` @r7   r   $CivitaiModelExtractor._extract_files,  s    KK(	,,UGTBB 11113333	

 i%%!,I,, -
-
 
 	
r:   c                    / n[        US   S5       H  u  pVUS   R                  S5      u  pxn	U(       d  U	nSn	SUS    SUS    SUS    3US	'   UR                  UUUU	UR                  S
5      =(       d    U R                   SUS    3SU R
                  R                  R                  S5      0U R                  S.5        M     U$ )Nr   r   rm   ro   binzmodel-r=   -rl   downloadUrlz/api/download/models/r   )rx   rD   ry   rF   rC   _http_headers_http_validate)rz   rq   appendr[   rK   r   r   _validate_file_model)
r5   rA   r   r@   r   rx   rD   rm   sepru   s
             r7   r   *CivitaiModelExtractor._extract_files_model?  s    "77#3Q7IC!&\44S9NDs#E$K='$-$t*NDLLL !! HH]+ Gyyk!6wt}oF#TXX%5%5%9%9/%J#L"&";";  8& r:   c                     SU;   a  US   nOZUS   US   4U R                   R                  5       U R                   R                  5       SSS.nU R                   R                  USS9nU R	                  U5      $ )Nr   r=      T)r   prioritizedUserIdsperiodsortlimitpendingFdefaults)r   _param_period_param_sortr   rS   )r5   rA   r   r@   r   r   s         r7   r   *CivitaiModelExtractor._extract_files_imageW  s|    wX&F #*$-'+Dzm8811388//1F XX__Ve_<F""6**r:   c                 \    U R                   R                  XU5      nU R                  U5      $ N)r   images_galleryrS   )r5   rA   r   r@   r   s        r7   r   ,CivitaiModelExtractor._extract_files_galleryg  s)    ((>""6**r:   c                 (   UR                   R                  SS5      R                  S5      (       ab  [        R                  " UR                  SS5      nU(       a  S[        R
                  " U5       S3nOSnU R                  R                  U5        g	g
)NContent-TyperB   z	text/htmlzmantine-Alert-message">z</div></div></div>"z" - 'api-key' requiredz('api-key' required to download this fileFT)r   r[   
startswithr   extrremove_htmlr"   warning)r5   responsealertmsgs       r7   r   *CivitaiModelExtractor._validate_file_modelk  s}    3>>{KKII8:NPE4++E233JK@HHS!r:   ra   N)r   r   r   r   subcategoryr   BASE_PATTERNpatternexampler]   r   r   r   r   r   r   ra   r:   r7   rJ   rJ      s?    K:M JJG6G"5H
&0+ +
r:   rJ   c                   ,    \ rS rSrSr\S-   rSrS rSr	g)CivitaiImageExtractorix  rr   z/images/(\d+)z https://civitai.com/images/12345c                 R    U R                   R                  U R                  S   5      $ Nr   )r   rr   r   rb   s    r7   r   CivitaiImageExtractor.images}  s    xx~~dkk!n--r:   ra   N
r   r   r   r   r  r  r  r  r   r   ra   r:   r7   r  r  x  s    K--G0G.r:   r  c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	CivitaiCollectionExtractori  
collection)r   z{user_collection[username]}collectionsz'{collection[id]}{collection[name]:? //}z/collections/(\d+)z%https://civitai.com/collections/12345c                    [        U R                  S   5      nU R                  R                  U5      =U R                  S'   nUR                  SS 5      U R                  S'   UU R                  R                  5       U R                  R                  5       U R                  R                  SS.nU R                  R                  USS9$ )	Nr   r  r@   user_collection	cosmetics)collectionIdr   r   browsingLevelincludeFr   )
r   r   r   r  kwdictrP   r   r   nsfwr   )r5   cidcolr   s       r7   r   !CivitaiCollectionExtractor.images  s    $++a.!*.((*=*=c*BBL!C),)>%& ""hh446"hh224"hhmm,
 xxv66r:   ra   N)r   r   r   r   r  r   r  r  r  r   r   ra   r:   r7   r  r    s$    KOM22G5G7r:   r  c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	CivitaiPostExtractori  r   r   {username|user[username]}rM   z{post[id]}{post[title]:? //}z/posts/(\d+)zhttps://civitai.com/posts/12345c                 8    S[        U R                  S   5      04$ )Nr=   r   )r   r   rb   s    r7   rM   CivitaiPostExtractor.posts  s    s4;;q>*+--r:   ra   N)r   r   r   r   r  r   r  r  r  rM   r   ra   r:   r7   r&  r&    s"    K5M_,G/G.r:   r&  c                   ,    \ rS rSrSr\S-   rSrS rSr	g)CivitaiTagExtractori  tagz/tag/([^/?&#]+)zhttps://civitai.com/tag/TAGc                 ~    [         R                  " U R                  S   5      nU R                  R	                  U5      $ r  )r   unquoter   r   
models_tagr5   r-  s     r7   rI   CivitaiTagExtractor.models  s-    ll4;;q>*xx""3''r:   ra   N
r   r   r   r   r  r  r  r  rI   r   ra   r:   r7   r,  r,    s    K//G+G(r:   r,  c                   ,    \ rS rSrSr\S-   rSrS rSr	g)CivitaiSearchModelsExtractori  zsearch-modelsz/search/models\?([^#]+)z-https://civitai.com/search/models?query=QUERYc                     U R                  U R                  S   5      n[        U 5      R                  UR	                  S5      UR	                  S5      U R
                  R                  5      $ Nr   querysortBy)r   r   CivitaiSearchAPIsearch_modelsr[   r   r!  r   s     r7   rI   #CivitaiSearchModelsExtractor.models  U    ""4;;q>2%33JJwH!5txx}}F 	Fr:   ra   Nr3  ra   r:   r7   r5  r5        !K77G=GFr:   r5  c                   ,    \ rS rSrSr\S-   rSrS rSr	g)CivitaiSearchImagesExtractori  zsearch-imagesz/search/images\?([^#]+)z-https://civitai.com/search/images?query=QUERYc                     U R                  U R                  S   5      n[        U 5      R                  UR	                  S5      UR	                  S5      U R
                  R                  5      $ r7  )r   r   r:  search_imagesr[   r   r!  r   s     r7   r   #CivitaiSearchImagesExtractor.images  r=  r:   ra   Nr  ra   r:   r7   r@  r@    r>  r:   r@  c                   ,    \ rS rSrSr\S-   rSrS rSr	g)CivitaiModelsExtractori  rI   z/models(?:/?\?([^#]+))?(?:$|#)zhttps://civitai.com/modelsc                 t    U R                  U R                  S   5      nU R                  R                  U5      $ r  )r   r   r   rI   r   s     r7   rI   CivitaiModelsExtractor.models  s-    ""4;;q>2xxv&&r:   ra   Nr3  ra   r:   r7   rE  rE    s    K>>G*G'r:   rE  c                   ,    \ rS rSrSr\S-   rSrS rSr	g)CivitaiImagesExtractori  r   z/images(?:/?\?([^#]+))?(?:$|#)zhttps://civitai.com/imagesc                 ~    U R                  U R                  S   5      nSUS'   U R                  R                  U5      $ )Nr   rr   r   r   r   r   r   r   s     r7   r   CivitaiImagesExtractor.images  6    ""4;;q>2$wxxv&&r:   ra   Nr  ra   r:   r7   rI  rI        K>>G*G'r:   rI  c                   ,    \ rS rSrSr\S-   rSrS rSr	g)CivitaiVideosExtractori  videosz/videos(?:/?\?([^#]+))?(?:$|#)zhttps://civitai.com/videosc                 ~    U R                  U R                  S   5      nSUS'   U R                  R                  U5      $ )Nr   rH   r   rL  r   s     r7   r   CivitaiVideosExtractor.images  rN  r:   ra   Nr  ra   r:   r7   rQ  rQ    rO  r:   rQ  c                   ,    \ rS rSrSr\S-   rSrS rSr	g)CivitaiPostsExtractori  rM   z/posts(?:/?\?([^#]+))?(?:$|#)zhttps://civitai.com/postsc                 t    U R                  U R                  S   5      nU R                  R                  U5      $ r  )r   r   r   rM   r   s     r7   rM   CivitaiPostsExtractor.posts  s-    ""4;;q>2xx~~f%%r:   ra   N)
r   r   r   r   r  r  r  r  rM   r   ra   r:   r7   rW  rW    s    K==G)G&r:   rW  c                   (    \ rS rSr\S-   rSrS rSrg)CivitaiUserExtractori  z/?(?:$|\?|#)zhttps://civitai.com/user/USERc           	          U R                    SU R                  S    S3nU R                  [        US-   4[        US-   4[
        US-   4[        US-   4[        US-   44S	5      $ )
Nz/user/r   rj   rI   rM   r   rR  r  )user-imagesuser-videos)rK   r   _dispatch_extractorsCivitaiUserModelsExtractorCivitaiUserPostsExtractorCivitaiUserImagesExtractorCivitaiUserVideosExtractorCivitaiUserCollectionsExtractor)r5   bases     r7   r]   CivitaiUserExtractor.items  s{    ))F4;;q>"2!4(('9&8'9'9,d].BC*
 *+ 	+r:   ra   N)	r   r   r   r   USER_PATTERNr  r  r]   r   ra   r:   r7   r[  r[    s    _,G-G+r:   r[  c                   ,    \ rS rSrSr\S-   rSrS rSr	g)r`  i  zuser-modelsz/models/?(?:\?([^#]+))?z$https://civitai.com/user/USER/modelsc                     U R                   u  pU R                  U5      n[        R                  " U5      US'   U R                  R                  U5      $ Nusername)r   r   r   r/  r   rI   r5   r@   r8  r   s       r7   rI   !CivitaiUserModelsExtractor.models   sC    kk""5)!\\$/zxxv&&r:   ra   N)
r   r   r   r   r  rg  r  r  rI   r   ra   r:   r7   r`  r`    s    K77G4G'r:   r`  c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	ra  i  z
user-postsr'  z/posts/?(?:\?([^#]+))?z#https://civitai.com/user/USER/postsc                     U R                   u  pU R                  U5      n[        R                  " U5      US'   U R                  R                  U5      $ rj  )r   r   r   r/  r   rM   rl  s       r7   rM   CivitaiUserPostsExtractor.posts  sC    kk""5)!\\$/zxx~~f%%r:   ra   N)r   r   r   r   r  r   rg  r  r  rM   r   ra   r:   r7   ra  ra    s#    K5M66G3G&r:   ra  c                   2    \ rS rSrSr\S-   rSrS rS r	Sr
g)	rb  i  r]  z/images/?(?:\?([^#]+))?z$https://civitai.com/user/USER/imagesc                 R   UR                  5       u  p#U R                  U5      U l        SU R                  S'   U R                  R                  S5      S:X  a  SU l        U R
                  U l        O#[        R                  " U5      U R                  S'   [        R                  X5        g )NrK  r   sectionr   zreactions-imagesrk  r   r   r   r[   r  r   r   r   r/  r   __init__r5   matchr@   r8  s       r7   ru  #CivitaiUserImagesExtractor.__init__  ~    lln''.)G;;??9%41D//DK&*ll4&8DKK
#!!$.r:   c                 L    U R                   R                  U R                  5      $ r   )r   r   r   rb   s    r7   r   !CivitaiUserImagesExtractor.images%  s    xxt{{++r:   r   r   r  N)r   r   r   r   r  rg  r  r  ru  r   r   ra   r:   r7   rb  rb    s!    K77G4G	/,r:   rb  c                   H    \ rS rSrSrSr\S-   rSrS r	\
R                  rSrg)	rc  i)  r^  )r   r(  rR  z/videos/?(?:\?([^#]+))?z$https://civitai.com/user/USER/videosc                 R   UR                  5       u  p#U R                  U5      U l        SU R                  S'   U R                  R                  S5      S:X  a  SU l        U R
                  U l        O#[        R                  " U5      U R                  S'   [        R                  X5        g )NrT  r   rs  r   zreactions-videosrk  rt  rv  s       r7   ru  #CivitaiUserVideosExtractor.__init__/  ry  r:   r|  N)r   r   r   r   r  r   rg  r  r  ru  rb  r   r   ra   r:   r7   rc  rc  )  s.    KIM77G4G	/ (..Fr:   rc  c                   ,    \ rS rSrSr\S-   rSrS rSr	g)rd  i=  zuser-collectionsz/collections/?(?:\?([^#]+))?z)https://civitai.com/user/USER/collectionsc              #   v  #    U R                   u  pU R                  U5      nU R                  R                  [        R
                  " U5      5      S   S   US'   U R                  S-   nU R                  R                  U5       H0  n[        US'   [        R                  U[        US   5      -   U4v   M2     g 7f)Nr   r=   userIdz/collections/r<   )r   r   r   r@   r   r/  rK   r  r  r   rL   r'   )r5   r@   r8  r   re  r  s         r7   r]   %CivitaiUserCollectionsExtractor.itemsB  s     kk""5)88==d);<Q?Exyy?*((..v6J'AJ|$--Jt,<(=!=zII 7s   B7B9ra   N)
r   r   r   r   r  rg  r  r  r]   r   ra   r:   r7   rd  rd  =  s    $K<<G9GJr:   rd  c                   8    \ rS rSrSrSrSrSr\S-   r	Sr
S rS	rg
)CivitaiGeneratedExtractoriM  z'Extractor for your generated files feed	generatedz{filename}.{extension})r   r  z	/generatezhttps://civitai.com/generatec           	   #     #    U R                  5         U R                  R                  5        H  nU R                  US   5      US'   [        R
                  SU4v   UR                  SS5       HR  nUR                  SS5       H9  nSU0UEUEnUS   n[        R                  U[        R                  " XT5      4v   M;     MT     M     g 7f)	NrE   r?   rB   stepsra   r   rD   rC   )
r   r   !orchestrator_queryGeneratedImagesrO   r   rR   rP   rU   r   rZ   )r5   gensteprr   r\   rC   s         r7   r]   CivitaiGeneratedExtractor.itemsU  s     88==?C11#k2BCCK##R,,,!XXh3E"E9T9S9D,C!++sD,A,A#,LLL 4 - @s   CC	ra   N)r   r   r   r   r   r  r   r   r  r  r  r]   r   ra   r:   r7   r  r  M  s)    1K+L/M[(G,G
Mr:   r  c                   j    \ rS rSrSrS rS rS rS rS r	\
" SS	9S
 5       rS rS rSS jrS rSrg)r$   ib  z^Interface for the Civitai Public REST API

https://developer.civitai.com/docs/api/public-rest
c                 *   Xl         UR                  S-   U l        SS0U l        UR                  S5      =n(       a-  UR                  R                  S5        SU-   U R                  S'   UR                  S5      nUb  US	L a  S
nO	U(       d  SnX0l        g )Nz/apir  application/jsonr   Using api_key authenticationBearer r   r!  TXSafe	extractorrK   r   r!   r"   r#   r!  r5   r  api_keyr!  s       r7   ru  CivitaiRestAPI.__init__h  s    "NNV+	&(:;&&y1171MM >?,5,?DLL)'<44<DD	r:   c                 (    U R                  SU05      $ )NimageIdr   )r5   image_ids     r7   rr   CivitaiRestAPI.imagex  s    {{x
  	r:   c                 R    SnSU;  a  U R                   US'   U R                  X!5      $ )Nz
/v1/imagesr!  )r!  _pagination)r5   r   endpoints      r7   r   CivitaiRestAPI.images}  s-    !YYF6N11r:   c                 6    U R                  US   US   S.5      $ )Nr=   )modelIdr   r  )r5   rA   r   r@   s       r7   r   CivitaiRestAPI.images_gallery  s&    {{#Dk%dm
  	r:   c                 @    S[        U5      -   nU R                  U5      $ )Nz/v1/models/r'   _call)r5   r   r  s      r7   rA   CivitaiRestAPI.model  s     3x=0zz(##r:   r   keyargc                 @    S[        U5      -   nU R                  U5      $ )Nz/v1/model-versions/r  )r5   model_version_idr  s      r7   r   CivitaiRestAPI.model_version  s!    (3/?+@@zz(##r:   c                 &    U R                  SU5      $ )Nz
/v1/models)r  r   s     r7   rI   CivitaiRestAPI.models  s    f55r:   c                 (    U R                  SU05      $ )Nr-  rI   r1  s     r7   r0  CivitaiRestAPI.models_tag  s    {{E3<((r:   Nc                     US   S:X  a  U R                   U-   nOUnU R                  R                  X2U R                  S9nUR	                  5       $ )Nr   rj   r   r   )rK   r  requestr   json)r5   r  r   rC   r  s        r7   r  CivitaiRestAPI._call  sO    A;#))h&CC>>)) * 6}}r:   c              #      #     U R                  X5      nUS    S h  vN    US   S   nS nM+   N! [         a     g f = f7f)Nr]   r   nextPager  KeyError)r5   r  r   r\   s       r7   r  CivitaiRestAPI._pagination  sY     ::h/DG}$$
+J7 F $  s)   A/A1 A
>A>Ar  r   r!  rK   r   )r   r   r   r   r   ru  rr   r   r   rA   r
   r   rI   r0  r  r  r   ra   r:   r7   r$   r$   b  sM    
 
2$ Q$ $6)	r:   r$   c                       \ rS rSrSrS rS rS rSS jrS r	S r
S	 r\" S
S9S 5       rSS jrS rS rSS jrS rSS jrS rS rS rSS jrS S jrS rS rS rS rSrg)!r%   i  z"Interface for the Civitai tRPC APIc                 2   Xl         UR                  S-   U l        SSSSSS.U l        UR                  S5      =n(       a-  UR                  R                  S	5        S
U-   U R                  S'   UR                  S5      nUb  USL a  SnO	U(       d  SnX0l        g )Nz
/api/trpc/r  z5.0.1386rB   web	undefined)zcontent-typezx-client-versionx-client-datezx-clientzx-fingerprintr   r  r  r   r!  T   r   r  r  s       r7   ru  CivitaiTrpcAPI.__init__  s    "NN\1	 2 * " % +
  &&y1171MM >?,5,?DLL)'<44<DD	r:   c                 D    SnS[        U5      0nU R                  X#5      4$ )Nz	image.getr=   r   r  r5   r  r  r   s       r7   rr   CivitaiTrpcAPI.image  s'    H&

8,..r:   c                 B    SnS[        U5      0nU R                  X#5      $ )Nzimage.getGenerationDatar=   r  r  s       r7   r   #CivitaiTrpcAPI.image_generationdata  s$    ,H&zz(++r:   c                     SnU(       a@  U R                  USU R                  5       U R                  5       SSU R                  SS.5      nU R	                  U5      nU R                  X15      $ )Nzimage.getInfiniteTFr  )r   r   r   withMetafromPlatformr  r  )_merge_paramsr   r   r!  _type_paramsr  r5   r   r   r  s       r7   r   CivitaiTrpcAPI.images  so    &''!%!%!3!3!5!%!1!1!3!&!&!%!/1 F ""6*11r:   c              #      #    SnU R                  5       U R                  5       US   US   SSU R                  S.nU R                  XE5       H  nUS    S h  vN   M     g  N	7f)Nzimage.getImagesAsPostsInfiniter=   F2   )r   r   r   r  hiddenr   r  r   )r   r   r!  r  )r5   rA   r   r@   r  r   r   s          r7   r   CivitaiTrpcAPI.images_gallery  sk     3"002"..0%dm#Dk# "ii
 $$X6DH~%% 7%s   AA#A!
A#c                 @    [        U5      SS.nU R                  U5      $ )NT)r   r   )r   r   )r5   post_idr   s      r7   rN   CivitaiTrpcAPI.images_post  s$    7|
 {{6""r:   c                 B    SnS[        U5      0nU R                  X#5      $ )Nzmodel.getByIdr=   r  )r5   r   r  r   s       r7   rA   CivitaiTrpcAPI.model  s$    "H&zz(++r:   r   r  c                 B    SnS[        U5      0nU R                  X#5      $ )NzmodelVersion.getByIdr=   r  )r5   r  r  r   s       r7   r   CivitaiTrpcAPI.model_version  s&    ),-.zz(++r:   c                     SnU(       aC  U R                  UU R                  5       SU R                  5       SSSSSSU R                  S.
5      nU R	                  X15      $ )Nzmodel.getAll	publishedF)
r   
periodModer   r   r  followedearlyAccessr  supportsGenerationr  )r  r   r   r!  r  r  s       r7   rI   CivitaiTrpcAPI.models  sh    !''!%!3!3!5!,!%!1!1!3!&!&!&!&!&&+!%1 F 11r:   c                 (    U R                  SU05      $ )Ntagnamer  r1  s     r7   r0  CivitaiTrpcAPI.models_tag  s    {{Is+,,r:   c                 B    SnS[        U5      0nU R                  X#5      $ )Nzpost.getr=   r  )r5   r  r  r   s       r7   r   CivitaiTrpcAPI.post  s$    G%zz(++r:   c                     SnU(       aA  U R                  UU R                  U R                  5       SU R                  5       SSSSS.5      nU R	                  U5      nU R                  X1SU;   S9$ )	Nzpost.getInfiniter  FTr  )r  r   r  r   r  	draftOnlyr   r  rk  )r@   )r  r!  r   r   r  r  r  s       r7   rM   CivitaiTrpcAPI.posts  s|    %''!%!%!3!3!5!,!%!1!1!3!&!&!%!/	1 	F ""6*
f8LNNr:   c                 H    SnS[        U5      0nU R                  X#5      S   $ )Nzcollection.getByIdr=   r  r  )r5   collection_idr  r   s       r7   r  CivitaiTrpcAPI.collection/  s*    'M*+zz(+L99r:   c                     SnU(       a-  U R                  UU R                  U R                  5       S.5      nU R                  U5      nU R	                  X15      $ )Nzcollection.getInfinite)r  r   )r  r!  r   r  r  r  s       r7   r  CivitaiTrpcAPI.collections4  sW    +''!%!%!1!1!31 F
 ""6*11r:   c                 D    Sn[        U5      SS.nU R                  X#5      $ )Nztag.getVotableTagsrr   )r=   rG   r  r  s       r7   r   !CivitaiTrpcAPI.tag_getvotabletags@  s$    'Hw7zz(++r:   c                 2    SnSU0nU R                  X#5      4$ )Nzuser.getCreatorrk  )r  )r5   rk  r  r   s       r7   r@   CivitaiTrpcAPI.userE  s#    $h'

8,..r:   c                 `    SnU R                  5       S:X  a  SOSSSS.nU R                  X5      $ )Nz!orchestrator.queryGeneratedImagesOldestTF)r  )	ascendingr   r   )r   r  )r5   r  r   s      r7   r  0CivitaiTrpcAPI.orchestrator_queryGeneratedImagesJ  s<    6!%!1!1!3x!?U!

 11r:   Nc                 .   U R                   U-   nU R                  nU(       a  USU0S.nOSU0nS[        R                  " U5      0n[	        [        [        R                  " 5       S-  5      5      US'   U R                  R                  XBUS9S   S	   S   $ )
Nvalues)r  metar  inputi  r  r  resultr\   )	rK   r   r   
json_dumpsr'   r   timer  request_json)r5   r  r   r  rC   r   r  s          r7   r  CivitaiTrpcAPI._callS  s    ii(",,#h-=>EV$E4??512#&s499;+='>#? ~~** + 119;;ACCIK 	Kr:   c              #   0  #    SU;  a	  S US'   SS0nU R                  XW5      nU(       a   US   (       a  US   S   S   S   US   :w  a  g US    S h  vN    US   (       d  g  US   US'   UnU R                  XU5      nM8   N/! [         a     g f = f7f)	Ncursor)r  r]   r   r@   rk  ra   
nextCursorr  )r5   r  r   r  r@   meta_r\   s          r7   r  CivitaiTrpcAPI._paginationa  s     6!#F8~.Ezz(E2DMWa (4z8JJG}$$L) *
  $L1F8E::h6D $
  s6   ABBB
B $!B
BBBBc                 (    UR                  U5        U$ )z+Combine 'params_user' with 'params_default')rT   )r5   params_userparams_defaults      r7   r  CivitaiTrpcAPI._merge_paramsx  s    k*r:   c                 j   [         [         [         [         [         [        [        [        [        [        S.
nUR                  5        Hd  u  p4X2;  a  M  [        U[        5      (       a  X#   " U5      X'   M/  [        U[
        5      (       d  MF  X#   nU Vs/ s H
  oe" U5      PM     snX'   Mf     U$ s  snf )z)Convert 'params' values to expected types)
r   r   r   r  r   remixesOnlynonRemixesOnlyr  r  r  )r   _boolr]   r&   r'   r/   )r5   r   r   rm   r   rG   r   s          r7   r  CivitaiTrpcAPI._type_params}  s     "!!!!####"'
 "<<>KD E3''${51E4(({7<=utT
u= *   >s   B0c                 L    U R                   R                  S5      =n(       a  U$ g)Nr   AllTime)r  r!   )r5   r   s     r7   r   CivitaiTrpcAPI._param_period  s$    ^^**84464Mr:   c                     U R                   R                  S5      =n(       a#  US   R                  5       nUS;   a  gUS;   a  gU$ g)Nr   r   drnNewestaor  )r  r!   lower)r5   r   r   s      r7   r   CivitaiTrpcAPI._param_sort  sG    >>((0040QAEzDyKr:   r  r   r   )NF)r   r   r   r   r   ru  rr   r   r   r   rN   rA   r
   r   rI   r0  r   rM   r  r  r   r@   r  r  r  r  r  r   r   r   ra   r:   r7   r%   r%     s    ,*/
,
2"&#,
 Q, ,
2&-,
O$:

2,
/
2K7.
2
r:   r%   c                     U S:H  $ )Ntruera   )r   s    r7   r  r    s    F?r:   c                   J    \ rS rSrS rSS jrSS jrSS jrS rS r	S	 r
S
rg)r:  i  c           	          Xl         SU l        UR                  S5      =n(       a  SU;  a  SU-   nOSnUSSUR                  SS	S
SS.U l        g )Nzhttps://search-new.civitai.comtoken r  zGBearer 8c46eb2508e21db1e9828a97968d91ab1ca1caa5f70a00e88a2ba1e286603b61r  zLMeilisearch instant-meilisearch (v0.13.5) ; Meilisearch JavaScript (v0.34.0)emptycorsz	same-sitezu=4)r   r  zX-Meilisearch-ClientOriginzSec-Fetch-DestzSec-Fetch-ModezSec-Fetch-SitePriority)r  rK   r!   r   )r5   r  auths      r7   ru  CivitaiSearchAPI.__init__  sg    "4	##G,,4,$ 4';D ".%Jnn%$)

r:   c                 `    SnUUUSSSSSU R                  U5      4S.	nU R                  XQ5      $ )Nz/multi-searchra   z__ais-highlight__z__/ais-highlight__3   r   )	qindexUidfacetsattributesToHighlighthighlightPreTaghighlightPostTagr   offsetfilter)_generate_filterr  )r5   r8  rG   r)  r!  r  s         r7   searchCivitaiSearchAPI.search  sL    " %' 3 4,,T24

 00r:   Nc                 <    SnU R                  X=(       d    SXC5      $ )N)zcategory.namecheckpointTyper   lastVersionAtUnixz	tags.namerG   user.usernamezversion.baseModel	models_v9r0  r5   r8  rG   r!  r)  s        r7   r;  CivitaiSearchAPI.search_models  !    	
 {{5"5+vDDr:   c                 <    SnU R                  X=(       d    SXC5      $ )N)aspectRatio	baseModelcreatedAtUnixtagNamestechniqueNames	toolNamesrG   r5  	images_v6r7  r8  s        r7   rB  CivitaiSearchAPI.search_images  r:  r:   c                     U R                   U-   n[        R                  " SU405      nU R                  R	                  USU R
                  US9nUS   S   $ )NqueriesPOST)methodr   r\   resultsr   )rK   r   r  r  r   r   )r5   r  r8  rC   r   r\   s         r7   r  CivitaiSearchAPI._call  s]    ii(")eX!67~~**6 + C Iq!!r:   c              #      #    US   S-
  nUS-  n U R                  X5      nUS   nU S h  vN   [        U5      U:  a  g US==   U-  ss'   M?   N#7f)Nr   r   r   hitsr-  )r  len)r5   r  r8  r   	thresholdr\   r]   s          r7   r  CivitaiSearchAPI._pagination  sf     g"QJ	::h.DLE5zI%(Ou$O  s   *AA$Ac                 R   / nUS-  (       a  UR                  S5        US-  (       a  UR                  S5        US-  (       a  UR                  S5        US-  (       a  UR                  S5        US	-  (       a  UR                  S
5        U(       d  gSSR                  U5      -   S-   $ )Nr   1r   2   4   8   16z()z(nsfwLevel=z OR nsfwLevel=))r   r(   )r5   levelfltrs      r7   r/  !CivitaiSearchAPI._generate_filter  s    19KK19KK19KK19KK2:KK/44T::S@@r:   )r  r   rK   )r  )Nr  )r   r   r   r   ru  r0  r;  rB  r  r  r/  r   ra   r:   r7   r:  r:    s(    
.1"EE"%Ar:   r:  )&r   commonr   r   r   rB   r   r   r	   cacher
   r   r  r  rg  r   rJ   r  r  r&  r,  r5  r@  rE  rI  rQ  rW  r[  r`  ra  rb  rc  rd  r  r$   r%   r  r:  ra   r:   r7   <module>r^     sb   . 0 0 $ $   ,00h.y h.Vu, up., .7!1 7,.+ .(* (F#3 FF#3 F'- ''- ''- '&, &+8%5 +	'!1 	'& 0 &,!1 ,(/!1 /(J&6 J M 0 M*I IXu upkA kAr:   