Upload Image (Model Manager)
Push generated images back to the Model Manager server, metadata included
- images
- lora_info
- sampler
- scheduler
- status
Every other node in this pack pulls models from your Model Manager server. Upload Image (Model Manager) goes the other way: it pushes images back. Feed it the output of a VAE Decode and it uploads each image to a model on the server, bundled with its generation metadata - the prompt, negative prompt, seed, steps, CFG, sampler, scheduler, the LoRAs used, even the full workflow. Think of it as closing the loop: generate against a model, send the results home for a gallery, a dataset, or a training set.
The inputs that matter
images- the IMAGE tensor straight out of VAE Decode. The node encodes each frame to PNG and uploads it individually.upload_to- the target type, either Diffusion Model or LoRA. It's a toggle, and it changes which model list themodel_namedropdown pulls from.model_name- which model (or version) on the server to attach the images to,modelId@versionId:namestyle.version_specific- boolean. When false, the node drops the version ID and uploads to the model as a whole. When true, the image is tied to the specific version you picked. Defaults to false; flip it if your server organizes images per version.
The metadata fields are all optional: prompt and negative_prompt (multiline strings), seed (INT), steps (INT), cfg_scale (FLOAT), and sampler / scheduler (loosely typed - wire in text or values from your sampler). The lora_info input takes the pack's MM_LORA_INFO list so the LoRAs used in this very graph get attached - which is where Merge LoRA Info (Model Manager) earns its keep if you applied LoRAs across multiple loaders. If you don't set the metadata fields, they're simply left off the upload; zeros are skipped, not written.
How it works
Each image in the batch is encoded to PNG bytes and POSTed to /api/v1/models/{id}/images with the metadata as form fields and your API key as a Bearer token. The full ComfyUI workflow JSON is grabbed automatically from the graph (via the node's hidden extra_pnginfo) and stored with the image - nice for provenance if the server can render it later. The node returns a single status string, like Uploaded 3 images to model 42, so you can read the result directly or feed it to a text node.
Install
ComfyUI Manager (search comfyui-model-manager-nodes) or:
cd ComfyUI/custom_nodes
git clone https://github.com/blackpaw-studio/comfyui-model-manager-nodes
cd comfyui-model-manager-nodes
pip install -r requirements.txt
Restart and connect (Connect to Model Manager button with URL + API key; MODEL_MANAGER_API_URL / MODEL_MANAGER_API_KEY env vars or config.yaml also work). The pack only needs requests and pyyaml, though this node leans on Pillow and NumPy, which ComfyUI already ships.
Troubleshooting
Error: not connected to Model Manager- you skipped the connect step. The in-node connect button is the fastest fix.Error: invalid model selection- themodel_namedropdown is showing(not connected)or a stale value; reconnect and pick again.- Uploads fail one by one mid-batch. The node reports which index failed, so check your API key's permissions on that model, and whether the server accepts images for it at all.
- Metadata shows up empty on the server. Leave a field at 0/blank and it's omitted on purpose. If the server isn't storing what you expect, double-check the field names your server version expects - this client sends
prompt,negativePrompt,seed,steps,cfgScale,sampler,scheduler,loras, andcomfyWorkflow.
This is the node you reach for when the server isn't just a storage locker but a working hub - upload your generations, keep the recipe attached, and you never have to reconstruct how an image was made later.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| upload_to | COMBO | 2 options: Diffusion Model, LoRA | |
| model_name | COMBO | 1 options: (not connected) | |
| version_specific | BOOLEAN | false | — |
| lora_infoopt | MM_LORA_INFO | — | |
| promptopt | STRING | — | |
| negative_promptopt | STRING | — | |
| seedopt | INT | 00–18446744073709550000 | — |
| stepsopt | INT | 00–10000 | — |
| cfg_scaleopt | FLOAT | 0.00–100 | — |
| sampleropt | * | — | |
| scheduleropt | * | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| status | STRING | — |