I wanted to know how well an AI model handles a full manga page as one unit: four panels, two speakers, and two short lines of dialogue that belong in specific bubbles. So I wrote the page as a spec and generated it with Tsubaki.3 on PixAI. Then I patched it through a chain of edits in PixAI Studio and checked each output the way I would check a diff.

In the first run, most of my assertions passed. The edits were where I found side effects outside the declared scope.

The fixture

The test page is a karaoke grudge match between two characters with deliberately different silhouettes, so a swapped identity or a misattributed line would be visible at thumbnail size.

page: style: black-and-white manga, ink lines, screentone layout: [wide, half + half, wide] reading_order: left-to-right, top-to-bottom characters: genzo: {build: short and round, hair: tall white pompadour} fumiko: {build: tall and thin, hair: high bun, glasses: true} panels: 1: {shot: wide, speaker: fumiko, line: "BEAT 98, OLD MAN.", screen: blank} 2: {shot: close-up, speaker: none} 3: {shot: low angle, speaker: none} 4: {shot: medium, speaker: genzo, line: "YOUR TURN.", screen: "100"} 

The real prompt was plain English, one paragraph for the page rules, one for each character, then one numbered paragraph per panel. The YAML above is only the structure I tested against. Each panel differs from the previous one in exactly one variable (shot, action, or speaker), so I could check each assertion on its own.

First run: four versions, eight assertions

I generated four versions in one batch with Prompt Helper off, so the model received the prompt unchanged. Then I checked each version at three to four times its size.

Assertion Pass rate
Four panels in the declared layout 4/4
Panel order matches the spec 3/4
Both lines spelled exactly 4/4
Panel 1 tail aimed at Fumiko 0/4
Panel 4 tail aimed at Genzo 4/4
Panel 1 screen blank 0/4
Panel 4 screen shows 100 3/4
Fumiko's cup tipped over in Panel 4 3/4

Panel 1 from four versions, each speech bubble tail aimed at the singer instead of the woman at the table

The two failing rows are both in Panel 1. In every version the text was correct, the bubble was clean, and the speaker was wrong. The model also put an unrequested score on the screen: 190 once, 100 twice, and "10 0" once. With a 100 in Panel 1, the reader knows the result of Panel 4 in advance.

I picked the version with the cleanest Panel 4 as the base for editing.

The first generated four-panel manga page, with the Panel 1 bubble beside the singer and a score of 190 on the screen

Patching in PixAI Studio

In PixAI Studio, every step is a node on a canvas, wired to the image it takes as input. Each edit was a new Tsubaki.3 node with one output. Every instruction had two parts: the change, scoped to one panel, and a keep list naming what must stay the same.

Node Intended change Change made Side effects
2 Panel 2: new expression yes Genzo gained glasses like Fumiko's
3 Panel 3: two background customers no Panel 1 face and lettering changed, page shrank
4 (from 2) Panel 2: remove the glasses yes Fumiko's Panel 1 expression changed
5 Panel 1: move bubble, blank screen bubble yes, screen no Panel 4 screen cleared, Panel 1 screen removed
6 Panel 4: restore the 100 yes both teacups changed

I dropped Node 3 and branched again from Node 2, so the final page is the output of the path 1, 2, 4, 5, 6.

I learned the most from Node 5, where I scoped both changes to Panel 1 and named the 100 in Panel 4 in the keep list.

In Panel 1 only, make two changes. Move the speech bubble that reads "BEAT 98, OLD MAN." to the upper left of the panel, above Fumiko ... Make the score screen on the wall dark and blank ... Keep Panel 2, Panel 3 and Panel 4 exactly as they are, including ... the number 100 on the score screen in Panel 4 ... 

The model moved the bubble as asked. For the screen, it ignored the panel scope: it removed the one in Panel 1 and emptied the one in Panel 4, although the keep list named the 100 explicitly. From the outside, this looked like a selector that matched every object of the same type on the page instead of the one inside the declared panel. That is an analogy for what I observed, not a claim about how the model works internally.

In Node 6, the model restored the 100 and also edited two other repeated objects: Fumiko's teacup in Panel 1 now floats above a tilted saucer, and a second cup appeared in Panel 4.

Panel 1 and Panel 4 after Nodes 4, 5 and 6, showing the bubble moving to Fumiko, the Panel 4 screen going blank, and the 100 returning with changed teacups

What I would put in a checklist

  • Run a batch and assert per panel. With a single version, I could not have seen that the speaker error appeared in all four.
  • Treat speaker assignment as its own assertion. A line can be spelled correctly and still be in the wrong character's bubble.
  • Give a bubble a position on the page, together with the speaker's description. In my one run of this fix, the model moved it to the right character.
  • Diff the whole page after every edit, including panels outside the scope. In this test, the model changed Fumiko's face, the score screen, and the teacups in panels outside the target.
  • Branch when an edit fails. If I had continued from Node 3, its unrequested changes would have been in every later step.

Untested idea for the next run: when an object appears in several panels, address the target by its position on the page as well as by its panel number.

The finished page is readable from top to bottom, and I kept the two teacup changes on it as evidence. If you want to run the same experiment on your own four-beat scene, you can try it on PixAI.