mood.site Upload
Push Your Generations Straight to a Shareable mood.site Board
- images
- response
- filename
You just generated something you want to show someone, and the usual path is: Save Image, find the file, drag it into Discord, send it. MoodSiteUpload cuts that whole song and dance down to one node. Wire your output into it, hit Queue, and the image lands on a mood.site board - a free, browser-viewable moodboard - with a link you can toss at anyone. Batch jobs too: every frame goes up, and you can check results from your phone instead of babysitting the queue.
This one has a big trust advantage over most of the "upload your output to a service" nodes you'll find: the person who made the node also develops and maintains mood.site itself. It's not some third party reverse-engineering a fragile API and hoping it stays up. The author (kkukshtel, posting as massivebacon on r/StableDiffusion) built it to replicate the "mood.site upload template" Apple Shortcut, so the endpoint it hits is the same one their own app uses.
How it works
ComfyUI hands every node a decoded image tensor, not an original file - there's nothing to forward along. So MoodSiteUpload re-encodes each frame losslessly as PNG and POSTs it as multipart form-data to a Supabase edge function, with your board_id and edit_key as query params. Because a freshly rendered tensor is already clean, lossless PNG is the right call; the JPEG step in the original Shortcut only existed to shrink native iPhone HEIC photos.
It's an output node and it's marked not-idempotent, which is the important part: ComfyUI caches aggressively, but a node that must fire every run - like an uploader - has to opt out of that cache, and this one does. Run it as often as you want; it won't silently skip because the inputs "didn't change."
The inputs that matter
Honestly, only two strings and your image:
images(IMAGE) - your generation, or a whole batch. Every frame gets uploaded.board_idandedit_key(STRING) - grab these from your mood.site board. Both are required; the node refuses to run with either empty.filename(STRING) - optional. Empty gives you an auto-generated name likeimage4827. For a batch it appends an index so names stay unique.
Tucked under the hood are compress_level (0–9, default 6) and optimize, which tune PNG file size against encode speed. Both are lossless, so unless your images are huge and the server is complaining, leave them alone.
Outputs
response is the raw server body - handy for debugging. filename is the name(s) actually used (one per line for a batch), if you want to wire it somewhere or log it.
Installing it
Any of these work:
cd ComfyUI/custom_nodes
git clone https://github.com/kkukshtel/comfyui_mood
Or, via the ComfyUI CLI: comfy node install mood-site-upload. It's also searchable in ComfyUI Manager by the pack title - "mood.site Upload" - once Manager's registry refresh catches the merge. requests is the only Python dependency, so install is painless and there's nothing to download but the code.
Where people get burned
- The edit key is plaintext. There's no masking on the field (the author tried canvas-based masking and dropped it rather than ship it half-broken). If you stream or screen-share, collapse the node - the dot in its title bar hides every field. And regardless of what's on screen: the key lives in plaintext inside your saved workflow
.jsonand in PNG metadata, so don't share those files publicly, ever. - The server rejects uploads for image-too-large, bad credentials, and similar. When it does, the node raises with the HTTP status and the server's message, and logs the same to the console prefixed
[mood.site]. If you see that, yourboard_id/edit_keycombo is the first thing to check.
One quirk: the little logo on the node's title bar only renders on the Nodes v1 canvas view (it uses legacy LiteGraph canvas hooks) - the "View Public Board" and "View Private Board" buttons work on both. None of it matters for the upload itself; the logo is purely decorative, and mildly charming for it.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | Image(s) to upload. A batch uploads all frames. | |
| filename | STRING | Optional name for the uploaded image(s). Leave empty to auto-generate 'image<random>'. For a batch, an index is appended to keep names unique. | |
| board_id | STRING | The mood.site Board ID (board_id query param). | |
| edit_key | STRING | The mood.site Edit Key (edit_key query param). Shown in plaintext; collapse the node to hide it while streaming. | |
| compress_level | INT | 60–9 | PNG compression: 0-9. Higher = smaller file, slower encode. Lossless regardless. |
| optimize | BOOLEAN | false | Extra pass for a smaller PNG (slower). Forces maximum compression effort. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| response | STRING | — |
| filename | STRING | — |