Image models fail in a way that is hard to debug: the output looks fine. There is no stack trace, no assertion error, just a picture that is plausible and quietly different from what you asked for.
So I built a test fixture and ran nine controlled generations against it.
The fixture
One scene, described in exactly the same words in every prompt, with four objects placed so that I could check each one afterwards:
- red toolbox -> viewer's left of the character
- metal ladder -> viewer's right of the character
- ticket booth -> further back, behind the wheel
- the character -> standing at the foot of the Ferris wheel
The model under test was Tsubaki.3 on PixAI. Two rules kept the runs comparable. Only the camera sentence changed between prompts, and it came first, since these models read a prompt roughly in order of importance. Every test ran as a single generation instead of a batch, because selecting the best of four measures what the model can produce on the fourth attempt, which is a different question.
The baseline
The first prompt named no camera at all, and I ran it four times. All four came back the same way: eye level, character centered, full body, wheel behind him at roughly equal width on both sides.
The left and right assignments held in all four images. The booth, described as standing behind the wheel, ended up beside it every time. That split showed up in every later run too, so it is worth stating early: left and right are properties of the frame, behind is a property of the camera, and only one of those two moves when the lens does.
Test 1: camera height
Two prompts, identical except for one sentence. One asked for an extreme low angle with the camera almost on the concrete, the other for a bird's-eye view from the top of the wheel.
Both moved the lens instead of bending the pose. Boots large and close, horizon low, base legs splaying outward in the first. Hard hat crown dominant, legs foreshortened, structural shadows consistent with the viewpoint in the second.
The failure here is partial. In the low-angle run, the steel base directly behind the character reacted to the new viewpoint, while the wheel itself stayed a clean frontal circle with evenly spaced spokes, exactly as it looked at eye level. In the high-angle run, the same wheel turned correctly, its rim running out of both sides of the frame as two curves. Near geometry followed the camera, while distant geometry sometimes kept the view it already had.
Test 2: the regression
The depth prompt asked for three layers: toolbox very close to the lens, character in the middle distance beside the ladder, booth far behind him and much smaller than he is.
Result of run one:
| Assertion | Outcome |
|---|---|
| toolbox in the immediate foreground, large | pass |
| character readable in the middle distance | pass |
| booth far back, much smaller than him | pass, around 40 percent of his height |
| character stands beside the ladder | fail, ladder moved to the booth |
One failing assertion, so I patched the prompt. I added two phrases and changed nothing else: the booth got a frame position, near the right edge of the frame, and the character got one too, in the center of the frame.
Result of run two:
| Assertion | Outcome |
|---|---|
| character stands beside the ladder | pass, fixed |
| booth near the right edge of the frame | pass |
| booth far back, half his height | fail, around 110 percent of his height |
| character in the center of the frame | partial, sits right of the center line |
The patch fixed the failing assertion and broke a passing one. The booth moved to the right edge as instructed and came forward while doing it, its awning now above the character's hard hat. Two runs of the same scene, two different failure profiles, and the second was not obviously better than the first.
Test 3: the lens is a separate control
Fisheye has two parts. The lens has to bend the image, and the camera has to be somewhere specific for the bend to make sense. I asked for both: a fisheye shot from directly beneath the wheel looking straight up.
The distortion arrived, and it is convincing, with the concrete apron bowing into a wide arc. The camera position was ignored, and what came back has two viewpoints in one frame. The character is drawn from above, crown of the hard hat toward the lens, legs foreshortened, shadow pooled beneath him. The wheel behind him is drawn from below, base legs splaying downward, top edge tilting away.
The lens effect applied to the whole frame, while the camera position resolved separately for the figure and for the structure behind him.
Test 4: five constraints in one prompt
The last prompt stacked five requirements: low camera, toolbox in the immediate foreground on the viewer's left, character in the middle distance climbing the ladder with his back to the camera, an older man in a green coverall further back on the viewer's right holding a clipboard and looking up, wheel filling the background.
All five landed, including the back-turned pose, which I expected to be the weak point since turning a character away removes the face.
The busiest prompt in the test produced the cleanest result. The wording difference is that every element here carried a frame side alongside its distance, while the depth prompt named only layers. Whether the frame side is what carried the result, two runs cannot tell me.
What the nine runs support
- Side of the frame: honored in every run where it appeared, including ground level, overhead, and fisheye.
- Camera height: three clear results out of four, with the overhead run understating the distance.
- Lens distortion: present in both runs that asked for it, independent of camera position.
- Depth, near layer: landed in all three prompts that asked for one.
- Depth, far layer: correct in two runs, slid forward in the third.
- Size ratio between two objects: returned as written in neither of the two runs that asked for one. Much smaller than he is produced 40 percent; half his height produced 110 percent.
The camera is controllable on this model. The spatial relationships between objects are not deterministic across runs of the same prompt, and adding instructions to fix one relocated the variance rather than eliminating it. If you are building a pipeline on top of this, treat camera position as a parameter and object-to-object geometry as something you verify per output.
If you want to run the same experiment, the method is cheap: fix three or four nameable objects in your scene, write down where each one belongs, change one sentence per run, and check the output against your list instead of against your impression of it.



Top comments (0)