emaki Generate Image
A cloud model in a box, no GPU, no weights
- image
- url
The name is a lie in the most useful way: EmakiGenerateImage isn't a sampler. It doesn't load a checkpoint, doesn't touch your VRAM, and doesn't download anything on install. It's an HTTP client wearing a node's clothes - you type a prompt, it sends that prompt to emaki.ai, waits for a hosted image model to finish, and hands the pixels back as a normal IMAGE tensor so the rest of your graph can't tell the difference.
Why bother? Because every model behind that dropdown is closed - Nano Banana 2, Seedream 5, GPT Image 2, lite variants included. None of them has weights to download, so calling them is the only door into a Comfy graph. That's what the KB files under API-wrapper nodes: a node that ships your prompt over the network and drops the result back as if a local sampler made it.
How it actually works
Under the hood it's a submit-and-poll loop over the standard library: POST {prompt, model, parameters} to emaki's generation endpoint, get a run id, check status every five seconds until the job reports completed, then download the result, convert it to an RGB float tensor and return it. The 15-minute deadline is sized for video; images come back in seconds.
You also get a url output - the hosted copy - which is handy for keeping a link or feeding another API node that wants a URL rather than a tensor.
The fields you'll actually set
Three of them are required, and only one requires thought.
- prompt - multiline, and honestly the only place quality comes from. The default is the author's own demo prompt, not a style guide.
- model -
nano_banana_2_lite(default, and the cheapest),nano_banana_2,seedream_5_lite,gpt_image_2. Three vendors' models wearing one key. Lite is the budget tier; step up when text rendering is the actual problem. - aspect_ratio -
1:1,16:9,9:16,4:3,3:4,2:3,3:2,21:9, defaulting to16:9. Your only framing control: no width/height, no resolution field, so you get whatever the model decides inside that ratio.
Then two optional ones. api_key is self-explanatory - leave it empty and the node reads EMAKI_API_KEY; runs cost credits at the website price. seed deserves a warning.
The seed is a cache-buster, not a seed
The tooltip says "Change to force a new run," and that is literally all it does. Read the node source: seed is accepted as an argument and never forwarded - the model on emaki's side never sees it. ComfyUI also won't re-execute a node whose inputs haven't changed, so queueing the same prompt twice hands you the cached tensor and charges you nothing. Bump the seed and you force a fresh call to a model that's nondeterministic anyway - identical inputs are free but frozen, new seeds give variations you can't reproduce.
Install
ComfyUI Manager, search ComfyUI-emaki. Or the manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/hanshs474/ComfyUI-emaki
Restart ComfyUI and it appears under the emaki category. Nothing to pip install: the pack's dependencies list is empty, the client is stdlib-only, and the tensor code reuses the torch, numpy and Pillow ComfyUI already ships. No model downloads either. Get a key at emaki.ai/settings/apikeys, then paste it into api_key or export it before launch:
export EMAKI_API_KEY=your_key_here
Do that in the shell that starts ComfyUI; the variable is read from the server process, so another terminal's export won't reach a running instance.
Where it goes wrong
The client maps HTTP failures to named exceptions, which is unusually considerate, and the messages tell you what to fix:
- Nothing generated, 401 - no key found. Empty
api_keyfield plus noEMAKI_API_KEYin the server's environment. - 402 / 403 - out of credits, or the selected model needs a purchase on the account first. The lite models are the cheap test run.
- 409 busy - another generation on this account is still running. One at a time, per account; a second workflow tab will trip this.
- A content refusal - emaki's filter is upstream, at the model. Reword the prompt; there's nothing local to patch.
One security note, generic to the category: a node whose job is to send your prompt and your key over the network is the one place where a malicious phone-home looks normal, and that's happened here before. The upside is that this pack is MIT and authored by emaki itself, not a random ComfyUI-something-API wrapper. Still glance at what a fresh pack does on import before pasting a key into it.
The tradeoff: you pay per press and your prompt leaves the machine. As a first-frame picker ahead of an image-to-video run, that's a fair deal; at forty iterations, do the math first.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | a paper-cut layered mountain range at dusk | — |
| model | COMBO | nano_banana_2_lite | 4 options: nano_banana_2_lite, nano_banana_2, seedream_5_lite, gpt_image_2 |
| aspect_ratio | COMBO | 16:9 | 8 options: 1:1, 16:9, 9:16, 4:3, 3:4, 2:3, +2 |
| api_keyopt | STRING | Key from emaki.ai/settings/apikeys. Leave empty to read EMAKI_API_KEY from the environment. Runs cost credits on your emaki account, the same price as on the website. | |
| seedopt | INT | 00–4294967295 | Change to force a new run |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| url | STRING | — |