This workflow asks a vision-language model to describe an image, combines that description with preservation instructions, and uses Qwen Image 2.1 to generate a new image. The important word is generate. It is not a conventional upscaler that guarantees recovery of the original pixels or missing detail.
The supplied file contains 18 nodes and 24 links. The source title mentions 15 example groups, but the folder supplies one workflow, not 15 independent projects. No new example render, image-quality comparison, model request, or speed test was performed for this guide.
Follow the image through three routes
LoadImage 514 supplies the same selected image to three consumers:
- RHLLMChatNode 549, for a visual description.
- TextEncodeQwenImage21 512, through its first image input.
- GetImageSize 509, for the target-size calculation.
It also supplies the original side of Image Comparer 513. The comparison's other side receives the newly decoded output. This is an original-versus-reconstruction display, not a comparison between two sampling models.
The selected upload filename is not evidence of what the picture contains. Supply an image you are authorized to process, and review it directly before making claims about fidelity or visual subjects.
The active prompt is assembled, not the encoder's old widget text
Node 544 contains the fixed preservation instruction. It asks for unchanged identity, pose, composition, lighting, color and style while removing blur and compression artifacts. These are requested constraints, not an enforced pixel lock.
RHLLMChatNode 549 selects the model string google/gemini-3.1-flash-lite-preview and receives the original image at image1. Its response output—not raw_response—feeds input b of JWStringConcat 545. The fixed instruction feeds input a. The resulting string goes into encoder 512's prompt input and a text-display node.
That connection overrides the older enhancement prompt stored inside encoder 512. Likewise, a previously displayed string is cached UI text, not proof of a fresh analysis response.
Before using this route, inspect the generated description for invented details, misread text, incorrect identity attributes and instructions that conflict with preservation. A longer description can introduce new assumptions rather than recover information that was never present.
Review the external-service boundary
The RHLLM integration is configured with an external model/service reference. Confirm actual routing, image transmission, account configuration, billing and data-handling terms before sending sensitive material. An unconnected api_config socket does not prove that no account-level configuration exists.
No RHLLM request was made during this review. Do not copy credentials or authenticated preview links into a published workflow. The distribution copy removes the historical comparison gallery before creating new extracted evidence and distribution assets.
Image conditioning does not mean source-latent initialization
Encoder 512 has a connected image input, but its vae socket is unlinked. Its latent output is also unused. The sampler instead receives an EmptyLatentImage from node 506.
The separate VAE loader connects to the final decoder. Do not invent a VAEEncode path from the original image into the sampler, and do not describe this as ordinary low-denoise image-to-image processing.
The image is supplied to the conditioning encoder; whether that encoder supports the saved unlinked-VAE state must be checked against the matching implementation. This guide does not silently repair that connection or certify the graph as runnable.
The encoder also stores a resolution control of 1024. That is separate from the sampler's linked latent dimensions. Its presence does not prove that the final output is a 1024-square image; inspect the custom node's handling of reference resolution.
Model and sampling selections
The saved loaders reference:
qwen_image_2.1_bf16.safetensorsqwen3vl_8b_fp8_scaled.safetensorsqwen_image_2.1_vae_bf16.safetensorselusarcas-qwen2-1-detailer-v1.safetensors
The model passes through the detail LoRA at approximately 0.5 strength before reaching the sampler. That is an active modification, not an unmodified base-model result.
The saved KSampler controls specify 25 steps, CFG 1, Euler with the simple scheduler, and denoise 1. Its seed control is set to randomize. Confirm these controls in the matching interface, including the extra seed-control widget, rather than mechanically pairing every stored array item with an input port.
Neither a detail LoRA nor denoise 1 proves restoration accuracy. The graph starts from an empty latent and asks for image-conditioned reconstruction; new texture or fine detail can differ from the source. Inspect text, logos, faces, edges and repeated patterns after an actual run.
For a meaningful repeatability check, record the actual language-model response and resolved sampling settings. Do not assume a saved seed number makes a randomizing, externally assisted pipeline deterministic.
The sizing rule is an area budget with a scale cap
Width and height from GetImageSize feed two mathematical expressions. With original width a and height b, the shared scale is:
s = min(4, sqrt((2048 * 2048) / (a * b))) requested_width = a * s requested_height = b * s The expressions' INT outputs feed EmptyLatentImage 506, overriding its stored 1024×1024 defaults. The formula preserves aspect ratio before integer conversion, limits enlargement to four times per dimension, and targets no more than 2048² pixels.
It does not set the long side to 2048, always enlarge, or guarantee a square 2K image.
| Example input | Formula result before integer/grid handling | What it demonstrates |
|---|---|---|
| 1024×1024 | 2048×2048 | Area target reached at ×2 |
| 256×256 | 1024×1024 | ×4 cap prevents reaching the full area budget |
| 4096×4096 | 2048×2048 | Large inputs are reduced |
| 1920×1080 | approximately 2730.67×1536 | Long side can exceed 2048 |
These examples are arithmetic checks, not generated-image measurements. Math-node integer conversion and latent-grid handling can change actual decoded dimensions. Inspect both requested and actual output size before publishing a resolution claim.
The old text displayed by GetImageSize is not a substitute for dimensions of the currently loaded image. Wide or tall inputs also need resource checks; an area target alone is not a hardware compatibility guarantee.
Run a small acceptance test
Resolve the exact model files and compatible custom nodes, including the image encoder and RHLLM integration. Keep the original workflow intact and experiment in a separate copy.
Load authorized media, inspect the actual language-model description, and confirm the combined prompt. Check the encoder's VAE requirement, model/LoRA selection, dimensions and sampler controls before queueing.
The decoded image feeds SaveImage 14553 and the reconstruction side of the comparer. There is no second model route, dedicated output upscaler or multi-example benchmark in this graph. A cached gallery is not a new result.
After a real run, compare content and geometry as well as apparent sharpness. Check whether identity, text, object boundaries, colors, framing and style changed. New detail can look plausible without being historically or physically correct. If preservation is the requirement, reject changes rather than treating the prompt's wording as proof that the requirement was met.
Evidence and rights
The comparison gallery is cleared in new distribution copies; other workflow data and the source original are retained. Facts for this package are extracted from that cleaned copy so historical authenticated preview URLs are not propagated into fresh evidence files.
The source-provided tutorial supplies context; its link was not live-verified. Input media and model weights are not bundled. Confirm workflow, node, model, LoRA, service, artwork and image rights separately. Reconstruction does not grant new ownership or a blanket commercial license, and this source-based guide does not certify fidelity, runtime compatibility or performance.
