I wanted sharper eyes. I was making images in ComfyUI on my two RTX 3090s, and the faces were close. But the eyes were soft. An eye that large in the finished image ought to have more than a colored circle, a catchlight, and the suggestion of eyelashes. I wanted irregular lashes, moisture along the lower lid, tiny veins, and iris fibers that looked like part of an eye instead of something painted on it.
So I started adding passes. I generated the scene, increased the latent resolution, and refined the whole image. Then I found the face, enlarged it only when it needed to be larger, and worked on it separately. After that I split the eyes and gave each one its own close-up. I finished with an optional tiled pass over the complete image while protecting the face I had already fixed.
The eyes got better. The skin got better. The picture did not necessarily get more interesting.
A sharp picture of not much
I kept comparing my results with images made through OpenAI’s image tools. I do not know what OpenAI is doing inside its private pipeline. In the successful images, the subject was not simply standing in front of an attractive background. The background showed reactions, movement, and consequences.
I could add bark texture, fog, scratches, reflections, fabric fibers, and more varieties of moss. Those additions improved surface detail without giving any object a role in the event.
A piece of crowded pinball art gave me a useful comparison. A woman stands in the center holding two melons. A man eats watermelon in the foreground. Another struggles with crates. A truck comes through the middle of the scene while people react around it. A dog, a horse, a small airplane, and tumbling produce continue the same comic event into the background.
My first solution was to make the prompt longer
I built a local prompt director that expanded a short idea into a complete scene. I told it to describe the camera, foreground, middle ground, background, lighting, materials, and focal hierarchy. The longer prompts produced busier images, but the added elements often had no relationship to one another.
The prompt director would put one interesting thing on the left, another behind the subject, and atmospheric activity in the distance. The instructions specified where to put things without requiring them to result from the same event.
I changed the instruction. Before describing anything, the director had to decide what was happening. What does the main character want? What is stopping that from happening? What happened immediately before this moment? What looks likely to happen next? The subject performs the main action. The middle ground adds a complication or reaction. The background reveals a consequence, witness, threat, escape route, destination, or reversal.
I required a glance or gesture to connect the subject to the other action. The perspective had to establish where everything was, and the lighting had to follow one physical source. I cut objects that did not clarify the character, motive, obstacle, action, or consequence.
A new prompt for the second pass
At first I sent the original prompt into the second pass with another instruction asking for more detail. Very little changed because the new instruction did not tell the model which existing surfaces the higher resolution should resolve.
I replaced it with a new prompt. The first prompt is in charge of the event. The second is in charge of looking at that event more closely. It has to preserve the people, objects, actions, camera position, and spatial relationships. It cannot add another character or improve the plot. It can describe the physical information that should become visible at the higher resolution: pores and vellus hair, woven fibers and seams, scratches and tarnish, bark fissures and leaf veins, condensation, disturbed dirt, reflected color, shadow transitions, and atmospheric falloff.
The face and eye prompts are narrower again. Their job is not to redesign the person. They are not allowed to change the pose, clothes, forest, or light. They restore the information that disappeared because the face occupied a relatively small part of a much larger composition.
Five passes, with different responsibilities
I organized my Qwen Image 2512 workflow into five visible stages. In the first, I create the composition and can optionally use a depth ControlNet when I need structural guidance. In the second, I increase latent resolution and use a new global-detail prompt. In the third, I perform an ordinary image upscale before asking the model to work only on the detected face. In the fourth, I treat the left and right eyes independently. In the fifth, I can run an optional low-denoise tiled pass across the full image while protecting the refined face from being casually repainted.
I briefly had the face stage resizing the crop in the wrong direction. That softened the face before the model started. I changed it so the ordinary upscale happens first and the model works afterward. If the crop is already large, I do not shrink it to satisfy a preferred model size. One tiling strategy left a visible border around the feathered face mask because the masked area went through a different operation from the surrounding hair and skin.
Putting two 3090s in the same machine did not create one 48-gigabyte graphics card. ComfyUI still had to know where the text encoder, image model, and VAE ran, and which device owned a tensor when another part of the graph needed it. An NVLink bridge would not make the ordinary graph treat the devices as one memory pool. I assigned the cards different responsibilities and used system memory for the portions that did not fit.
Comparing models without pretending they are interchangeable
I also wanted to compare Qwen with Krea 2 and Flux 2 Klein. My first instinct was to add model switches to the five-pass graph. The models do not share a text encoder, VAE, latent format, sampler, scheduler, or ideal guidance settings. The later face and eye stages were written specifically around Qwen, so one switchboard would not compare the models under their native configurations.
I chose separate workflows organized by model family. I kept the five-pass experiment for Qwen, used Krea 2 RAW with its native longer generation settings, and used Flux 2 Klein with its distilled four-step pipeline. The comparison versions start with the same story director, prompt, fixed seed, and aspect-ratio presets, while preserving each model’s native settings.
What another pass can and cannot do
I still care about the eyes. When they are supposed to be in focus, I want them tack sharp. I want the middle distance to resolve instead of dissolving into vague shapes, and I do not want every background hidden behind fashionable bokeh. The detail passes are valuable because they let me allocate attention where a single generation tends to run out of it.
A second pass can reveal the weave in a sleeve, make wet stone look wet, and give distant architecture more structure. It cannot make an arbitrary building relevant or supply a cause-and-effect relationship that the first composition never included.