Embeddr Upload (V2)
Save the image you just made — and record who its parents are
- image
- parent_ids
- options
- artifact_ids
Upload is where the Embeddr loop closes: you load artifacts from your library, work on them, and this node puts the result back. Give it an IMAGE and it uploads a PNG to your Embeddr library, returning the new artifact's ID. Once it's in the library, that image is searchable, reference-able, and - thanks to the lineage inputs - connected to everything that made it.
It's an output node, so it lives at the end of a workflow the way Save Image does, except the image goes to your self-hosted library instead of only your output folder. The classic Embeddr workflow is a closed loop: Load Artifact → img2img/sampler → Upload. Your library becomes both the input tray and the archive.
The inputs that matter
image- the only required input. A batch is fine: the node uploads each image in the batch individually and returns all their IDs joined together.parent_ids- the lineage hook, in the customEMBEDDR_ARTIFACT_IDtype. Feed it the output of Merge IDs (or a single Load Artifact'sartifact_id_out) and the upload records who this image's parents were. This is the single most Embeddr-y input in the pack - it's the difference between "a folder of images" and "a family tree of images."auth_ticket- optional per-user ownership ticket for multi-user setups. Single-user installs ignore it.options- an Upload Artifact Options object, for storage provider/path overrides, tags, and ingest control. Leave it unwired unless you need those.
The output is artifact_ids - the uploaded IDs (comma-joined if you fed it a batch), ready to wire into another workflow or store for later.
How it works - and the upload mode knob
The node converts each image tensor to a PNG, packages it with metadata (parent IDs, related-artifact IDs, tags, and the ingest/embedding flags from your options), and POSTs it to /api/v1/plugins/embeddr-comfyui/upload on your server. The response ID is returned per batch item; a failure on one item is logged but doesn't kill the whole run, so you can end up with partial results - worth knowing if you batch a lot.
The upload_mode setting (default require) decides what happens when the server is unreachable: in require mode the upload fails loudly; set EMBEDDR_UPLOAD_MODE=best_effort and the node health-checks first and skips cleanly instead of erroring. For an always-on library, require is right; for a workflow you might run while the server's down, best_effort keeps the graph from exploding.
Install
Pack install as ever: embeddr serve running, pack via ComfyUI Manager or a release into custom_nodes, restart ComfyUI. Only requests is declared. Everything goes to your own localhost server - no cloud, no API key, no third-party data flow - which is the whole appeal of self-hosting the stack.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| parent_idsopt | EMBEDDR_ARTIFACT_ID | Parent artifact UUIDs | |
| auth_ticketopt | STRING | Ephemeral auth ticket for per-user ownership | |
| optionsopt | EMBEDDR_UPLOADARTIFACT_OPTS | Upload Artifact Options |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| artifact_ids | EMBEDDR_ARTIFACT_ID | — |