Nodes/ComfyUI Ino Nodes/Ino S3 Download Model
ComfyUI Node

Ino S3 Download Model

Download a model straight from S3 into ComfyUI's model folders

By nobandegani·Created about a year ago·Updated 2 months ago· 6
Ino S3 Download Model
    • success
    • msg
    • model_type
    • abs_path
    • rel_path
    enabledtrue
    model_config{}
    model_type
    model_subfolderflux1dev
    s3_keyuploads/lora/aly_v001.safetensors
    s3_config{"access_key_id": "", "access_key_secret": "", "bucket_name": "", "endpoint_url": "", "region_name": ""}

    Here's the setup that keeps happening: you've got a model library in S3 - checkpoints, LoRAs, VAEs - because you move between machines or run on rented cloud GPUs. Every new box needs the models, and nobody wants to re-download 12 GB of Flux from HuggingFace per session. InoS3DownloadModel pulls a model file out of S3 and puts it in the right ComfyUI model folder, based on a model_type you pick. It's the download half of a "sync models from the bucket, then load them" workflow, and it hands you the path it used so you can feed it straight into a loader.

    The model_type dropdown is the whole game: it's the list of ComfyUI's model directories (checkpoints, diffusion_models, loras, clip, vae, controlnet, and more). Pick loras and the file lands in ComfyUI/models/loras/...; pick diffusion_models and it lands there. That means the file shows up in the right native dropdown, no manual moving.

    How it works

    Required inputs: enabled, model_type (the dropdown), model_subfolder (default flux1dev - an extra subdir under the model folder), s3_key (the object path in the bucket, e.g. uploads/lora/aly_v001.safetensors), and model_config (default "{}"). Optional: s3_config.

    The model_config input is an override mechanism: if you pass it a JSON dict, its fields win - model_type, model_subfolder, repo_id (mapped to the S3 config), and filename (mapped to the S3 key). So you can drive the whole node from a single config string built elsewhere in the graph. Otherwise it reads model_type/model_subfolder/s3_key directly.

    Destination is ComfyUI/models/<model_type>/<model_subfolder>/<object basename>. Outputs: success, msg, model_type (what it actually used), abs_path, and rel_path - wire abs_path/rel_path into a loader like Ino Load Diffusion Model or Ino Load Lora Model.

    Credentials via s3_config JSON or the standard env vars: S3_ACCESS_KEY, S3_ACCESS_SECRET, S3_BUCKET_NAME, S3_ENDPOINT_URL, S3_REGION_NAME.

    Installing it

    Part of the 125+-node ComfyUI-InoNodes pack by nobandegani:

    cd ComfyUI/custom_nodes
    git clone https://github.com/nobandegani/comfyui_ino_nodes
    cd comfyui_ino_nodes
    pip install -r requirements.txt
    

    Or search "ComfyUI Ino Nodes" in ComfyUI Manager and restart. Needs inopyutils and a current V3-schema ComfyUI.

    Common issues

    Wrong model_type is the classic mistake - put a LoRA in diffusion_models and it won't appear in any LoRA dropdown, even though it downloaded fine. Match the type to the file: checkpoints go in checkpoints, standalone UNETs in diffusion_models, adapters in loras. The output model_type confirms what was actually used, especially if model_config silently overrode your dropdown. Also note the destination uses only the object's basename - a subfolder path in s3_key doesn't become a subfolder locally; that's what model_subfolder is for. And remember the download isn't a load: you still need a loader node after it, and the returned path is how you connect the two.

    CategoryInoModelHelper

    Inputs (6)

    NameTypeDefaultDescription
    enabledBOOLEANtrue
    model_configSTRING{}
    model_typeCOMBO32 options: audio_encoders, checkpoints, clip, clip_vision, controlnet, detection, +26
    model_subfolderSTRINGflux1dev
    s3_keySTRINGuploads/lora/aly_v001.safetensors
    s3_configoptSTRING{"access_key_id": "", "access_key_secret": "", "bucket_name": "", "endpoint_url": "", "region_name": ""}you can leave it empty and pass it with env vars

    Outputs (5)

    NameTypeDescription
    successBOOLEAN
    msgSTRING
    model_typeSTRING
    abs_pathSTRING
    rel_pathSTRING