DEV Community

Ilan Kim
Ilan Kim

Posted on AI-assisted

NovelAI V5 upscaling measured: Enhance at 35 and 45 Anlas vs ComfyUI Anima i2i, and how much the style shifts (ΔE)

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.

Face crops of the original and the NAI Upscale, Enhance 1.5×, Enhance Max, Anima i2i 0.40 and 0.55 results, cut at the same position and placed side by side

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.

Face crops of the blue-haired character from the two-character original compared across six methods; only the two Anima i2i panels have green eyes

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.

Crops of the neon-sign street original and the six methods' results at the same position; every i2i result has different sign lettering

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

  1. 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.
  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.
  3. To save Anlas, start Anima i2i at denoise 0.25 to 0.40. With several characters, check the result with a crop.
  4. 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)