Nodes/comfyui-timesaver/TS Files Downloader
ComfyUI Node

TS Files Downloader

Download every model a workflow needs, in one shot

By AlexYez·Created 2 years ago·Updated a day ago· 12
TS Files Downloader
      file_listhttps://www.dropbox.com/sh/example_folder?dl=0 /path/to/models https://huggingface.co/stabilityai/sdxl-turbo/resolve/main/sd_xl_turbo_1.0_fp16.safetensors /path/to/checkpoints
      skip_existingtrue
      verify_sizetrue
      chunk_size_kb4096
      hf_token
      hf_domainhuggingface.co, hf-mirror.com
      proxy_url
      modelscope_token
      unzip_after_downloadfalse
      enabletrue
      integrity_modehf_sha256_auto

      You get a workflow from a friend - or from a reddit share - and it needs four models you don't have, from three different sources, in three different folders. Downloading them by hand is a chore, and a shared workflow that can't self-install is a workflow that dies on arrival. TS Files Downloader is the node that fixes that: give it a list of URL <space> target_path lines and it downloads them sequentially, with resume, mirror fallback, size/SHA verification, and optional auto-unzip. Handy for one-shot pulling all the assets a workflow needs.

      The killer feature is the button: "Get models from workflow." It walks the open graph - including inside subgraphs - and collects every model every loader needs, reading the {name, url, directory} metadata ComfyUI stamps onto each loader. You get a report first; Append adds only what's missing, Replace list starts over.

      How it works

      The format is one download per line, URL <space> target_path. Target can be absolute, a models/... path, or a registered folder name (checkpoints, loras, vae - whatever ComfyUI already knows). Lines starting with # are ignored. It talks HTTP directly (via requests, a pack requirement), streams in chunks (chunk_size_kb, default 4096), and:

      • Resumes interrupted downloads - a partial file is kept as .part, so the next run continues instead of restarting.
      • Verifies - verify_size checks each finished file against the server-reported size or HF SHA256, and re-downloads/resumes on mismatch.
      • Swaps HF mirrors - hf_domain lists mirror domains (default huggingface.co, hf-mirror.com); the first reachable one replaces the main host automatically. This is the "I'm in a region where HF is slow or blocked" button.
      • Unzips safely - unzip_after_download extracts archives into the target folder with zip-slip validation.

      The inputs that matter

      • file_list - the URL + target lines. The whole job.
      • skip_existing - skip files already present (default on).
      • verify_size - integrity checking (default on).
      • hf_token / modelscope_token / proxy_url - for gated repos and networks. ⚠️ The tooltips warn these are stored in the workflow JSON as plain text - don't share a workflow that contains a token.

      No outputs - it's an action node that holds the run until the files land.

      Installing it

      Part of comfyui-timesaver (ComfyUI Manager → "Timesaver", or manual clone + pip install -r requirements.txt + restart). No models to download - it is the downloader.

      Where people get burned

      Three things. First, the token warning is real: a workflow with hf_token filled in and shared publicly hands your token out. Only use it in workflows you never export. Second, "Get models from workflow" is smart but not psychic - it depends on loaders carrying the URL metadata, and a loader from a pack that doesn't stamp it falls back to filename-only. When that happens, the downloader just won't know where to fetch from, and you add the line by hand. Third, remember it's sequential and blocking: the rest of the graph waits, which is the design (the models have to exist before anything loads them), but it means a slow mirror makes the whole run wait. If a download stalls, that's when the mirror list earns its keep - add a mirror domain and rerun.

      CategoryTS/Files

      Inputs (11)

      NameTypeDefaultDescription
      file_listSTRINGhttps://www.dropbox.com/sh/example_folder?dl=0 /path/to/models https://huggingface.co/stabilityai/sdxl-turbo/resolve/main/sd_xl_turbo_1.0_fp16.safetensors /path/to/checkpointsOne download per line: '<url> → <folder>'. The arrow is there to be read — a long address wraps, and a folder pressed against its tail looks like part of the link; a plain space still works, so older lists keep running. Target may be absolute, a 'models/...' path, or a registered model folder name (checkpoints, loras, vae). Lines starting with # are ignored.
      skip_existingBOOLEANtrueSkip a file that already exists in the target folder instead of downloading it again.
      verify_sizeBOOLEANtrueVerify each finished file against the size (or HF SHA256) reported by the server; re-download or resume on mismatch.
      chunk_size_kbINT40961–65536Streaming chunk size in KB. Larger values can be faster on fast links; smaller values use less memory.
      hf_tokenoptSTRINGHuggingFace token for gated repos. WARNING: stored in the workflow JSON as plain text — do not share a file that contains it.
      hf_domainoptSTRINGhuggingface.co, hf-mirror.comComma-separated HuggingFace mirror domains. The first reachable one replaces huggingface.co in each URL. Useful in regions where the main host is slow or blocked.
      proxy_urloptSTRINGProxy URL (may contain credentials). WARNING: stored in the workflow JSON as plain text — do not share a file that contains it.
      modelscope_tokenoptSTRINGModelScope token. WARNING: stored in the workflow JSON as plain text — do not share a file that contains it.
      unzip_after_downloadoptBOOLEANfalseAfter a successful download, extract any .zip archive into its target folder and delete the archive.
      enableoptBOOLEANtrueMaster switch. When off, the node does nothing and returns immediately.
      integrity_modeoptCOMBOhf_sha256_autoIntegrity check strategy. 'hf_sha256_auto' verifies HuggingFace files by SHA256 when available; 'size_only' checks byte size alone.

      Outputs (0)

      No outputs