ERNIE-Image
The text-in-image specialist that still lost
- acceleratorOptions
- advancedFeatures.watermark.image
- image
ERNIE-Image is the uncomfortable case study for this whole hobby: Baidu shipped it in April 2026 as Apache 2.0, no filter, no revenue test, with genuine competence in structured layout and text-in-image that nothing open could match at the time - and the community still drifted away within weeks. The two defects that did it in were an ethnic bias strong enough that people made LoRAs just to produce non-Asian faces, and a visible grid-pattern noise artifact. You should know both before you judge what you see.
But the model itself is a real skill: if you need legible text baked into an image - posters, cards, product mockups with clean typography - ERNIE-Image is arguably still the strongest open option in that narrow lane. This node runs it remotely via Runware, so there's no download and no GPU requirement.
How it works
Standard Runware pack mechanics: positivePrompt (the only required input) goes into a taskType: imageInference request over REST, Runware runs the model on their hardware, and the node downloads the result into an IMAGE tensor. The interesting parts are the widgets that make ERNIE-Image distinct.
Inputs that matter
- steps - 15–50, default 30. ERNIE likes a decent number of steps; don't cheap out if text legibility matters.
- CFGScale - default 4, range 0–20. Higher hugs the prompt, which helps when you've written layout instructions.
- settings.promptEnhance.enabled - an LLM-backed prompt expander. Flip it on and the model rewrites your short prompt into something richer before generating. The paired temperature (default 1.2) and topP (default 0.95) control how adventurous that rewrite gets.
- acceleration -
none/low/medium/highoptimization level. High is faster, but for a layout-heavy model you may wantnoneorlowto keep the text rendering clean. - width / height - up to 2048 in 16px steps; 1024×1024 is a safe start for text work.
Output is the usual image IMAGE socket - wire it to Preview Image or Save Image.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Runware/ComfyUI-Runware
pip install -r ComfyUI-Runware/requirements.txt
Or ComfyUI Manager → search Runware → Install → restart. Add an API key in ComfyUI Settings → Runware API key or via the RUNWARE_API_KEY env var. It's prepaid cloud inference - per-run cost, shown on the node's title bar.
Gotchas
- The grid/noise artifact shows up most in larger, darker generations - worth knowing before you blame your upscaler.
- Prompt enhance is off by default. If your text layout collapses into mush, try turning it on and letting the LLM structure your prompt properly.
- Keep
outputFormaton PNG or WEBP for anything with fine text; JPG compression eats glyph edges.
Use it for what it's genuinely good at - clean, structured, legible text-in-image - and you'll wonder why the whole ecosystem moved on. The rest of the time, the noise and the bias are why it did.
Inputs (26)
| Name | Type | Default | Description |
|---|---|---|---|
| positivePrompt | STRING | Text prompt describing elements to include in the generated output. | |
| acceleratorOptionsopt | RUNWARE_ACCELERATOROPTIONS | — | |
| advancedFeatures.watermark.imageopt | IMAGE | — | |
| widthopt | INT | 1024 | Width of the generated media in pixels. |
| heightopt | INT | 1024 | Height of the generated media in pixels. |
| seedopt | INT | 00–9223372036854776000 | Random seed for reproducible generation. When not provided, a random seed is generated in the unsigned 32-bit range. |
| stepsopt | INT | 3015–50 | Total number of denoising steps. Higher values generally produce more detailed results but take longer. |
| CFGScaleopt | FLOAT | 4.000–20 | Guidance scale representing how closely the output will resemble the prompt. Higher values produce results more aligned with the prompt. |
| numberResultsopt | INT | 11–20 | Number of results to generate. Each result uses a different seed, producing variations of the same parameters. |
| accelerationopt | COMBO | (default) | Optimization level. |
| advancedFeaturesopt | BOOLEAN | false | Enable to set advancedFeatures. Off uses the model's default. |
| advancedFeatures.watermark.bgColoropt | STRING | Background color in hex format. | |
| advancedFeatures.watermark.displayPositionopt | COMBO | (default) | Watermark position. |
| advancedFeatures.watermark.fontColoropt | STRING | Text color in hex format. | |
| advancedFeatures.watermark.opacityopt | BOOLEAN | false | Enable to set advancedFeatures.watermark.opacity. Off uses the model's default. |
| advancedFeatures.watermark.opacity_valueopt | FLOAT | 0.100.1–1 | Watermark opacity. |
| advancedFeatures.watermark.textopt | STRING | Watermark text. | |
| settings.promptEnhance.enabledopt | BOOLEAN | false | Automatic enhancement and expansion of the input prompt. |
| safetyopt | BOOLEAN | false | Enable to set safety. Off uses the model's default. |
| safety.checkContentopt | BOOLEAN | false | Enable or disable content safety checking. |
| settings.promptEnhance.temperatureopt | FLOAT | 1.200–5 | Controls randomness in generation. Lower values produce more deterministic outputs, higher values increase variation and creativity. |
| settings.promptEnhance.topPopt | FLOAT | 0.950–1 | Nucleus sampling parameter that controls diversity by limiting the probability mass. Lower values make outputs more focused, higher values increase diversity. |
| ttlopt | BOOLEAN | false | Enable to set ttl. Off uses the model's default. |
| ttl_valueopt | INT | 60 | Time-to-live (TTL) in seconds for generated content. Only applies when `outputType` is `URL`. |
| outputFormatopt | COMBO | JPG | File format for the generated image. |
| outputQualityopt | INT | 9520–99 | Compression quality of the output. Higher values preserve quality but increase file size. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |