zhenzhen-moss-image(生成/编辑·平价小屋)
A text-to-image and reference-edit node that runs on someone else's GPU
- image1
- api_config
- image
- image_url
- task_id
- response
T8Zhenzhen_Moss_Image_LowPrice is not a model. Nothing to download, nothing in models/checkpoints, zero VRAM. It's an HTTP client with a nice face on it: you type a prompt, optionally drop in one reference image, and the node ships both to a paid API, waits, downloads the result, and hands it back as an ordinary IMAGE tensor the rest of your graph can't distinguish from a local sampler's output.
A node for a model you genuinely can't run locally, as opposed to renting a GPU for an open one. The work happens on the "贞贞的平价AI小屋" (roughly: Zhenzhen's cheap AI shop) channel - the author's low-price reseller for domestic users, and the pack's default base_url.
One thing before you invest time: this is brand new. The changelog dates moss-image to the 2026-10-23 update - about a day old as I write this, with essentially no community chatter. Not a red flag, just an honest "you're early, there are no tutorials, and you may hit the first bug."
How it works under the hood
The node builds a payload - model: "moss-image", your prompt, metadata.ratio - and POSTs it to {base_url}/v1/image/generations. A connected reference image is converted to PNG, uploaded to /v1/files/upload first, and its URL goes into the payload's images array. The endpoint is async: you get a task_id back immediately, then the node polls /v1/image/generations/{task_id} roughly every 4 seconds - 30-minute default ceiling - and downloads and decodes the result to an IMAGE.
Two consequences: most of your wall-clock time is the node sitting in a poll loop doing nothing - hence this pack's concurrent submit twin - and the async task survives a ComfyUI timeout, which is what task_id is for.
The inputs you actually touch
prompt is required and does double duty - a description when you're generating, an editing instruction when image1 is connected. It's multiline, so use it.
ratio is where the first surprise lives: eight fixed choices, default 9:16. Shooting landscape? Change it every time. There's no resolution or quality knob at all - you take what the model gives you at that aspect.
image1 takes one optional reference image. One. Pass a batch and it fails validation rather than quietly taking the first frame. Disconnect it and you're doing text-to-image.
api_config is the ZHENZHEN_SEEDANCE2_CONFIG output from the pack's settings node (Comfly_seedance2_low_price_settings) - base_url plus api_key. Prefer not to put the key in a workflow? It also reads SEEDANCE_API_KEY / SEEDANCE_BASE_URL from the environment.
skip_error defaults off. Turn it on and a failure returns a 512×512 placeholder instead of killing the run - handy overnight, mildly dangerous if you don't check outputs before publishing.
seed is cache control only - the author's tooltip says so. It never reaches the API. Fixed seed with unchanged inputs reuses ComfyUI's cached result; it does not mean "same image on the server."
Outputs: image (into Preview Image / Save Image), image_url (the hosted file - grab it while it lives), task_id (find it in the site's async task list if ComfyUI gave up first), and response (raw JSON, for when something smells wrong).
Installing it
No models, but a fat dependency list - aiohttp, openai, transformers, huggingface-hub, matrix-client and friends in the pack's requirements.txt. In ComfyUI Manager, search the pack title zhenzhen (registry publisher t8star), or do it by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/Comfyui-zhenzhen
cd Comfyui-zhenzhen && pip install -r requirements.txt
# restart ComfyUI
Then add the settings node, paste your key, leave base_url at https://api.seedance.nz unless told otherwise, and wire its api_config output in. The node also draws a "get a key" button linking to the channel's signup page.
When it goes wrong
The error strings are plain enough to work backwards from. "has an empty api_key" means the settings node is wired but blank - usually a saved workflow whose key was deliberately stripped. "Seedance API key is required" means there's no settings node at all. "Moss requires one valid reference IMAGE, not a batch" is exactly that: split your batch loader. "Unsupported Moss aspect ratio" is a stale workflow carrying a ratio the current enum dropped; re-pick the dropdown.
Big-result download failures are the pack's most-documented real pain, and the README's fix is on the account side: log in, edit the token you're using, set its object-storage region to CN or US. That advice dates from the Nano Banana Pro 4K era, but huge files on a cross-border CDN are a generic problem. The code has since hardened too - download timeouts floor at 120 seconds, and a broken HTTP_PROXY / HTTPS_PROXY env var gets retried through a proxy-free session. On the overseas domain rather than this one, the README's 443/TLS advice applies: that channel wants a working VPN in TUN mode, and flaky VPN clients are the usual culprit.
And it's a third-party pack holding a key and calling the network by design - so use one you're willing to rotate.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Required image description or editing instruction. | |
| ratio | COMBO | 9:16 | 8 options: 1:1, 2:3, 3:2, 3:4, 4:3, 9:16, +2 |
| image1opt | IMAGE | One optional reference image; disconnect for text generation. Batches are not supported. | |
| api_configopt | ZHENZHEN_SEEDANCE2_CONFIG | — | |
| skip_erroropt | BOOLEAN | false | — |
| seedopt | INT | 00–18446744073709550000 | Execution seed for ComfyUI cache control. Fixed reuses the cached result; randomize/increment/decrement requests a new run. This compatibility seed is not sent to APIs that do not expose a native seed parameter. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| image_url | STRING | — |
| task_id | STRING | — |
| response | STRING | — |