Text Encrypt ๐
Locking a string before it leaves your browser
- text
- encrypted_text
Quick disambiguation first, because there's more than one "encrypt" node floating around comfy.icu: if you wanted to password-lock a whole workflow file so nobody can steal your pipeline, you want something like LmcqAuthWorkflowEncryption, not this. TextEncrypt isn't about protecting your IP - it's about protecting a piece of text while it's in transit between your browser and whatever machine is actually running the graph.
That's the whole pitch of the CryptIO pack: it wraps ComfyUI's request traffic in RSA public-key encryption. The server generates a keypair the moment it starts up, the browser automatically fetches the public key, and from then on the frontend JavaScript can encrypt stuff before it ever hits the wire - no key files to manage, no config to set. TextEncrypt is the node that does this for a plain string.
How it works
You type text into the text widget like you would on any multiline string node. Under the hood, the node's frontend widget uses the server's auto-fetched public key to RSA-encrypt that value in JavaScript, right there in the browser, before the graph runs. There's a second required field, encrypted, a boolean whose tooltip says exactly what it tracks: "whether the text has been encrypted by the frontend." Think of it as the node's own state flag rather than something you're meant to flip on a whim - it needs to reflect what's actually sitting in the text field, because a mismatch (claiming something's encrypted when it isn't, or vice versa) is going to break whatever reads the output on the other end.
Two outputs come out: a plain text (the pass-through string as typed) and encrypted_text (the RSA ciphertext). You'd send encrypted_text onward to wherever needs the protected version - logged somewhere, written to disk, piped into another part of the graph - and pair it with TextDecrypt wherever that string needs to become readable again.
Where you'd actually use this
The scenario CryptIO is built for is running ComfyUI somewhere that isn't your own home PC - a remote box, a shared GPU host, anything reachable over a network you don't fully control. ComfyUI's API has no authentication by default, which is a well-known soft spot in the ecosystem (it's the reason "PSA: please secure your ComfyUI instance" threads exist). Encrypting a sensitive prompt or piece of text before it crosses that boundary is a narrow but real mitigation for the "someone's sniffing the traffic" case - it doesn't fix the bigger unauthenticated-access problem, but it keeps the payload unreadable in flight.
Installing it
Easiest path: open ComfyUI Manager, search "ComfyUI-CryptIO" (or just "CryptIO"), install, restart. Manual route is the same as any custom node - cd ComfyUI/custom_nodes && git clone https://github.com/Suzu008/ComfyUI-CryptIO, then restart ComfyUI. There's nothing to download beyond the node code itself: no checkpoints, no model weights, just Python plus a bit of frontend JS doing the RSA math. If Manager can't find it, manual clone works fine.
Things to watch for
Worth knowing going in: this is a small, young pack - the README is still carrying the unedited boilerplate from ComfyUI's own cookiecutter extension template (the "Develop," "Publish to Registry" sections meant for the author, not you), and there's no meaningful install-base signal to point to yet. That's not a knock, just calibration - don't expect a battle-tested, thousand-star project's worth of edge-case hardening.
Practically: because encryption happens in the browser's JS layer, a stale cached frontend bundle after an update is the first thing to suspect if the widget starts behaving oddly - a hard refresh (Ctrl/Cmd+Shift+R) clears that up for most custom-node JS weirdness in ComfyUI generally. And remember the default in that text field is literally the placeholder string "Text to encrypt" - it's easy to leave it there by accident and encrypt the placeholder instead of your real content, so double-check what's actually in the box before you run the graph.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | Text to encrypt | Text to encrypt |
| encrypted | BOOLEAN | false | Whether the text has been encrypted by the frontend |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| text | STRING | โ |
| encrypted_text | STRING | โ |