Load Image (Encrypted Vault) [darkilNodes]
Password-protected reference images that live in one locked file
- image
- mask
- width
- height
- aspect_ratio
- aspect_ratio_text
- format
- info
- help
Some reference images you don't want sitting around as plain PNGs in ComfyUI/input/ - the ID-document-style photo you're feeding an inpaint, the reference a client sent you, anything you'd rather not have readable by anyone else with access to the disk. Load Image (Encrypted Vault) answers that with the most literal possible version: a password-protected container file, kept in ComfyUI/input, holding many images. Without the password nothing in it is readable - not the pixels, not the file names, not even how the images are catalogued.
If that sounds like overkill for most of your workflows, it is, and the node knows it. This is the tool for the narrow case where disk-level privacy genuinely matters and a shared machine or a portable ComfyUI setup is in play. It's the same privacy-minded I/O corner of the darkilNodes pack as its Load Image (Temp) sibling and the no-metadata savers - the author clearly cares about footprint.
How the cryptography works
Worth knowing, because it's the most careful crypto you'll see in a ComfyUI node. AES-256-CTR with an HMAC-SHA256 tag on every block (encrypt-then-MAC), and the key comes from your password through PBKDF2-HMAC-SHA256 with 200,000 iterations - the standard, honest key-stretching number. The password is typed into a dialog and turned into a key that lives only in the running ComfyUI process. It is never written to the workflow JSON, to a file, or to a log. A lock button on the node forgets the key immediately; restarting ComfyUI forgets it too, and the node asks for the password again.
There's a real dependency story here, which is nice: the pack declares no required dependencies at all. The node uses cryptography or pycryptodome if either is installed, and otherwise falls back to a built-in pure-Python AES that is correct but slow - roughly a megabyte a second. All three write the same file format, so a vault moves between machines regardless of which backend each one has.
The inputs you actually touch: vault_file (the container name inside input/, default images.dkvault) and entry_id (which image is selected - the UI sets it and shows the name on the node instead of the raw id). Outputs match Load Image (Temp): image, mask, width, height, aspect_ratio, aspect_ratio_text, format, info, help - wire it exactly like a stock loader. Outputs from a locked vault raise a clear validation error rather than failing mid-run, and stale selections ("no longer in the vault") get caught the same way.
The workflow around it
Upload by button or drag-drop; paste works too, and pasting into a locked vault asks for the password first instead of refusing. Encrypted thumbnails are stored alongside each image so browsing doesn't decrypt full images just to show a grid. Adding never rewrites what's already in the file, and deleting leaves a gap that's reclaimed automatically once gaps pass a quarter of the file.
To create a vault, type a name that doesn't exist yet in vault_file - the unlock dialog offers to create it. One honest warning the author puts in the docs and you should internalize: there is no password recovery. Lose it and the images are gone. Also, the password travels from your browser to ComfyUI over the same connection every other request uses - fine on localhost, but if your ComfyUI is published on a network without TLS, that password goes in the clear. The crypto protects the file at rest; it can't protect the password in transit.
Installing it
Same story as the whole pack - this is one node in comfyui-darkil-nodes by pytraveler, no dependencies, no models:
cd ComfyUI/custom_nodes
git clone https://github.com/pytraveler/comfyui-darkil-nodes.git
Restart ComfyUI (or via Manager, search comfyui-darkil-nodes); find Load Image (Encrypted Vault) [darkilNodes] under darkilNodes/images. Its niche is narrow and its friction is real - you'll type a password every session - but for "reference material that must not be plaintext on my disk," it's the only node I know that does the job properly rather than hiding files behind an obscure folder name. The mask editor even round-trips inside the vault, re-encrypting your edit as a new entry and deleting the scratch files, which is a level of care most custom nodes never reach.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| vault_file | STRING | images.dkvault | — |
| entry_id | STRING | — |
Outputs (9)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| mask | MASK | — |
| width | INT | — |
| height | INT | — |
| aspect_ratio | FLOAT | — |
| aspect_ratio_text | STRING | — |
| format | STRING | — |
| info | STRING | — |
| help | STRING | — |