77from typing_extensions import Annotated
88
99from comfy_cli import tracking , ui
10+ from comfy_cli import constants
11+ from comfy_cli .config_manager import ConfigManager
1012from comfy_cli .constants import DEFAULT_COMFY_MODEL_PATH
1113from comfy_cli .file_utils import download_file , DownloadException
1214from comfy_cli .workspace_manager import WorkspaceManager
1315
1416app = typer .Typer ()
1517
1618workspace_manager = WorkspaceManager ()
19+ config_manager = ConfigManager ()
1720
1821
1922def get_workspace () -> pathlib .Path :
@@ -66,10 +69,12 @@ def check_civitai_url(url: str) -> Tuple[bool, bool, int, int]:
6669 return False , False , None , None
6770
6871
69- def request_civitai_model_version_api (version_id : int ):
72+ def request_civitai_model_version_api (version_id : int , headers : Optional [ dict ] = None ):
7073 # Make a request to the Civitai API to get the model information
7174 response = requests .get (
72- f"https://civitai.com/api/v1/model-versions/{ version_id } " , timeout = 10
75+ f"https://civitai.com/api/v1/model-versions/{ version_id } " ,
76+ headers = headers ,
77+ timeout = 10 ,
7378 )
7479 response .raise_for_status () # Raise an error for bad status codes
7580
@@ -81,9 +86,13 @@ def request_civitai_model_version_api(version_id: int):
8186 return model_name , download_url
8287
8388
84- def request_civitai_model_api (model_id : int , version_id : int = None ):
89+ def request_civitai_model_api (
90+ model_id : int , version_id : int = None , headers : Optional [dict ] = None
91+ ):
8592 # Make a request to the Civitai API to get the model information
86- response = requests .get (f"https://civitai.com/api/v1/models/{ model_id } " , timeout = 10 )
93+ response = requests .get (
94+ f"https://civitai.com/api/v1/models/{ model_id } " , headers = headers , timeout = 10
95+ )
8796 response .raise_for_status () # Raise an error for bad status codes
8897
8998 model_data = response .json ()
@@ -123,18 +132,42 @@ def download(
123132 show_default = True ,
124133 ),
125134 ] = DEFAULT_COMFY_MODEL_PATH ,
135+ set_civitai_api_token : Annotated [
136+ Optional [str ],
137+ typer .Option (
138+ "--set-civitai-api-token" ,
139+ help = "Set the CivitAI API token to use for model listing." ,
140+ show_default = False ,
141+ ),
142+ ] = None ,
126143):
127144
128145 local_filename = None
146+ headers = None
147+ civitai_api_token = None
148+
149+ if set_civitai_api_token is not None :
150+ config_manager .set (constants .CIVITAI_API_TOKEN_KEY , set_civitai_api_token )
151+ civitai_api_token = set_civitai_api_token
152+
153+ else :
154+ civitai_api_token = config_manager .get (constants .CIVITAI_API_TOKEN_KEY )
155+
156+ if civitai_api_token is not None :
157+ headers = {
158+ "Content-Type" : "application/json" ,
159+ "Authorization" : f"Bearer { civitai_api_token } " ,
160+ }
129161
130162 is_civitai_model_url , is_civitai_api_url , model_id , version_id = check_civitai_url (
131163 url
132164 )
165+
133166 is_huggingface = False
134167 if is_civitai_model_url :
135- local_filename , url = request_civitai_model_api (model_id , version_id )
168+ local_filename , url = request_civitai_model_api (model_id , version_id , headers )
136169 elif is_civitai_api_url :
137- local_filename , url = request_civitai_model_version_api (version_id )
170+ local_filename , url = request_civitai_model_version_api (version_id , headers )
138171 elif check_huggingface_url (url ):
139172 is_huggingface = True
140173 local_filename = potentially_strip_param_url (url .split ("/" )[- 1 ])
@@ -157,7 +190,7 @@ def download(
157190
158191 # File does not exist, proceed with download
159192 print (f"Start downloading URL: { url } into { local_filepath } " )
160- download_file (url , local_filepath )
193+ download_file (url , local_filepath , headers )
161194
162195
163196@app .command ()
@@ -236,6 +269,7 @@ def list(
236269 show_default = True ,
237270 ),
238271):
272+
239273 """Display a list of all models currently downloaded in a table format."""
240274 model_dir = get_workspace () / relative_path
241275 models = list_models (model_dir )
0 commit comments