Skip to content

Build1 publisher2 min readPublished

Four params_version values leave NovelAI's V5 output pixel-identical

A teardown of nai-diffusion-5-full on 2026-09-14 found params_version 4, 3, 1 and 0 all producing the same image, while a body missing v4_prompt came back as a 500 Internal Server Error that looks like a provider outage.

The Engineer · Build desk

Illustration accompanying Four params_version values leave NovelAI's V5 output pixel-identical

What happened

  • Four params_version values (4, 3, 1 and 0) sent with the same V5 body skeleton produced images that compared at a mean absolute difference of 0 under Pillow, at seed 1234567890, 832x1216 and 28 steps.
  • Three community clients fill the field differently: one ComfyUI node sends 1, another node's README specifies 4 for V5 and 3 for older models, and the NAIWeaver changelog tells users to send 4.
  • Omitting either v4_prompt or v4_negative_prompt from the body returns 500 Internal Server Error instead of a 400-class validation response.
  • NovelAI's official OpenAPI document contains no required array and no nai-diffusion-5 string, leaving the expected params_version value and the V5 endpoint's required fields undocumented.

Compiled by The EngineerSomething wrong?How this is made

Why it matters

  • constraint Retry logic keyed on status class misfires against this endpoint: a 5xx tells the client to back off and try again, and the body being retried can never succeed.
  • decision An integrator copying a params_version value out of a community client has no decision to make for this skeleton, and can match the web client's 4 without expecting it to change anything.
  • contradiction The web client tracks params_version closely enough to migrate stored settings up to 4, while the generation endpoint that receives the field does not act on it.
  • cost An Opus subscriber can re-run the comparison inside the free band, so independently checking the finding costs the wall-clock time of six generations.

Post the V4 body skeleton to https://image.novelai.net/ai/generate-image with the model set to nai-diffusion-5-full and the request goes through [1]. The strongest evidence that params_version is ignored on this skeleton is the value 0: a server that parsed the field would have rejected it, and it came back 200 [4]. The returned PNGs carry no params_version field in their Comment metadata [3].

The clients that disagree do so in writing. ComfyUI_NAIDGenerator sends 1 [14]. The README of ComfyUI_RS_NAI_API_Request says "V5 requests use params_version: 4 while older models keep params_version: 3" [15], and the NAIWeaver changelog says "send params_version: 4" [16].

The 4 comes from the web client. In the novelai.net bundle pulled on 2026-09-14, _app-b7172cc1a6a0b340.js, the default parameters in the nai-diffusion-5-full branch start with params_version:4, and the same file contains migration code that raises stored settings to 4 when params_version is below 4 [5]. The migration code only updates stored settings. In the same bundle the string v5_prompt appears zero times and v4_prompt appears twice [6].

The official OpenAPI document lists no required array and no nai-diffusion-5 string [10], so the only way to learn which fields are mandatory is to omit one and read the status code. Omit v4_prompt and the code is 500 [7]. The other two failures return 400s. The old api.novelai.net host accepts the generation request itself but does not recognise the V5 model ID, so its 400 points at the model field when the host is the problem [8]. The multipart 400 appears because the boundary undici would have attached automatically disappears once you set Content-Type on a FormData body yourself [9].

Transport made no difference here. The same params_version: 1 body sent as JSON and sent as a JSON blob in the request part of a FormData both returned 200 with identical pixels [17].

For this to transfer to your client you need the same body skeleton, the same model ID, the image.novelai.net host, and the server build answering requests on 2026-09-14. The run was on macOS 26.5.2 with Node v22.22.3 and an Opus account at tier 3, six images generated inside the free band [12]. The post says it did not test other field combinations such as character prompts or inpainting [11]. Opus generates one image at a time at the common sizes and up to 28 steps without spending Anlas, provided no base image is involved and the allowance holds [13]. The comparison ran at 28 steps, the top of that band [18].

What to watch

  • Whether params_version starts affecting output once character prompts or inpainting fields are present in the body.
  • Whether NovelAI adds a required array or a nai-diffusion-5 entry to its OpenAPI document.
  • Whether a later server build turns the missing-v4_prompt 500 into a 400-class validation error.
Loading claim ledger
Loading source directory links
Loading share composer
Loading topic controls
Loading related stories