NovelAI's Enhance changed V5 images more than a local Anima i2i pass in ComfyUI did: the mean color difference from the original (ΔE2000) was between 10 and 15 for Enhance, and between 8.7 and 10.4 for Anima i2i even at denoise 0.55. If you only want a bigger image, the standalone Upscale at 1 Anlas stayed closest to the original.
This is for anyone who has hesitated over which route to take when enlarging a V5 image. On 2026-10-01 I prepared three originals with nai-diffusion-5-full, ran them through NAI Enhance 1.5×, Enhance Max and the standalone Upscale, and then ran the same originals through 15 ComfyUI jobs on an RTX 5090. A few terms if NovelAI is new to you: Anlas is NovelAI's generation credit, Enhance is the web UI option that enlarges an image and redraws it, and Anima is the model I run locally in ComfyUI. I usually generate in NovelAI first and move to Anima when I get stuck.
Enhance 1.5× cost 35 Anlas, Max cost 45 Anlas
Even on Opus, NovelAI's top subscription tier, Enhance and Upscale are not free. One of the conditions for free generation is that no other image is used as a base, so feeding in an existing picture takes Anlas off your balance (subscription page checked 2026-10-01).
I ran each action in the web UI and checked the balance after every one. Generating the originals cost 0 Anlas, as in the earlier post. Here is what each action deducted:
| Action | Output size (portrait original) | Anlas deducted |
|---|---|---|
| Original generation 832×1216, 28 steps | 832×1216 | 0 |
| Standalone Upscale | 1664×2432 | 1 |
| Enhance 1.5× | 1280×1856 | 35 |
| Enhance Max | 1467×2144 | 45 |
The two portrait images and the one landscape image all cost the same. That is higher than the 30 and 38 written in a community tool. The button in the Enhance window also showed 35 and 45, so look at that number before you click.
Enhance output records a strength 0.5 i2i request
Enhance output PNGs carry the request that produced them. NovelAI hides generation data inside its PNGs (the "stealth metadata" covered further down), and opening it shows the request as it was sent. Both levels were an Img2ImgRequest with strength 0.5, noise 0 and 28 steps. The two levels differed like this:
| Item | Enhance 1.5× | Enhance Max |
|---|---|---|
| i2i request resolution | 1280×1856 | 832×1216 (original size) |
| Final output | 1280×1856 | 1467×2144 |
| End of prompt |
-2::upscaled, blurry::, appended automatically |
nothing appended |
| Seed | new random value every time | new random value every time |
| Character prompts | carried over from the original | carried over from the original |
The i2i request size was the enlarged size for 1.5× and the original size for Max. Max also had upscaled_enhance: true recorded separately, so Max appears to enlarge the image after the i2i pass.
Metadata alone cannot settle the processing order inside the server, so I left that as unverified. Magnitude 2 in the Enhance window is the same value as Strength 0.5.
The seed changes every time you click. Feeding in the same original again gives a different result, so save a result you like right away.
Enhance changed the image more than Anima i2i at 0.55
The reference is the original enlarged to the output size with Lanczos. ΔE2000 looks at color difference, and grayscale SSIM looks at how much of the lines and shapes survive. The values are the range across the three originals:
| Method | Scale | Mean ΔE | SSIM | Cost |
|---|---|---|---|---|
| NAI standalone Upscale | 2× | 0.85~1.04 | 0.966~0.981 | 1 Anlas |
ESRGAN (RealESRGAN_x4plus_anime_6B) |
2× | 2.07~2.59 | 0.904~0.931 | 0 |
| Anima i2i denoise 0.25 | 1.5× | 4.33~5.72 | 0.717~0.790 | 0 |
| Anima i2i denoise 0.40 | 1.5× | 6.29~7.90 | 0.615~0.700 | 0 |
| Anima i2i denoise 0.55 | 1.5× | 8.69~10.44 | 0.555~0.631 | 0 |
| Anima i2i denoise 0.40 | 2× | 5.38~6.95 | 0.693~0.765 | 0 |
| NAI Enhance 1.5× | 1.5× | 10.63~15.43 | 0.481~0.606 | 35 Anlas |
| NAI Enhance Max | about 1.76× | 10.19~14.29 | 0.498~0.638 | 45 Anlas |
By the numbers, Enhance changed the image the most. Apart from the background image, saturation changed by 0.03 or less. SSIM fell at the same time, so the lines and shapes changed too. The exception is Enhance 1.5× on the background image, where saturation rose by 0.10 and the blue channel by 19.
Cropping the face shows the same order. Upscale is hard to tell apart from the original. Enhance 1.5× redrew the bangs and the eye highlights. Max changed even the eye shape and the irises. Anima i2i 0.40 kept the outlines closer to the original.
The usual community answer is that moving to a local model changes the style because the checkpoint is different. I had taken that on trust and assumed Enhance would be the safe option. Yet Enhance, which uses the same V5 model, changed the image just as much. Even with the same model, an i2i pass changes this much.
In the two-character image, Enhance kept the eye color and Anima changed it
The difference was clearest on the two-character original, which I generated with the prompt split across two character prompt slots. The blue-haired character with glasses has blue eyes in the original. Enhance kept the blue eyes at both levels. Anima i2i turned them green from 0.40 on.
Green is the other character's eye color. The glasses frames also went from black to gold. On the Anima side I used core nodes only, so both characters' attributes were written on a single line.
That line contains only green eyes, not blue eyes. The NAI character slots did not have blue eyes either. This one image cannot tell whether the cause is the single-line prompt or the difference between models.
The Enhance request carried both character slots unchanged. The glasses frames, though, became thick and square, and Max also changed the shape of the mouth. In this one image, the eye color survived and the details were redrawn.
Sign lettering was rewritten by every i2i pass
On the rainy neon street, no i2i pass kept the lettering. Enhance changed the layout and colors of the signs wholesale. Anima i2i 0.40 kept part of the large sign's shape, and at 0.55 that changed as well.
Most of the sign lettering in the original is meaningless characters anyway. It is still a problem if you liked the sign design, and in that case you should use only Upscale or ESRGAN.
Local ComfyUI post-processing on an RTX 5090: 2 to 38 seconds per image, 0 Anlas
The local setup is ComfyUI 0.33.1 on Windows 11, with torch 2.11.0+cu128 and an RTX 5090 32GB. I used core nodes only, with no custom nodes, and queued the 15 jobs one after another through the HTTP API (POST /prompt). Run times per job type were:
| Job | Pipeline | Run time |
|---|---|---|
| ESRGAN 2× |
UpscaleModelLoader 4×, then Lanczos to 2× size |
1.63~1.66 s |
| Anima i2i 1.5× | Lanczos 1.5×, then VAEEncode and KSampler 30 steps |
17.77~19.17 s |
| Anima i2i 2× | Lanczos 2×, then the same i2i | 37.73~38.28 s |
Anima ran at cfg 4.5 with er_sde and simple. The seed was 20261001, with no artist tags. The first run took 21 seconds because of model loading, so I left it out. The times are for this one GPU.
Anima is the only local model I kept. Its weights are non-commercial, but the images it generates can be used commercially; the Anima README says so. NoobAI-XL, which is on the same PC, prohibits commercial use of its outputs, so I left it out (checked 2026-10-01).
Stealth metadata disappears on a ComfyUI save but survives webp
NovelAI PNGs hide the prompt in the alpha channel, with the settings stored alongside it in the least significant bits. This is what NovelAI's stealth metadata is. I reimplemented the logic of the official reader and read the file at each stage:
| Stage | Result |
|---|---|
| NAI original PNG, Upscale and Enhance output | survives |
macOS sips PNG re-save |
survives (text chunks are lost) |
| Lossless webp, lossy q90 webp (Pillow, sharp) | survives |
ComfyUI SaveImage PNG |
lost (saved as RGB, no alpha) |
| JPEG conversion | lost |
| Half-size resize (one original) | lost (magic not found) |
If you only convert to webp and upload, the full prompt goes along with it. It read back intact even from a q90 lossy webp.
The original PNG also has the prompt in its Comment and Description text chunks. To hide it, strip both the alpha channel and the text chunks, then read the final file again before uploading to confirm.
One pass through ComfyUI and the NAI metadata is gone. In its place, SaveImage writes the workflow as a prompt chunk. If you need the NAI generation info, keep the original PNG separately.
Choose by how much of the original you want to keep
- If you only want to enlarge the image as it is, the NAI standalone Upscale stays closest. If you have a local GPU, ESRGAN also stays around ΔE 2.
- If there are several characters and you don't mind the details being redrawn, look at Enhance first. In this round's single two-character image, it kept the eye color. The result is different every time, so save it right away.
- To save Anlas, start Anima i2i at denoise 0.25 to 0.40. With several characters, check the result with a crop.
- For backgrounds where signs or lettering matter, avoid i2i and use only Upscale or ESRGAN.
All the pictures in this post were made with AI. Images: AI-generated (NovelAI Diffusion V5, ComfyUI Anima; cover image OpenAI Images).
Takeaways
NAI Enhance (35 or 45 Anlas) redrew V5 images more than local Anima i2i at denoise 0.55, while the 1 Anlas standalone Upscale and ESRGAN stayed closest to the original. Every i2i pass rewrote the sign lettering, and a webp conversion keeps the prompt in the stealth metadata, so strip it before you post.
Unverified
The internal processing order of Enhance: I could not confirm it. The metadata only records the request size and the upscaled_enhance value, and it does not show at which stage the server enlarges the image.
Seed-to-seed variance of Enhance results: I did not measure it. There is only one result per setting, so I don't know how much ΔE moves across repeated runs.
Enhance strengths other than Magnitude 2: I did not run them. I used only the default of 2 and did not check the price or the amount of change at other strengths.
Processing time on the NAI side: I did not measure it. A person clicked one image at a time, so all I have is a rough sense of the time, and queue waits were mixed in, so I kept it out of the table.
The Curated model and other local models: out of scope. The originals used only nai-diffusion-5-full, and locally I ran only Anima.
Changelog
| Version | Description |
|---|---|
| 1.0 | 2026-10-01 first version (9 NAI Enhance 1.5×, Max and Upscale runs plus 15 ComfyUI jobs, measuring Anlas, ΔE, SSIM and metadata) |
AI disclosure: translated and edited with AI assistance (Claude) from my Korean original. Measurements were run with Claude Code under my supervision; I reviewed the result.



Top comments (0)