Add Image Miro Board v0.1.3
Your ComfyUI outputs, teleported onto a Miro board
- input_image_1
- input_image_2
- input_image_3
- input_image_4
- input_image_5
- input_image_6
This is the node that turns a Miro whiteboard into your ComfyUI output folder. Wire an image (or up to six of them) in, hit Run, and they show up as actual items on your Miro board - alongside a sticky note with whatever text you pass in. No saving files, no dragging, no "where did that render go" hunt. It's a niche thing, and honestly that's its charm: if you run batches of variations for a team or keep a living moodboard of your generations, dumping them straight onto a board everyone can look at beats curating a folder of PNGs.
It's from TRI3D-LC/ComfyUI-MiroBoard, a tiny single-node pack. Before you get excited, the node has zero outputs and it's an output/sink node by design - you wire into it, it swallows the image, and nothing comes out the other side. That's the whole point.
How it works
Under the hood it's just the Miro REST API v2, called with requests. Each image is converted from a torch tensor to a JPEG via cv2, then POSTed to https://api.miro.com/v2/boards/{board_id}/images with a Bearer token. Your notes string goes to /sticky_notes as a sticky note sitting left of the row. That's it - no models, no GPU work, no heavy deps beyond requests and python-dotenv.
The token isn't a UI field. It's read from a .env file via python-dotenv, as MIRO_OAUTH_TOKEN. The pack ships an env_sample; copy it to .env in ComfyUI/custom_nodes/ComfyUI-MiroBoard/ and paste in a Miro OAuth access token with boards:read and boards:write scopes (create an app under your Miro account settings to mint one).
The inputs that matter
The full list is in the schema, but you'll actually touch four things:
- board_id - the base64-looking string from your board's URL (
miro.com/app/board/<this-bit>/). The default is literally"BOARD_ID", a placeholder. - input_image_1 - your image (required). input_image_2 through input_image_6 are optional extras, laid out in a horizontal row.
- notes - text dropped as a sticky note at the left of the row.
- x_offset, y_start, width - board coordinates and item width. The defaults are sane:
x_offset125000 (Miro's canvas is huge, coordinates run to six digits),width400.
Here's the sneaky bit: y_start defaults to -1, which is not "negative position" - it means "read the last y from a local db.local file and stack this run below the previous one." Set a real number to pin a row in place, or leave it and let runs tile down the board. Height is auto-scaled to keep aspect ratio, and items get a 20%-of-width gap between them.
Install
Easiest via ComfyUI Manager - search ComfyUI-MiroBoard and install, then restart. Or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/TRI3D-LC/ComfyUI-MiroBoard
cd ComfyUI-MiroBoard
pip install -r requirements.txt
Then restart ComfyUI. Requirements are just python-dotenv and requests, both almost certainly already in your environment, and cv2/torch come from ComfyUI itself. No model downloads, no heavy dependencies - this is one of the lightest installs in the ecosystem.
Where people get burned
- The silent no-op. If
board_idis still"BOARD_ID", the node returns without doing anything - no error, no upload. The very first thing to check when "nothing happened" is that you replaced the placeholder with your actual board ID. - 401 auth errors. That means
MIRO_OAUTH_TOKENis missing, wrong, or scoped too narrowly. Make sure.envis in the pack folder and the token has write access to the board. - Batches only upload the first image. The input is a batch
IMAGEtensor, but the code grabsinput_image[0]- feed it a batch of four and only frame one lands. If you want every variation up there, loop it in your workflow and pass one at a time. - Transparency is flattened. Everything becomes a JPEG, so a transparent PNG arrives as a black-background box. Fine for photos, annoying for cutouts.
- The y-stacking surprise. Because
y_start=-1readsdb.local, a rerun lands below your last row, not on top of it. Confusing the first time, useful once you expect it.
For a pack with zero community chatter so far, it's refreshingly small and honest - read the whole thing in one sitting. If you live in Miro and ComfyUI both, this is the two-minute bridge between them.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| y_start | INT | -1 | — |
| x_offset | INT | 125000 | — |
| width | INT | 400 | — |
| board_id | STRING | BOARD_ID | — |
| input_image_1 | IMAGE | — | |
| notes | STRING | Notes | — |
| input_image_2opt | IMAGE | — | |
| input_image_3opt | IMAGE | — | |
| input_image_4opt | IMAGE | — | |
| input_image_5opt | IMAGE | — | |
| input_image_6opt | IMAGE | — |
Outputs (0)
No outputs