Illustracy

Illustracy — Illustration Layer Separator

한국어 English

A program that takes a single finished illustration and splits it back into many transparent layers, the way it was painted, and saves them as a Photoshop file (PSD).

[!IMPORTANT] This program was made for cases where drawn layers were merged by mistake and can no longer be separated, or where an image was exported as a single file and the original file could not be saved.

Never use this program on images you did not create.


Contents

  1. Quick start
  2. Principles
  3. How it works
  4. Algorithms and formulas
  5. Correspondence with the physical world
  6. System (program structure)
  7. Issues and fixes
  8. Optimization
  9. Strengths
  10. Limitations
  11. Verification
  12. Release history
  13. References

1. Quick start

What is this?

When you paint on a computer, you usually stack several sheets of transparent paper. You put the colors on the bottom sheet, the shadows on the sheet above it, the shiny highlights above that, and the lines on top. But once the finished picture is merged and saved as one image, those sheets are gone and only one sheet remains.

Illustracy looks at the merged picture and splits it back into sheets in the order the picture was painted. Stacking the split sheets again looks the same as the original picture, so close that the eye cannot tell them apart.

What does it split into?

The program’s screen and the layer names in the PSD are in Korean. The Korean names are given in parentheses.

Layer What it holds
Rough (러프 folder: 러프 1 (컨셉) · 러프 2 (다듬기)) Two underdrawings. Rough 1 is the crude rough an artist dashes off the moment an idea comes, and rough 2 refines it and matches the composition to the original. They are not in the original picture, so they are a guess, and they start hidden
Line art (선화) The lines of the picture
Color trace (색 트레이스) The parts of the lines whose color differs (lines catching light, colored lines)
Base color (밑색) The single flat color painted per part, such as hair, skin, clothes
1st · 2nd shadow (1차 그림자 · 2차 그림자) Darker areas laid over the base color. The 2nd is darker than the 1st
Highlight (하이라이트) Areas painted brighter than the base color (hair sheen, etc.)
Shading · gradient (명암 · 그라데이션) Areas that darken smoothly
Reflected light · rim light (반사광 · 림라이트) Areas that brighten again inside a shadow, light along the edge of the body
Light · sparkle (빛 · 반짝임) Glowing effects, sparkles in the eyes, stars
Background · background FX (배경 · 배경 효과) The background behind the character, flecks of light floating over the background
Background fill (배경 메꿈) The character’s area filled with an estimate from an inpainting network (big-lama) and patch matching (0.56, directly above ‘Background’)
Outer glow (외곽 글로우) A neon band drawn around the character (only in pictures that have one)

Each part gets its own folder, and the folder holds that part’s base color · shadows · highlights (choosing per-stage folders in the settings turns this around: the parts sit inside [Base color] · [1st shadow] · [2nd shadow] · [Highlight] folders). If the program finds a face in the picture (also in PNGs with a transparent background), it names folders eyes · skin · hair (눈 · 피부 · 머리카락) from the colors around the face; the other folders are named by color (blue 파랑, black 검정 …).

What do I need?

How to use it

  1. Download illustracy-0.59i.zip.001 and illustracy-0.59i.zip.002 into the same folder and extract them: open .001 in 7-Zip (it shows illustracy-0.59i.zip inside; extract that), or join the parts first (Windows command prompt copy /b illustracy-0.59i.zip.001 + illustracy-0.59i.zip.002 illustracy-0.59i.zip, macOS · Linux cat illustracy-0.59i.zip.* > illustracy-0.59i.zip) and unzip. You get illustracy.html (the app, about 223 MB) and illustracy-help.html (the help); keep both in the same folder and open illustracy.html in a browser. It is split because of GitHub’s 100 MiB file limit.
  2. Drag an image onto the window, click the box at the top left to choose one, or paste a copied image with Ctrl+V. To try it first, click Sample image (예제 그림). It opens one of 10 pictures bundled in the app at random (never the same one twice in a row).
  3. Wait a few seconds and the layer list appears on the right.
    • Circle button: turn that layer on or off
    • Click a layer name: change the blend mode and opacity, save only that layer as an image file
    • Double-click a layer name: rename it
    • Eye button above the list: clicking the open eye turns all layers and folders off at once and the icon changes to a closed eye. Clicking the closed eye restores the state from before. After turning everything off, turning one layer on also turns on the folders that contain it, so only that layer shows; turning a folder on shows the layers inside it.
  4. Click PSD download (PSD 다운로드) to save a file you can open in Photoshop. Names, opacities, and on/off states you changed in the list are saved as they are.

Zoom the picture in the middle with the mouse wheel and drag to move it. The 도움말 (help) button at the top right opens illustracy-help.html from the app’s folder in a new window: a help page (in Korean) on how to use the program, how to fix wrongly split parts and how it works; your result stays as it is. If that file is missing, the app shows “도움말 파일이 존재하지 않는다. 확인 바란다.” (“The help file does not exist. Please check.”) and does not open anything (from 0.59h). To read only the help, download illustracy-help.html and open it. The theme switch next to it sets the screen colors to follow the system, light or dark. The choice is shared by the app and the help, and changing it in one updates the other if it is open. With the buttons at the top you can switch between Composite (합성, the split layers stacked) · Original (원본) · Selected layer (선택 레이어, only the chosen layer) · Difference ×8 (차이 ×8, places that differ from the original, emphasized 8×).

Fixing wrongly split areas

Automatic splitting sometimes leaves a background object on the character side, or sends part of the character to the background.

Your fixes remain when you change settings and split again, and are cleared when you open a new picture. Fixing does not change the stacked result, which stays identical to the original picture.

Renaming layers in old PSDs

PSDs saved up to 0.34 have the line-color layer named 색트레스. Drag such a PSD onto the window like a picture, or choose it with the top-left box (several at once also work), and a PSD with the layer renamed to 색 트레이스 is saved right away under the same file name. Pixels · layer order · folders · clipping stay as they are, and the file never leaves the browser. PSB files and files converted to 16 · 32 bits also work. If the file is already fixed, the program tells you there is no layer name to fix.

Settings

Setting Meaning
Processing resolution Shrinks the long side of the picture to this size for processing (default 2048px). Larger is more detailed but slower
Split large pictures at a reduced size · method · target size Off by default (method · size stay disabled while off). When on, pictures whose long side is larger than the target size (default 1200px) are split at a reduced size. Turning it on or changing the method shows that method’s explanation and verification results, and confirming splits again right away.
Reduce everything: all stages at the reduced size (the PSD too). Results are similar to the original size in about half the time.
Find only background · faces at reduced size: background · faces are found in the reduced picture and the layers are made at the processing resolution. Not recommended, since more pictures lose more of the character (11)
Line sensitivity Higher treats fainter lines as lines too
Maximum line width Dark areas thicker than this are treated as painted surfaces, not lines (0 measures the line width from the picture automatically; the chosen value and the measured width are shown next to it)
Line color Line art + color trace (default) / original line colors in one layer / a single black
Number of color clusters How many colors to split the picture into at first
Base color merge strength Higher groups more colors that differ only in brightness into the same part
Shadow threshold Higher sends faintly darkened areas to the shadow layer too
Maximum sparkle size Bright dots smaller than this are treated as sparkles (0 sets it automatically for the resolution)
Maximum number of parts Maximum number of part folders (default 32). Small parts that overflow go into the “small parts” folder
Split painting by part (채색을 파츠별로 나누기) When off, base color · shadows · highlights become one layer each, without separating parts
Folder layout (폴더 나누는 방식) Per-part folders (파츠별 폴더, default): in each of [Skin] [Hair] … folders, base color · 1st · 2nd shadow · highlight.
Per-stage folders (단계별 폴더): in each of [Base color] [1st shadow] [2nd shadow] [Highlight] folders, one layer per part (3.12). Available only when splitting by part; no clipping is used
Clip shadows · highlights to the base color Keeps shadows and highlights from going outside the base color
Automatic flat background separation Turns background detection on and off
Cutout model On by default (0.51). The character probability from the anime-character cutout model built into the app is added to the decision of the previous method (background-detection steps + neural-network assist) to decide the character; the rest goes to the background layer (3.5, 0.52). Pictures where the model finds almost no character (characters that are not human-shaped, for example) use the previous method’s decision as it is (0.53). From 0.54 the original model and a fine-tuned copy are both run, their probabilities averaged with weights 0.6 · 0.4, and the addition threshold set to 0.55. 0.55 uses a copy further trained to count effects (glow · particles · light rays) as background and averages the two probabilities 0.5 · 0.5. Outer glow and the small-pieces-on-background rule are not used then. Adds tens of seconds per picture and is not used on pictures with transparent pixels. Turned off, results are the same as 0.50
Neural-network assist On by default. At the end of background detection, of the color regions left on the character side, only those whose background probability, from a statistical score and a small neural network’s score combined in one formula, exceeds 0.8 are sent to the background (12 in 3.5). Turned off, results are the same as 0.48
Tilted picture (기울어진 그림) Off by default. Turn it on for pictures that are strongly tilted overall (more than 45°) or lying on their side: faces are searched at several angles (0 · ±30 · ±60 · ±90°) and names · character folders · background rules follow the most face-like angle. The chosen tilt appears in the result line as “tilt N°”.
On upright pictures it finds slightly fewer faces and slightly more fake faces (82 ground-truth pictures: real faces 29/35 → 26/35, fake faces 15 → 17), so it is better left off for pictures that are not tilted.
Pictures saved rotated, whose four corners are white · one color · transparent, are recognized without turning it on
Generate rough sketch · rough color Whether to make the two rough layers (rough 1 · rough 2), and in what color to draw them

Pictures that work well, pictures that are hard

Settings are chosen by measuring the picture

When you open a picture, the program measures the line (pen) width, and raises the maximum line width only for pictures whose lines the default value cannot hold. For example, for a small picture drawn with thick lines it widens the line detection window. Ordinary pictures use the default values as they are. The chosen value and the measured width appear next to the setting, like “Auto · 8 px (this picture 13 px)”, and moving the slider changes it to that value. The other settings were also tried as measured-from-the-picture values, but results got worse or did not improve, so they use defaults tuned on many pictures (7.5).


2. Principles

2.1 Follow the order in which artists stack layers

A cel-shading work file is usually stacked in this order.

From the top Layer What it does
1 Line art the lines, on top
2 Light · sparkle effects added brighter
3 Shading soft shading
4 Highlight surfaces brighter than the base color
5 Shadow laid over the base color, darker
6 Base color one color per part
7 Background at the bottom

Each layer has a different blend mode.

Illustracy splits the picture so that the resulting file follows this structure.

2.2 Solve backwards so that the stack gives back the original

Every blend mode is a simple formula. So if you know “the color of the original picture” and “the base color · shadow color”, you can solve backwards, pixel by pixel, what the remaining layers must contain for the original picture to come out.

Countless layer structures produce the same picture. Among them, we pick one an artist would plausibly make.

Because even the last remaining difference goes into a layer, stacking the split result gives back the original. The only error is the rounding when the file stores colors as integers 0–255.

2.3 A line is “something thin and darker than its surroundings”

Make a picture with the dark thin structures erased (filled with the bright colors around them) and compare it with the original: only the lines remain. Thick dark surfaces (black clothes) are not erased, so they are not picked up as lines.

2.4 Guess the color hidden under a line from its surroundings

The color that would have been painted under a line is guessed by filling inward, one ring at a time, from the color just outside the line. Knowing the color below, we can compute “at what opacity the line color covered it”, so even the soft edge of the line (anti-aliasing) is expressed as transparency.

2.5 The background is separated with seven cues

  1. Connected to the border: the background touches the picture border and continues without crossing the character’s outline.
  2. Many or few lines: characters and props are drawn with lines, while the background is often painted without lines.
  3. Sharpness: the background is often painted blurred as if out of focus, so dark, crisp lines are rare.
  4. Color difference: in pictures whose background is also drawn with lines, the background colors and the character colors are learned per picture to tell them apart.
  5. Crisp color edges: arms · hands · sleeves painted softly without lines are still in-focus objects, so the color around them changes sharply. A piece that went into the background because it has few lines is returned to the character if it is cut off by such an edge, attached to the character, and its color is on the character side.
  6. Faces: an anime-style face has two dark round eyes side by side with bright, even skin below. Finding a face tells roughly where the head and body are. Only places outside the head · body zones, clearly on the background side by color, and connected without a line to background already found are added to the background. The character is surrounded by its outline, so this does not spill into hair tips or sleeves whose color is close to the background. Conversely, if a clear face zone has become background, the character was swallowed whole by the background (pictures where the outline has the same color as the hair · background and cannot be seen), so background pieces inside that head · body zone are returned to the character.

  7. Enclosed by lines: a character is surrounded on all sides by outline · clothing folds · hair strands, so even white clothes · skirts · flat-colored hair with no lines inside soon hit a line in any direction. The background is open to the outside of the picture without lines in at least a few directions. A place blocked by lines in almost every direction is not treated as background even if lines are sparse. However, on white · flat backgrounds, the background seen between the arm and the body or between strands of hair (gaps) is also surrounded by outlines; such places have exactly the background color and only lines and background around them, so they can be told apart from the character’s white clothes (which touch shadows · shading around them) and are sent to the background.

The bottom border of the picture often cuts through the character (bust-up pictures), so it is not used as a starting point for finding the background.

2.6 Material boundaries have lines; shadow boundaries do not

In cel shading, a line is drawn between hair and skin, but not between the lit side of the hair and its shadow. So areas that touch without a line and share a color family are treated as shading of the same material, and areas blocked by a line as different materials.

In brush-painted pictures, brush marks · hair strands are sometimes picked up as lines. Such strands are drawn over one color, so the color on both sides of the line is the same. If most of the picture’s lines are such strands, the strands are not treated as material boundaries. In line-art pictures, materials with nearly the same color, such as pale skin and pale hair, are also separated by lines, so lines are treated as boundaries as they are.

2.7 The widest color within a material is the base color

When the colors within one material are split again into a few tones, the tone painted over the widest area is the base color. Tones clearly darker than it are shadows; clearly brighter ones are highlights. How many times darker the shadow tone is than the base color, per channel, is exactly the multiply color of the shadow layer.

2.8 Brightened areas are classified by position and shape

Areas that are brighter than the base color · shadow can explain are split like this.

2.9 The rough is guessed backwards from the finished picture

The rough no longer exists in the original picture, so it cannot be restored. Instead the program guesses backwards “what rough would the artist have drawn to end up with this line art” and draws two underdrawings. An artist first dashes off rough 1, then refines rough 2 over rough 1, and draws the line art over rough 2. The guess is built so that this order holds backwards too. Rough 2 holds almost every line the line art is traced from, and rough 1 is a cruder reduction of it to the big masses · long lines · marks such as eyes · mouths. The only things recognized are the big masses (the part map) and found faces (construction lines). What is not recognized, such as eyes · hands · props, is not turned into symbols (ellipses etc.) but traced from the line art.

2.10 Adapt to the picture only when the defaults cannot cope

An artist draws lines with the same pen, so counting line widths concentrates on one width. Measuring this “pen width” tells the size of the window that holds the lines, regardless of the picture size. However, the other stages of this program (such as the line density used by background detection) are tuned to the default window, so the value is changed only when the measurement clearly exceeds the default.


3. How it works

flowchart TD
  A[Input picture] --> B[Shrink to processing resolution]
  B --> C[Line art detection]
  C --> D[Restore color under lines]
  D --> E[Invert line art · color trace alpha]
  E --> F[Find background<br/>flat → scene stage 1 → cropped parts → stage 2 → margin → island return → color model<br/>→ return attached character parts → return swallowed characters → face-based widening → gaps]
  F --> G[Apply manual correction masks]
  G --> H[Clean pieces on the background · lines in the background]
  H --> I[Color clusters → regions → material grouping]
  I --> J[Tones per material → base color · shadow · highlight]
  J --> K[Part cleanup]
  K --> L[Per-pixel inversion<br/>split multiply · screen]
  L --> M[Line art layer · reproduction check]
  M --> N[Layer tree · rough]
  N --> O[Preview composite / PSD save]

3.1 Preparation

The picture is shrunk to the processing resolution (default long side 2048px), and the computation runs in a browser Web Worker (a computing thread separate from the screen). Where workers are unavailable, the computation runs on the screen side as is.

If the maximum line width is automatic (0), the picture is measured first. The pen width is found by counting the distribution of line widths along the center lines of thin structures darker than their surroundings, and if the default window chosen from the resolution cannot hold these lines, the window is widened (4.3).

3.2 Line art detection

Applying a closing (a maximum filter followed by a minimum filter) to the brightness image fills dark structures thinner than the line width with the surrounding bright colors. $\text{closing} - \text{original}$ (the black top-hat) is the depth of the line. Starting from pixels with a large depth, slightly weaker pixels are joined (hysteresis), and pieces that are too small are discarded. Dark blobs wider than the closing window, such as crossings where lines meet, are filled by continuing from the lines, but dark surfaces that continue beyond the line width (black clothes) are not filled.

Note — Why: A line is “darker than its surroundings and thinner than the pen”, so only dark structures below that width are picked (formulas in 4.3). How it works: Closing fills dark valleys narrower than the window with the surrounding light values, so closing − original (the black top-hat) keeps only thin dark structures. Hysteresis, starting from a high threshold and linking down to a low one, is the method of Canny edge detection. References: R15 Soille 2003 · R18 Canny 1986

Lines that are dark and whose depth drops a lot when slightly blurred are marked separately as crisp lines. They are used to tell character lines from blurred background marks when separating the background.

3.3 Restoring the color under lines

The lines and their 1px edge are set as “unknown pixels” and filled ring by ring from the outside with the average of neighboring known pixels (onion-peel inpainting).

3.4 Line art and color trace

The median color of pixels almost fully covered by lines is the base line color. For each pixel, $\text{original} = \text{line alpha} \times \text{line color} + (1 - \text{line alpha}) \times \text{color below}$ is solved for the alpha, and where the base line color does not reproduce the original (lines catching light, colored lines), the actual line color at that place is found separately and put into the color trace layer. The color trace is clipped to the line art, so it only changes the line color within the line art’s alpha.

Note — Why: Separating the line-art layer requires knowing how much the line covers each pixel (alpha) (formulas in 4.4). How it works: The standard compositing formula $O = aK + (1 - a)U$, opaque ink covering a share 𝑎 of the pixel, is solved for 𝑎. Knowing the line color 𝐾 and the color beneath 𝑈 fixes 𝑎, and the actual line color is found separately only where the base line color fails to reproduce the original. References: R1 Porter · Duff 1984 · R2 Smith 1995

3.5 Finding the background

Cutout model (0.51 – 0.55, default): the picture (at processing resolution) is shrunk to a long side of 1024 px, placed in the middle of a 1024×1024 frame and fed to the anime-character segmentation network built into the app. The per-pixel character probability $p$ (0–1) is brought back to the original size (4.5). The network was pretrained on many anime-character pictures and their cutouts, so it recognizes, by the shape of the body, parts the steps below cannot tell from the background, such as an arm rendered with a bright rim light and no outline, or hair touching the border. From 0.52 the steps below (1–13 and the neural-network assist) still run, and their decision $c$ (character 1 · background 0) is added: a pixel is character when $p + 0.4\,(c - 0.5) \ge 0.5$. Where the two agree, that is the answer; where they disagree, the model probability decides, at 0.3 (when the previous method says character) or 0.7 (when it says background). From 0.53, when the pixels the model calls character (probability 0.5 or more) are under 1% of the picture while the previous method calls 5% or more character (the model missed the character), that picture uses the previous method’s decision as it is instead of the addition. From 0.54 the model probability $p$ itself is the weighted average $p = 0.6\,p_0 + 0.4\,p_1$ of the original model’s probability $p_0$ and the probability $p_1$ of a copy of the same network trained further, and the addition threshold rises from 0.5 to 0.55, so that pixels with $p + 0.4\,(c - 0.5) \ge 0.55$ are character (for 12 epochs on 290 synthetic composites with characters pasted against the border, with pixel ground truth, and 292 AI-generated pixiv development pictures with the original model’s probabilities as soft targets; 0.54 in 12). 0.55 replaces the fine-tuned copy with one further trained to count effects (glow · particles · light rays) as background (from the 0.54 copy, 6 more epochs on 290 synthetic composites · 300 effect composites · 292 AI-generated pixiv pictures, the average of the six epochs; 0.55 in 12) and averages the two probabilities with equal weights: $p = 0.5\,p_0 + 0.5\,p_1$; the threshold and the fallback stay as in 0.54. This result is the background layer as it is. Outer glow (14) and small pieces on the background (15) are not applied with the cutout model; correction painting is. With the setting off, or in a browser that cannot run the model, only the steps below are used.

Several methods are used in turn, and the backgrounds found are merged. If a thin border line (a frame) runs around the edge of the picture, background detection cannot start from the border, so while the background is being found, the outside up to the frame’s thickness is filled with the color just inside it (4.5). This solved pictures with a thin border, such as character sheets and cards on white backgrounds, where the background could not be found. For pictures saved tilted so that the canvas grew and the four corners are filled with one color (white, etc.) or transparency (rotated canvas), the fill is recognized, the fill and 3px around it are filled with the value of the nearest picture content only while the background is being found, and at the end the fill is set as background (4.5, 0.37). Even when the corners are transparent, the picture is not treated as a transparent-background picture, and the background is searched for. The straight edges of the fill also tell how many degrees the picture is tilted, so faces are searched for at that tilt (4.5) and the bottom-border · upper-corner rules follow the actual bottom of the picture as determined by the faces.

  1. Flat · gradient background: starting from the most common color on the border, it spreads to similar colors without crossing lines. It also follows gradients whose color changes gradually along the border. It spreads first from the top · left · right borders, and places reached only from the bottom border are set as background only when they are almost one color (white clothes · skirts reaching the bottom edge of the picture have shading even if they are as white as the background). The threshold for the color change between neighboring pixels was tuned on pictures with a long side of 1200px, and is reduced in proportion to size for larger pictures (because the color change across the same edge is split over more pixels; the same holds for margin widening in 5). If the reduced threshold finds too little background, it is redone with the original threshold. A floor whose color differs from the wall (a line-drawn room) is looked for separately (4.5, 0.40). A band of one color other than the main background color that touches the left, right and bottom borders and whose top edge is a straight line (where wall and floor meet) is added to the background. Clothes · hair crossing the bottom edge of the picture have a curved top edge like a shoulder line and are not taken. When the character hides much of the floor so that the line where wall and floor meet shows only in places, the line passing through the most visible columns with almost no column sticking out above it is tried instead (4.5, 0.43). If the background found is bright and almost one color (white backgrounds · pale flat backgrounds), narrow gaps are closed and it is filled once more. Within 2px (for a 1200px long side) of lines and edges where the color changes sharply, the fill is not allowed through, so it does not get inside white clothes · pale hair through breaks in a pale outline, and after filling it is restored toward the edges by that much (4.5, 0.34).
  2. Scene background stage 1: places with low line density (line pixels widely blurred) that are connected to the top · left · right borders. However, places enclosed by lines (15 or more of 16 directions blocked by a line within 25% of the long side, 4.5) are excluded even if lines are sparse. The widely blurred line density drops as low as the background in the middle of lineless white clothes · skirts · flat-colored hair, but the degree of enclosure does not drop. Pictures where excluding enclosed places leaves the scene background below the area criterion (5 below) (pictures drawn densely with lines over the whole screen) are redone through 1–5 without excluding enclosed places. The scene background does not cross places at the edge of the flat background (1 above) where the color changes sharply (4.5, 0.37). When black stockings · black clothes · dark hair, whose outline has the same color as the clothes and so is not picked up as a line, touch a white background, the scene background following places with few lines used to get right inside them. Even without a flat background, it does not take a step where the color changes sharply into a dark place (lightness $L^*$ 35 or less) (4.5, 0.42). This stops blurred scene backgrounds from spreading into black legs · clothes. This blocking is widened to two steps back (3px) and the scene background is searched once more; places that only the first scene background took (except the flat background · gaps) are kept on the character side when the background stages end (4.5, 0.43). This stops the scene background from getting past black clothes · legs whose soft edge is painted more than 2px wide.
  3. Picking out cropped character parts: walking along the border, a piece wedged between background pieces with a crisp outline in between, and clearly different in color from its neighbors on both sides, is taken as a character part cropped by the frame (hat, sleeve) and returned.
  4. Scene background stage 2: it widens into places with no crisp lines but dense faint marks (blurred shelves, writing, patterns).
  5. Margin: the margin around the character is widened, without crossing lines, as far as the color continues smoothly. It does not widen into places enclosed by lines. Then swallowed characters are returned (8 below), and it is used as scene background only if the remaining area is 2–90% of the picture. Returning islands in the scene background (4.5, 0.38): in pictures with a flat background (1 above), the program checks whether each lump of the scene background whose color differs from the flat background (an island) touches the top · left · right borders. An island that does not touch them is a place the scene background entered only through the flat background — lineless clothes · legs · hair that leaked out through weak edges at the flat background’s edge. Such an island is returned to the character if it is connected to a large lump on the character side (at least a quarter of the largest lump) or contains a face. Text · emblems · sparkles floating apart from the character form small lumps and remain in the background.
  6. Color model: for pictures whose background is also drawn with lines (fireworks, food stalls, graffiti), the picture is split into small color regions, the color distributions of “the background found so far” and “the character core dense with crisp lines” are learned, and regions are separated (graph cut in the GrabCut style). It is skipped for pictures whose colors overlap a lot and for pictures whose background was already fully found, and it only adds to the background found so far, never removes. Regions enclosed by lines are not added.
  7. Returning attached character parts: the background found in 1–5 (before returning in 8 below) is cut at crisp color edges and lines into pieces. Pieces that do not touch the top · left · right borders, have 80% or more of their perimeter touching the character, and whose color is closer to the character than to the rest of the background are returned to the character (arms · hands · sleeves · wings painted without lines). The color model is computed with the background before returning, and the returned parts are also removed from the background added by the color model. A piece touching the border is also returned if more than half of it lies in the head · body zone of a sure face (4.5), its area is at most 6% of the whole, 75% or more of its perimeter touches the character, and its color is closer to the character (hair tips · sleeves · arms cut off by the frame, 0.41). Dark character parts (4.5, 0.43): black hair · skirts · legs on a dark background have outlines as dark as the background, so they are not picked up as lines and the flat · scene background fills take them whole. So the same background is also cut at faint color edges ($\Delta E$ 5), and pieces that do not touch the border, are dark (mean $L^*$ 35 or less) and have colors rare in the border-side background are returned repeatedly when they attach to the character (or to pieces already returned; legs → skirt → body). Dark background objects such as furniture · floors sometimes come back too, but with character loss weighed 3 times it is still a gain on AI-generated pictures (0.43 in 12).
  8. Returning swallowed characters: if more than a quarter of the face zone or the crown cell of a high-scoring face (4.5) is background, the background has swallowed whole a character whose outline cannot be seen (black hair · clothes whose outline has the same color as the hair, dark outlines on a dark background). The background is cut at crisp color edges and lines, and pieces that lie at least half inside that face’s head · body zone, do not touch the top · left · right borders, and whose color is rare in the border-side background are returned to the character. If a swallowed face still remains (hair almost the same color as the background), it is split once more with fainter color edges, and if it still remains, with even fainter edges and finer color bins (0.34). This is done twice: in the scene background stage (after 5) and after the color model (after 7). Even if a face is intact, background pieces that lie at least half inside the body zone below it are returned first (white clothes · skirts on a white background connected with the background down to the bottom border). Here the color does not need to be rare, but pieces whose color is far more common in the rest of the background than in the character (background seen between a skirt and a sleeve, text boxes) are kept.
  9. Face-based widening: when anime-style faces are found in the picture (4.5), the places where the head and body should be for each face are set as “probability of being character”, and the same region graph cut as the color model is run again. Of the regions that end up on the background side, only those whose color is clearly on the background side, that are outside the head · body zones, and that connect to background already found only through lineless boundaries (at least half of the shared length is not a line) are added to the background. Parts returned in 7 · 8 and regions enclosed by lines are not taken, and background already found is never removed. It is skipped for pictures where no face was found. Whether the color is on the background side is checked both with the relearned color distributions and with the initial ones (head · body zones vs background already found) (0.42), because while relearning, rarely seen dark colors (black legs · clothes) drifted to the background side and often became sure background. It is also skipped if the background already found is almost one color (white backgrounds · flat backgrounds, 60% or more of background pixels similar to the median color). A background made of two colors, wall and floor, compares the wall side and the floor side each with its own median color (0.40). Such backgrounds were already almost fully found by 1–8, and widening took same-colored character parts (white dresses, black hair) more often (0.27 in 12).
  10. Background seen between character parts (gaps): if the background found is almost one color (white backgrounds · flat backgrounds), pieces left on the character side whose color is almost the same as the background (within $\Delta E$ 5) are examined. Pieces surrounded only by lines · background (10% or less of the perimeter touching other paint), outside the head zone of faces, and at most 2% of the picture are the background seen between the arm and body · between strands of hair · between the legs, so they are sent to the background. Such places have outlines on every side, so 1–9 cannot reach them, and they were deliberately protected because they are enclosed by lines (0.31). White clothes · white hair touch shadows · shading and remain. It is skipped for pictures where qualifying pieces exceed 5% of the character’s paint (white-paint monochrome line art, white clothes on a white background) and for pictures where 30% or more of the character-side pixels are lines (particles · halftone dots picked up as lines) (4.5).
  11. Rectangular background objects drawn with lines (4.5, 0.43): finally, axis-aligned rectangular pieces enclosed by lines that remain on the character side (window panes · shelves · books · frames) are sent to the background when at least half of their surroundings is background, they lie outside the faces’ head · body zones, and they do not touch the border. In a window made of same-colored panes, panes hidden by the character so that they are no longer rectangles are also sent if they have the same color.
  12. Neural-network-assisted removal (4.5, 0.49 · 0.50, setting “Neural-network assist”): finally, each color region left on the character side that covers at least 0.2% of the picture is put to two judges. A statistical score over 45 region features (color · position · face-relative coordinates · surroundings · hair texture) and the region mean of the character score from a small convolutional neural network, written and trained from scratch for this program and looking at the whole downscaled picture, are combined in one logistic regression formula, and the region is sent to the background only when its background probability exceeds 0.8 (0.50). Line pixels are left as they are, and nothing is returned to the character. 0.49 removed only when each judge passed its own threshold. Combined in one formula, a very sure judge can remove even when the other is a little less sure, and vice versa, so about the same amount of remaining background is removed while fewer character regions are removed by mistake (0.50 in 12).

Faces are also searched for in pictures where the background was not searched (background separation off, transparent-background PNG) or not found, and are used for part names and character splitting. For transparent-background pictures, transparent places are treated as background and the “face-like position” condition of 4.5 is checked.

When “Find only background · faces at reduced size” of the setting “Split large pictures at a reduced size” is on, 1–9 and face finding run on the picture with the long side reduced, and the background found · returned parts · faces are enlarged back to the original size (4.5).

Then the corrections the user painted (send to background / return to character) are applied with priority over the automatic decisions. For pictures where no background was found, a background layer appears only once send-to-background is painted.

Filling the background behind the character (0.56)

The ‘Background’ layer with the character removed is transparent where the character was. 0.56 adds a ‘Background fill’ layer (배경 메꿈) estimated for that area, directly above the ‘Background’ layer inside the ‘Background’ group (below glows and background FX; setting “Fill the background behind the character”: network + patches (default) · patches only · off; off, the layer is absent and everything else is the same). The fill layer covers only the character’s area plus a narrow band around it (1/160 of the long side, 3–12 px) and is transparent elsewhere, so the background layer is left as it is, yet the two together look like a background that never had the character. The band is covered because a few pixels of the character’s outline and blended colors remain at the edge of the background layer. At this stage the character is already gone, so unlike a photo editor’s generative fill the program never has to invent “anything”: it only has to continue the background. So it uses a background-only inpainting network trained on scene photos, takes texture only from the remaining background, and spends the remaining computation on the seam where the filled area meets the original background (formulas in 4.5). ① Network estimate: the picture with the hole blanked and the hole mask are reduced to a long side of 512 (averaging known pixels only), placed on a 512×512 canvas with reflection padding, and fed to the bundled inpainting network big-lama (18 Fourier-convolution ResNet blocks, 50.9 M weights, trained on Places scene photos, Apache-2.0). Its Fourier convolutions see the whole picture at once, so distant structure (window frames, floor boards, trees, patterns) is continued across the hole. The output is cropped and upsampled (bicubic) to full resolution: the initial estimate G. The model runs in the browser’s ONNX Runtime (WASM, one thread); no internet is needed. ② Original texture (PatchMatch): at full resolution (long side ≤ 1024) hole pixels start at G; for every 7×7 patch the most similar known patch is found (propagation and random search, 2 rounds × 3 sweeps) and voted. Final color = w·patch + (1 − w)·G with w = exp(−max(0, D − τ₀)/(2·max(med D, τ₁))) (τ₀ · τ₁ = the distances of an RMS of 0.02 · 0.05 per channel): where a good match exists (fully, when the distance is at noise level) the original texture is used, where none exists (structure absent from the known background) the network estimate stays. An absolute threshold is needed because with the median alone, on flat pictures such as a white background, a distance at JPEG-noise level counts as a bad match and the network’s gray noise would remain. ③ Seam membrane: on the one-pixel ring of known pixels just outside the hole, the difference between what the fill “predicts” there (patch vote mixed with G by the local weight) and the actual pixels is the boundary value of a harmonic membrane (Laplace = 0 inside the hole, solved by multigrid) added to the fill, the same formulation as Poisson seamless cloning. The color and brightness step at the seam becomes zero and spreads smoothly inward; texture and lines are untouched. “Patches only” is the method developed first for 0.56 without the network (halving pyramid → diffusion at the coarsest level → coarse-to-fine patch matching → regularity gate → distance-graded blend); it finishes in 1–5 s but cannot reconnect broken structure. The weights are stored as fp16 (102 MB), not 8-bit: per-channel 8-bit quantization flipped the colors of flat backgrounds (a 1% weight perturbation changed the output by up to 0.6–0.8 against fp32) and was unusable, while fp16 differs by at most 0.007–0.03. This is why the app file is about 205 MB (0.55: 80 MB), and because of GitHub’s 100 MiB file limit the repository holds it as a split archive (illustracy-0.56.zip.001 · .002, section 1). The color difference from the synthetic ground truth re-rendered without the character (MAE, 0–255) is network + patches 2.82 (scene 2.9 · bokeh 9.0 · stripes 0.4 · posed synthetic 1.9), network only 6.08, patches only 3.94 (scene 18.3), left white 84.20, and the MAE in the seam band (8 px from the boundary) is 1.96 · 3.99 · 2.91 (11.17). The naturalness grading of 120 unseen AI-generated pixiv pictures (8 graders × 15, 0–100) is network + patches 59.2 · network only 60.2 · patches only 44.7. None of this knows the meaning of hidden objects, so nothing the character hid is invented.

3.6 Cleaning pieces on the background and lines in the background

3.7 Region splitting and material grouping

The picture with the color under lines restored is split into a few colors (default 18) with k-means in Lab color space, and connected lumps of the same color become regions. Regions that are too small or thin (edge bleeding) are discarded and filled from nearby regions. Places set as character by background detection that are more than 2.5px away from the background do not take a background label and are filled from nearby character regions (on textured paper · fine brush strokes, colors broke into small pieces so wide paint was discarded whole and background labels spread in, turning the character into background). Background sent as gaps (10 in 3.5) lies in the middle of the character, so its label can spread far into the character along lines. Line · crumb pixels whose nearest background is a gap get a nearby character label instead of the background label if they are more than 2.5px away from the gap (both regions and tones, 4.6). For each pair of touching regions, the boundary length blocked by lines and the length open are counted to build an adjacency graph, and if the boundary is mostly open and the colors are in a shading relationship of the same material, they are grouped into one material. In pictures where brush strands are picked up as lines (more than half of the lines have the same color on both sides), line boundaries with the same color on both sides are counted as open boundaries (4.6).

3.8 Tones and base color

Each material is split again into tones (up to 6) with k-means. The bright-side average of the widest tone (the brighter one if areas are similar) is the base color. In a colored material whose widest tone is a shadow (cloaks · clothes · hair painted mostly in shadow), the brighter tone from which that shadow can be made by multiply becomes the base color. Same materials separated by a line (front hair / back hair) have their base colors matched to each other. Strongly colored tones inside a material whose base color is white · gray are not that material’s shading but another material (a red tail joined to a white body without a line, an orange pattern on white fur), so they are split off and given their own base color.

3.9 Part cleanup

The number of parts is reduced, like a real work file.

  1. Nearly identical base colors become one part
  2. A darker surface across a line is merged if it is plausible as the shadow of the brighter part (a pale purple strand next to white hair). A shadow cannot be brighter than the lit surface in any channel, and if the lit surface has a hue, the shadow must be near that hue (apricot skin next to gray clothes, pink skin next to cream clothes are not merged)
  3. Small pieces go to a neighboring part of similar color. If no part has a similar color, only very small pieces (under 0.01% of the picture) are merged into the longest-touching part; larger ones such as pupils · hair ties · buttons are kept separately with their own base color (into the small parts folder of 4 if the number of parts is exceeded)
  4. If parts exceed the maximum number of parts, the smallest are merged into a neighbor of similar color first, and if there is no similar neighbor, into the small parts folder
  5. Naming: for each character face, the face frame finds the parts occupying the bridge of the nose · cheeks (skin), the bangs (hair, above it if the forehead is exposed), and the two eye cells (eyes), and gives them those names (4.8). The remaining parts are named by the color name of the base color (black, white, blue …). “Skin” is given only to parts confirmed by a face; other skin-toned parts are called “beige · apricot” even in pictures where no face was found.
  6. Splitting off detached hair pieces: a part collects the same base color from the whole picture, so skirts · legs · sleeves · props · background pieces with the same color as the hair are also in the “hair” part. Only places connected along the same part from the head zone of a face, and pieces close to it (within 2.5 times the distance between the two eyes of the face), stay “hair”, and the rest are split off into a separate part of the same color (color name). Long hair · twin tails broken by arms · sleeves stay because they are close, while ties · ribbons · legs in the middle of the body are split off even if close. Skin is not split, since detached skin pieces are mostly real hands · arms · legs. The layer pixels do not change; only the part layers are divided (4.8).

3.10 Shadow levels and highlights

Tones clearly darker than the base color are shadows. The shadow tones are lined up by brightness and split into 1st / 2nd where the gap opens wide. One multiply color is chosen per level (the 2nd is a color multiplied once more on top of the 1st). Tones clearly brighter than the base color are highlights (normal layer), and small tone pieces that are almost white and much brighter are sparkle candidates.

3.11 Inversion: splitting shading and light

For each pixel, the color painted up to $\text{base color} \times \text{1st} \times \text{2nd} \to \text{highlight}$ is compared with the restored color under the lines.

Note — Why: The remaining difference between the color made by base and shadow layers and the original goes into multiply and screen layers, so combining all layers restores the original (formulas in 4.9–4.11). How it works: Shadows are multiplies, so the base is multiplied by the first and second shadow colors in turn, and highlight tones cover it with their color. The remaining darkening is found by inverting multiply, brightening by inverting screen. References: R1 Porter · Duff 1984 · R3 ISO 32000-1 2008

Layers with almost no content are not made (for example, the gradient in cel-shaded pictures). Their share is left in shading · light.

3.12 Line art layer, check, layer tree, rough

After making the line art · color trace layers, all layers are composited again with the exact 8-bit values that will be saved and compared with the original (reproduction PSNR, shown at the top right of the screen). The layers are grouped into the tree of a work file, and two roughs are made and hidden in a [Rough] folder at the very top.

[Rough]
  Rough 2 (refined)               normal 45%, hidden
  Rough 1 (concept)               normal 45%, hidden
[Character]
  [Line art]
    Color trace                   normal, ↳clipping
    Line art                      normal
  [Effects]
    Sparkle                       screen
    Light                         screen
  [Painting]
    Rim light                     screen
    Reflected light               screen
    Shading                       multiply
    Gradient                      multiply
    [Skin] [Hair] [Purple] …      part folders (eyes · skin · hair, the rest named by base color)
      Highlight                   normal, ↳clipping
      2nd shadow                  multiply, ↳clipping
      1st shadow                  multiply, ↳clipping
      Base color #7B56B5          normal
    [Small parts (n)]             small parts with no neighbor of similar color
    Silhouette (for selection)    normal, hidden
[Background]
  Background FX                   screen
  Outer glow                      normal (only pictures with a neon band around the character)
  Background                      normal

For opaque pictures with no background, [Line art] · [Effects] · [Painting] come at the top without the [Character] · [Background] folders.

Choosing per-stage folders under the setting Folder layout (0.48) turns the part-folder section inside [Painting] around as below. Each stage folder holds one layer per part, base color layers carry the color code after the name, and small parts with no neighbor of similar color are gathered into [Small parts (n)] inside each stage folder (a stage folder with no parts is not made).

  [Painting]
    Rim light · Reflected light · Shading · Gradient   (as above)
    [Highlight]                   one per part (normal)
    [2nd shadow]                  one per part (multiply)
    [1st shadow]                  one per part (multiply)
    [Base color]                  Skin #F2D3C4, Hair #7B56B5 … (normal)
    Silhouette (for selection)    normal, hidden

Since base colors and shadows sit in different folders, no clipping is used. Parts do not overlap and each layer is painted only where its part is, so for opaque pictures the result of stacking the layers again is the same as with per-part folders (the app’s composite is pixel-identical on the example picture · an AI-generated picture · a transparent-background picture · two synthetic pictures with several characters, and psd-tools re-renders of the two layouts agree at PSNR 99 dB). Transparent-background pictures with semi-transparent edges come out the same as per-part folders with clipping off, so they differ from clipped per-part folders only in the semi-transparent edge pixels (0.83% of the whole on a test picture with blurred edges).

With several characters, instead of [Character], folders [Character 1] · [Character 2] … are made from the left, each containing the same [Line art] · [Effects] · [Painting] as above. Characters are determined from the faces found. Faces of similar size and height that lie outside each other’s body zone are taken as characters (fake faces found on knees · shoes are left out), and pixels are divided starting from each face’s head · body zone, using outlines as walls (4.8). The composited result of the layers is the same as with one folder.

3.13 Preview and PSD saving

The preview stacks the layers with the blend modes of the browser canvas (multiply, screen) and imitates clipping the same way Photoshop does. The PSD is written directly without external libraries (RGB 8-bit, folders, clipping, blend modes, Korean layer names, merged image).

3.14 Manual correction


4. Algorithms and formulas

This section has many formulas, so it is split into four documents. GitHub renders only about 1,200 formulas per document, so with everything in one document the later formulas would not render.


5. Correspondence with the physical world

The layer structure of a picture imitates the properties of light and paint, and Illustracy’s computation stands on the same correspondence.

Physical phenomenon Picture layer Computation
Absorption of light: light passing through a color filter (cellophane, glazed transparent paint) is reduced per channel by its transmittance, and two filters give the product of transmittances (Beer–Lambert law) Shadow, shading, gradient (multiply) $x \cdot g$, 1st shadow multiplied by 2nd shadow = two filters
Adding light: switching on another lamp brightens without exceeding white. The name comes from projecting several slides onto one screen together, and the formula has the same form as “the probability that at least one of two lights arrives” Light, sparkle, rim light, reflected light (screen) $1 - (1 - a)(1 - b)$
Covering: opaque ink covers 𝑎 of the pixel’s area. The soft edge of a line (anti-aliasing) is a partly covered pixel Line art, base color, highlight (normal) $aK + (1 - a)U$
Ink lines: thin material that absorbs light Line art thin dark structure = $\text{closing} - \text{original}$
Form shadow and occlusion: surfaces facing away from light are dark, and folds · contacts are darker as even ambient light is blocked 1st / 2nd shadow split tones into two levels at a brightness gap
Specular reflection: smooth surfaces (eyes, hair, metal) reflect the light source small and bright Highlight, sparkle small, very bright pieces, white top-hat
Backlight and grazing angles: at an object’s edge the surface is almost parallel to the line of sight, so light from behind looks strong (Fresnel reflectance grows at grazing angles) Rim light weighted by distance from the silhouette
Indirect light: light bounced off the floor · surroundings brightens the inside of shadows again Reflected light brightening inside shadow pixels
Distance and diffuse reflection: on wide surfaces, illumination changes slowly with distance · angle Gradient low-frequency component (erosion + blur envelope)
Depth of field: out-of-focus objects spread by the circle of confusion and look blurred Background painted blurred presence of “crisp lines” (lines that weaken a lot when slightly blurred)
Human color perception: the eye is most sensitive to green, and feels color differences as brightness and hue All color comparisons brightness weights 0.299 · 0.587 · 0.114, Lab and $\Delta E$ (about 2.3 is a just-noticeable difference → part merge threshold 2.5)

Note — Why: Mapping layer blend modes to physical phenomena explains why each blend formula fits its layer and predicts how editing the layer will look. How it works: Multiply $x \cdot g$ is light passing a filter of transmittance 𝑔, and two filters multiply their transmittances (under the Beer–Lambert law absorbances add, so transmittances multiply). Screen $1 - (1 - a)(1 - b)$ has the form of “the probability that at least one of two lights arrives”, so it never exceeds 1. Normal blending $aK + (1 - a)U$ is opaque ink covering area 𝑎. 2.5 is a threshold matched to a just-noticeable CIELAB difference (about 2.3). References: R12 Beer 1852 · R1 Porter · Duff 1984 · R3 ISO 32000-1 2008 · R8 Mahy et al. 1994

Multiply · screen are computed on gamma-encoded sRGB values, like Photoshop. It is not physically exact linear-space compositing, but Photoshop composites a PSD with the same formulas when it is opened, so the original is reproduced as it is. Only color comparisons (k-means, $\Delta E$) are done in Lab space, after linearization.


6. System (program structure)

6.1 Files

The program contains the following.

Component What it does
Screen settings on the left, preview in the middle, layer list on the right
IllustracyCore() the whole splitting algorithm. Closed in one function, so it moves to a worker as is via toString()
Cutout-model worker (0.51) unpacks the 8-bit cutout model and ONNX Runtime Web (WASM), stored in the app as base64, on first use and runs them in a separate worker; makes a character map per picture and hands it to the core, reusing it for the same picture
Worker connection runs the core in a Blob URL worker and receives the result layers’ buffers without copying (transferable). If it fails, runs on the page
PSD.write() PSD file writer
PSD.rename() fixing layer names of PSDs saved by older versions (4.15)
Compositor preview, difference view, PNG save, PSD merged image
Correction tools send to background, return to character, loop, undo stack
Sample picture one of 10 pictures bundled in the app (AI-generated pixiv pictures; sources in the 0.59i entry of section 12), chosen at random (never the same one twice in a row). Up to 0.59h, a cel-shaded picture drawn directly on a canvas
Help a page on usage · principles · formulas · validation (illustracy-help.html). From 0.59h it is no longer inside the app file but sits next to it; the help button in the header checks that the file exists and opens it in a new window (if not, it says so and stops); the help’s own button closes that window and returns to the app (a help page opened on its own opens illustracy.html)

6.2 Data flow

input picture ─(shrink to processing resolution)→ ImageData
  ─(cutout model on: cutout worker)→ character map (0/1) ─(as option cutMask)
  ─(sent to worker)→ IllustracyCore.process
  → per-channel Float32Array (R, G, B, A, restored color U, line alpha, line color, masks …)
  → buildLayers: per layer, an RGBA Uint8ClampedArray cropped to the rectangle with content { x, y, w, h, data }
  → layer tree + statistics (time, number of parts, reproduction PSNR)
← buffers moved from the worker to the page
  → a canvas per layer → preview composite / layer list / PSD writing

6.3 Layer objects

{ name, kind, blend, opacity, visible, clipping, x, y, w, h, data }   // pixel layer
{ name, kind: 'group', group: true, blend: 'pass', open, children }  // folder

kind is line, trace, flat, shadow, shadow2, highlight, gradient, shade, reflect, rim, effect, sparkle, bg, bgfill (0.56), bgfx, glow, silhouette, rough. The correction tools and the PSD writer recognize a layer’s role by this value.

6.4 State and undo

6.5 Determinism

All random numbers use a mulberry32 generator with fixed seeds (12345 for the main process, 777 for the region graph shared by the color model · face stages). Face finding uses no random numbers. The same picture with the same settings always gives the same result, and fixing one stage does not disturb the random number streams of other stages.


7. Issues and fixes

Problems that came up while verifying with AI-generated pictures during development, and how they were solved.

Note — Why: The numbers in this section (𝑝, intervals, counts better · worse) are computed with the formulas of 11.1 rather than restated for each problem. How it works: Intervals for shares are Wilson intervals, comparisons of the same pictures under two versions use McNemar or sign tests (binomial tests on the discordant pictures only), and small tables use Fisher’s exact test. The grading criteria themselves (no major loss and so on) are in 11.1 and 11.15. References: R56 Wilson 1927 · R72 McNemar 1947 · R63 Fisher 1922 · R85 Dixon · Mood 1946

7.1 Split quality

Problem Cause Fix
Light purple shadow strands next to white hair became separate parts the shadow surface is separated by lines, so the “lineless boundary” rule does not apply merge when the darker surface across the line is mostly surrounded by the lighter part and the brightness ratio · saturation are in a shadow relation (2 of 4.8)
Parts multiplied to dozens in pictures with many colors, every small color piece became a part maximum number of parts + merging only into neighbors with similar colors + the “small parts” folder
Hair grain · bright skin surfaces were picked up as sparkles only the size of the brightening was looked at only pale colors that stand out from their surroundings in the picture itself are accepted (white top-hat + minimum channel condition)
Small pictures drawn with thick lines had almost no lines found (12px lines at 800px: 1% of lines found) the line detection window was set by resolution only measure the pen width from the picture and widen the window when the default is too small (4.3). 92% on the same picture
Colors of 1–2px gaps between lines were off inpainting mixes from the lines on both sides solve the line alpha by least squares, and reproduce mismatched places exactly with a minimum-alpha color trace
Rough lines broke into dashes (unusable as a guide for line art) faint or thin lines become small after blurring and break wherever they fall below the final threshold. Small marks from color boundaries and sparkle crumbs also remained as dots lay the center line of each line under the strokes at a minimum darkness, and remove crumbs and color-boundary marks not connected to center lines. The over-drawn pencil feel stays. Pieces per 1000px of line 16–35 → 3.6–5.4
Changing the rough to an even single center line looked artificial, like a machine tracing outlines a person’s rough varies in width · darkness from line to line and is smudged by drawing over several times the even single-line approach was dropped and reverted to soft strokes following the original line width + drawing three times (only the break prevention added). 0.44 uses center lines again but draws each stroke differently (next row)
(0.44) The rough did not look drawn by a person: a stroke was not drawn two or three times, staircases showed, and there was no pen pressure it was a blurred line warped by noise and stacked three times, so it had no strokes, and per-pixel random grain made the edges jittery. Width followed only the line width, so stroke ends did not taper center lines are split into strokes of a person’s drawing length, each drawn 2 or 3 times slightly off, with pen pressure thinning · lightening the ends and coverage-based anti-aliasing (4.14). Length · width · darkness differ per stroke, so it does not become an even single line. Blind paired grading, overall: 51 : 9 on the 60 pictures, 34 : 6 on 40 unseen pictures (0.44 in 12)
(0.45) Rough details broke down: eyes · mouths · fingers · ribbons turned into lumps · bead-like knots Short face strokes (eyelash tips · nose · mouth corners) were trimmed as spurs, thick lines were drawn at their full width so small shapes became lumps, and shifted later passes covered small shapes In face areas small strokes are kept and drawn darker with less wobble, the original lines are laid underneath at 45%, and the stroke radius is capped at 2.5px (4.14). Artist-style reference roughs on 18 crops: F 0.714 → 0.740; blind test on 40 unseen pictures, detail 36 : 0 (0.45 in 12)
(0.46) The rough looked traced from the line art: not an underdrawing the artist would have drawn before the line art, but a copy down to signatures · lettering · halftone dots · background texture The center lines of the line art were redrawn Instead of following the line art, guess backwards “what rough led to this line art”: two roughs that first block in big masses · face construction · features (2.9, 4.14). In a blind test on 40 unseen pictures rough 2 beat 0.45 on plausible-origin 29 : 11 and drawn-by-hand 34 : 6 (0.46 in 12)
(0.47) Rough 2’s form broke down: eyes became glasses-frame rings · flower-like clusters of circles, skirts · arms split into the background and the background composition were missing, and thin, chopped lines blurred faces · hands Irises were “recognized” and replaced by ellipses (ellipses around whole eyes · highlight ellipses), the line-art map holds only character lines, and strokes lifted at every bend with very thin ends Recognize only the big masses and found faces and trace eyes · hands · props from the line art (painted shapes by their contour), redraw outlines from the line art where it exists, add the long brightness edges of the background faintly, and lift the pencil only at sharp bends with slightly thicker, darker strokes (2.9, 4.14). In blind tests on four rounds of unseen pictures (40 each), each fix beat the previous version, and the last round beat the round before on form 12 : 0 (0.47 in 12)
(0.57) Rough 2 became meaningless tangles of lines (a net): on about 17% of unseen pictures faces · clothes were covered by a dense mesh, hard to believe as the rough the line art was drawn over Every pixel with line alpha ≥ 0.25 counted as line art, so masses of fill · shading · texture got in, thinning those masses gave a net of center lines (a cell mesh), and faces were redrawn several times over Only parts at least 0.15 darker than their surroundings count as lines (local contrast); small holes are filled and solid masses keep only their outline; each line is traced once with a G-pen matched to the pen width measured per picture (pressure · stabilizer, 2.9, 4.14 step 11). 18 artist-style reference crops: F 0.728 → 0.742 · recall 0.825 → 0.845 (14 : 4, $p = 0.03$)
(0.58) Small eyes in rough 2 were drawn like square boxes The middle of a thick eye rim · lash (5–6px) is about as dark as its surrounding mean, so local contrast with one window kept only its two edges Also count as line what is darker than its surroundings in a window twice as wide (two window sizes), so thick lines become one center line (4.14 step 11). Blind test on 240 unseen pictures (11.18)
(0.59) Rough 2’s even thin lines of constant width · darkness were judged “mechanical” · “like a trace” (0.58 lost to 0.56 in a blind test on 240 pictures, 65 : 153) The G-pen stroke had constant ink darkness and only its width followed the original line, so there was no variation within a stroke and no difference in importance between lines A pressure curve per stroke, darkness from line importance, overstrokes and stronger stabilization (2.9). On 240 unseen pictures 0.59 : 0.56 = 127 : 71 ($p = 8.4 \times 10^{-5}$, 11.19)
(0.59e) Rough 2’s eyes · mouths dropped out or left only an outline ring (“missing form”) Tracing only lines darker than their surroundings missed eyes · mouths over dark irises, and when caught, hollowing solid blobs left only a ring. The cleanup of short pieces outside faces also removed lone strokes such as glasses frames · fingers Inside eye · mouth boxes the line art counts as line as is and blobs become one center stroke; the short-piece cleanup applies only to pieces running alongside another line (2.9). 15 expert-role graders: 0.59e : 0.56 = 100 : 33 ($p = 5.0 \times 10^{-9}$, 11.19)
“Hair” names from faces were also put on black dresses · white clothes parts are split by color, so clothes of the same color as the hair are one part colors covering 25% or more of the torso center are not called hair. Colors that received both the skin vote and the hair vote are not named either
Choosing hair around the bangs (including side hair) picked collars · hats · background the side-hair area is occupied by clothes · hats · background depending on the picture look only at the bangs just above the forehead, counting without the exposed forehead (skin)
A pale skin part merged with white clothes into one color became “skin” the part occupying the cheeks · nose bridge has the same color as the clothes “skin” only for warm colors that are not too white
Faces · hands with pale skin (brightness 85% or more, saturation 3–7%) had no “skin” name at all (AI-generated pixiv pictures, 0.23) saturation under 7% might be white clothes, so it was not called skin pale skin is accepted only when the part’s area is about that of a face · hands · limbs (at most $12d^2$ of the largest face, at most 13% of the picture) (7 of 4.8). Newly named in 14 AI-generated pixiv pictures: 12 correctly on faces · hands, 2 mixed
In pictures with no face found, “skin” was put on blond hair · a sunflower field · a room · snacks (AI-generated pixiv pictures, 0.24) the color name of a flesh-toned base color was “skin” (renamed “beige · apricot” only in pictures with a face found) flesh-tone color names are always “beige · apricot”, and “skin” only for parts confirmed by a face (10 of 4.8). “Skin” removed from 43 pictures (the 10 that had it correctly also got color names)
Background gaps seen between light beams were picked up as line art a dark gap between bright beams also counts as “something thin and dark” line pieces almost surrounded by background and of the same color as the background are removed from line art
With hair exposing the forehead, an unrelated part became “hair” (café and mascot picture) if the whole bangs cell is forehead there are no candidates, yet the first part with 0 votes was chosen choose only parts with votes, and if the forehead is exposed, choose from the cell above
A light purple shadow on the white of the eye became “hair 2” (sample picture) in this drawing style the found eye position is 0.22𝑑 too low, so the white of the eye reaches into the bangs cell parts with area under $0.3d^2$ and pupils are removed from hair candidates
“Hair” · “skin” · “eyes” on clothes · ribbons · hair pieces (black dress, teal apron, yellow clothes, ribbon) fake faces of knees · hands · clothing patterns also gave votes only character faces give votes
The hair of a second, lower-scoring character had no name (the witch in the autumn leaves picture) with vote weight $(\text{score} - 10)^2$ it had 26% of the strongest face all character faces have the same weight
A second character with a small head lost names · folders (synthetic two-person picture) a face with more than 30% background in its head ellipse ($4.4d \times 4d$) was treated as fake kept unless the face ellipse (eyes · cheeks) is on background
A pale face and light hair in one part was called “skin” the skin part was excluded when counting the bangs cell no name if the skin part covers almost all of the bangs cell and the cell above
Skirts · legs · sleeves · props · background pieces of the same color as the hair got the “hair” name (AI-generated pixiv pictures, 0.27) a part gathers the same base color across the whole picture, and names are given per part only pieces connected to or near (within $2.5d$) the head zone of a face keep the name; the rest are split off as color-named parts (9 of 4.8). Wrong spots 339 → 292, pictures without wrong names 410 → 437 (of 666)
In brush paintings, the blue hair part swallowed pale skin · whites of the eyes · pupils · a jacket for two colors with only one achromatic, the achromatic one was treated as a “white highlight” whenever it was more than 8 brighter. Pale skin with saturation under 12 could be the highlight of any dark color if the achromatic side has a recognizable hue (saturation 4 or more), the hues must match (4.6). Part purity in synthetic brush paintings 85% → 99%
Desaturated shadows (the gray side darker) became separate materials with only one side achromatic, only bright highlights were accepted accepted as shadow if the hue matches and it is 4 or more darker (brightness 30 or more only)
Apricot skin next to a gray dress, and pink skin next to cream clothes, became one part the “shadow surface across a line” rule of part cleanup barely looked at color for low-saturation pairs a shadow is not brighter than the lit surface in any channel, and within 50° if the lit surface has a hue (2 of 4.8)
Brush grain · hair grain picked up as lines split hair into several parts line-blocked boundaries were treated as material boundaries if most lines in the picture are grain with the same color on both sides, grain becomes an open boundary (4.6). Share of hair in one part in synthetic brush-grain pictures 36–54% → 97–100%
Long blond hair · the leg skin of full-body pictures got no names no name if more than half of the part was outside $6d$ from the face excluded only when more than two thirds are outside
Light-catching brown hair merged into the skin part, and both skin and hair names were lost (synthetic two-person picture) the “shadow surface across a line” rule of part cleanup treated brown (saturation 30) of the same hue as a shadow of pale skin (saturation 16) (brightness ratio 0.52) surfaces with brightness ratio under 0.6 that are 1% or more of the picture are not merged as shadows (2 of 4.8). In 25 AI-generated pictures · 48 synthetic pictures, this was the only case caught by the condition
Transparent-background PNGs and pictures with background separation off had no part names · character folders faces were searched only in pictures where the background was found always search faces, and filter fake faces treating transparent areas as background. In 8 synthetic transparent-background pictures, faces 0 → 14 (of 14), character folders 0 → 5 pictures (of 5)
A red tail joined to a white body without a line, an orange pattern on white fur, yellow trims between white clothes became white · gray in the base color layer (AI-generated pixiv pictures, 0.38) when only one side is achromatic, material grouping treats the white side as a highlight if it is more than 8 brighter and groups them into one material, whose base color is its widest white tone tones with chroma 25 or more are split off materials with an achromatic base color into new materials (4.7). The tone map is unchanged, so background · character maps are identical for all 642 pictures
Small colored areas such as pupils · hair ties · ties vanished from the base color layer and took the skin · hair color (0.38) part cleanup 3 merged pieces under 0.15% of the picture into the longest-touching part even without a similar-colored neighbor if no part has a similar color, only pieces under 0.01% are merged and the rest are kept (3 of 4.8). “Small parts” rose from 1.8 to 4.2 per picture on average, and highlight pieces such as the glossy band on black hair can also be kept separately
The base color of cloaks · clothes · hair painted mostly in shadow was the shadow color (0.38) the base color is the widest tone (the brightest within 75% of its area) in colored materials, if there is a brighter tone with the same hue and at least 35% of the area from which the current base color can be made by multiply, that tone becomes the base color (4.7)

7.2 Background decisions

Problem Cause Fix
Sleeves · skirts cut off at the bottom of the screen became background the background was filled from the bottom border too the bottom border is not used as a starting point. The floor is filled from the sides · top if connected to the background there
Hats · sleeves cut off at the top · sides became background they touch the border and have few lines inside walking along the border, pieces squeezed between crisp outlines and different in color from both sides are returned (4.5)
Room corners · pillars were mistaken for cut-off parts one corner pixel is not background, so the piece looks squeezed between borders pieces touching within 5% of the two upper corners are excluded
Blurred shelves · writing stayed as character high line density stage 2 expansion to “places with no crisp lines and only dense blurred marks”
Fireworks · food stall · graffiti backgrounds were not found the background is also drawn with lines, so line density cannot separate it color model graph cut (4.5). Boundary overlap IoU 0.72 → 0.90 (graffiti), 0.71 → 0.79 (fireworks)
The color model took black clothes · dark hair into the background no visible line between black background and black clothes, and the same color near-black achromatic colors are not added; not done if the background already surrounds 90% of the border
The color model took the school uniform of a watercolor-style picture into the background uniform and wall · desk colors are similar not done if the color distributions of the character core and background overlap 0.3 or more
The color model took away props like books · hats line-blocked boundaries are cheap to cut new background is accepted only if connected to the existing background without crossing crisp lines
Arms · hands · sleeves · wings painted softly without lines became background low line density lets the background fill run along lineless boundaries split the background into pieces at crisp color edges, and return pieces attached to the character whose color is on the character side (4.5)
The middle of white clothes · skirts · flat-colored hair without lines inside became background (the most common cause of major losses up to 0.30) line density is blurred widely, so in the middle of wide surfaces it drops as low as the background, and margin widening follows the color across faint outlines places where rays in 16 directions on the line map hit lines in almost every direction (enclosed places) are not taken by the scene background · margin widening · color model · face-based widening (0.31, 4.5)
Small returned parts (cat ears) became background again connected to the character only by a thin band, so they look like “small pieces floating on the background” returned parts are removed from the background-effect candidates
Returning changed even the color model result the background colors the color model learns changed the color model is computed with the background before returning, and only the returned parts are removed afterwards
Pictures where background and character are drawn with the same colors · same lines (autumn leaves · lanterns · kitchen) do not work with the color model no cue tells what is the character find anime-style faces (two eyes), keep head · body zones on the character side, and add only sure background outside them (4.5)
Face-based widening took canes · skirt ends · arms · sleeves into the background they are outside the head · body zones and similar in color to the background accepted only when connected from the existing background through “lineless boundaries”. The character is surrounded by outlines, so it is not crossed
In a picture where a swallowed character was returned, another character’s hair stayed in the background (a three-person selfie among the AI-generated pixiv pictures, 0.19) the returned character’s jacket color entered the character-side color distribution, and the color likelihood ratio of the middle person’s purple hair piece dropped 1.39 → −0.38 returning attached parts decides with the background before returning swallowed characters (4.5). This picture’s background 40% → 34%; other pictures · synthetic pictures unchanged
Flat-colored characters whose outline has the same color as hair · background (black hair the color of the outline, purple hair · clothes on a dark background) became background entirely the scene background treats places with sparse lines as background, and with no visible outline it crosses straight into lineless hair · clothes. Returning attached parts only considers pieces with 80% of their perimeter touching the character, so hair · clothes whose outer perimeter is all background could not be returned if the face · crown zone of a face scoring 13 or more is background, background pieces in its head · body zones that do not touch the border and whose color is rare in the border-side background are returned (4.5). Character kept in synthetic pictures 81.1% → 97.6%
No background found at all for a flat-colored black-haired character in front of a gradient sky the scene background swallowed the character too, exceeded 90% in area, and was discarded entirely measure the area after returning the swallowed character (background found 0% → 100%)
Black hair of almost the same color as the background ($\Delta E$ around 9) mixed into a bokeh background no crisp color edge ($\Delta E \ge 20$), so no pieces were split if swallowed faces remain after returning, split once more with $\Delta E \ge 8$ edges (character kept 59% → 98%). Hair in front of a flat background with an outline of only $\Delta E$ 6 remains (10)
Knees · hands · bowls · clothing patterns · background decorations were seen as faces two round dark dots + a bright surface below fake faces only protect their place and add no background, while missed faces cannot protect the character, so the threshold is set on the side of not missing
Knees · cushions were seen as faces 3–4 times the size of real faces, and their “head · body zones” blocked half the background of a window-side picture the bigger a fake face, the wider the place it protects faces whose head ellipse goes more than 20% outside the picture or contains more than 30% already found background are dropped (the top-scoring face is kept). Window-side picture background 52% → 56%
Skirt folds · collars · ribbons · two dots on the moon’s surface were caught as faces they look similar under the eye · skin rules alone correlation with the average face pattern (×3) · sparkle in the eyes (×2) were added to the score, and the top-scoring pairs have their eye positions refined to the face pattern and are measured again
In unseen pictures, fake faces on clothes · props · text · snacks gave “hair” · “skin” names and split one-person pictures into two folders (AI-generated pixiv pictures, 0.21) about one fake face per picture, and names · folders trusted high-scoring faces as they were faces whose scores are adjusted by whether a mouth is visible, whether eye contrast · lower eyelids are too bright, and whether the skin area is white paper are used only for names · folders (4.5). Fakes 310 → 232, pictures with the right folder count 229 → 232
White shirts · school uniforms · skirts on a white background became background down to the bottom edge (AI-generated pixiv pictures, 0.20) the flat background fill also started from the bottom border and spread through lineless boundaries into white clothes reaching the bottom edge places reached only from the bottom border become background only when almost one color (under 5% of pixels off the reference color) (4.5). Clothes have shading · folds, while floors · margins are one color
The face stayed but white clothes · skirts · coat hems below it became background returning swallowed characters only acted when the face zone was background background pieces in the body zone of an intact sure face are also returned, but pieces whose color is much more common in the rest of the background than in the character ($\bar \ell < -2$) remain (4.5)
White dresses · black hair · legs on white · flat backgrounds became background entirely through face-based widening (AI-generated pixiv pictures, 0.26) the earlier stages found almost all the background, leaving little to find, and the color model saw character parts of the background’s color as background widening is not done if 60% or more of the already found background is within $\Delta E$ 10 of its median color (4.5). Of the 133 changed pictures, better 22 · worse 5, character without loss 87 → 104 (of 650)
In pictures with textured paper · fine brush marks, character edges · light paint became background, and a 0.1% change in the background decision shook the result by 3% when region splitting discards broken-up paint and fills it with nearby numbers, the background number spreads into the character character pixels more than 2.5px from the background are filled with character region numbers (4.6)
In large pictures (long side 2048px), the background leaked into hair tips · hems · sleeves · object edges (0.29) the flat background fill and the margin widening of the scene background stop at the color difference of one neighboring pixel (0.035, 0.03), but in large pictures the same boundary spreads its color change over several pixels and the one-step difference falls below the threshold for pictures with a long side over 1200px, both thresholds are multiplied by 1200/long side (4.5). If the background found with the reduced thresholds fails the area criterion, it is redone with the original thresholds. Of 115 high-resolution pictures, among 80 re-graded: better 33 · worse 7
On white · flat backgrounds, background seen between arm and body · between hair strands · between legs stayed in the character layer (increased from 0.31) outlines all around keep the background fill from reaching it, and as an enclosed place the color model · face-based widening do not take it either (0.31) if the background is almost one color, pieces within $\Delta E$ 5 of the background with only lines · background around them are sent to the background (4.5). The background number is kept from spreading along lines (4.6). Blind grading of 50 changed pictures: better 17 · worse 6
On flat-background pictures, clothes · legs · hair painted without lines went into the scene background (0.38) the scene background fills along places with sparse lines, and when it crosses into weak spots of the flat background’s edge (faint gradients, blurred edges) it spreads into lineless paint. The edge barrier of 0.37 blocks only crisp color edges islands of the scene background that do not touch the top · side borders (entered only through the flat background) are returned when they join a large character-side component or hold a face (4.5). On the 319 hold-out pictures, no major loss: gained 11 · lost 0

7.3 Correction tools

Problem Cause Fix
Clicking a table dragged the whole character along it spread without limit through lineless places brush-width band + only within the same part
A skirt touching the table came along parts with the same brightness and only slightly different hue ($\Delta ab = 10.6$) were treated as “similar colors” generous on brightness difference ($\Delta E < 12$), narrow on hue difference ($\Delta ab < 9$)
Rubbing a chair leg dragged the stockings along the stroke end touched the stockings, and the stockings and the chair wood were the same part fills do not start within 12px of stroke ends, and only fills the middle of the stroke passed through for 10px or more are accepted
Clicking on a line chose the wrong side the two sides of the line are different things if the two sides differ, nothing is chosen and the user is told to click inside

7.4 Files · screen

Problem Cause Fix
In some PSD parsers, the information after the layer name was misaligned the 4-byte alignment of the Pascal name was computed from the wrong position the alignment base was fixed to the start of the extra info
Clipping compositing in the preview differed from Photoshop (37.6 dB) clipping layers were cut one by one blend everything over the opaque base layer and cut once by the base layer’s alpha
Korean layer names were garbled Pascal names are ASCII write the luni Unicode name too, and put the English name of the layer kind in the Pascal name
On screen, opaque pictures with no background found got an empty “background” layer and [Background] · [Character] folders (10 of the new 342 pictures without background) the screen passes correction masks even with nothing painted, and the core made an empty background map whenever a mask existed. Verification run directly in code had no masks, so it did not show the background map is made only when there are painted pixels (0.26). Other layers’ pixels are unchanged

7.5 Methods tried but not adopted

Method Result
Enlarging small pictures 2× to split, then shrinking the character map back to the original size Of 126 pictures with a long side under 900px, enlarging with Lanczos changed the character map by more than 1% in 119, and of 18 re-graded, worse 10 · better 1 (sign test $p = 0.012$), at 4.4× the time. Enlarging pixels 2× as they are (no interpolation) also gave worse 5 · better 1 of 12. Enlarging with DCCI, which keeps outlines from blurring (directional cubic convolution interpolation: between original pixels, interpolates $(-a + 9b + 9c - d)/16$ along the diagonal · horizontal · vertical direction with the smaller change, blending by $1/(1 + d^5)$ when the change ratio of two directions is within 1.15), still gave worse 11 · better 2 of 27 ($p = 0.022$) at 3.5× the time, and 17 of 18 pictures graded together with Lanczos got the same verdict. DCCI restores a picture halved and enlarged back 1–2 dB closer to the original (than a cubic spline), so blurred outlines were not the cause. The cause was the values set in pixels (10): in the enlarged picture, the found lines fell from 17.1% → 8.5% of the picture area, and scene background stage 1 · margin widening and the flat background fill entered clothes · hair. On 40 pictures, matching the line window · color step threshold · crisp-line blur to the enlargement factor reduced pixels disagreeing with the original-size result from 1.24 million → 0.54 million
Enlarging only the faces of small pictures 2× to find them In 74 pictures whose faces changed, 18 real faces newly found · 12 lost (net +6), and fake faces net +37. Fake faces make names · folders wrong, so not adopted
Halving large pictures (long side 2048px) to split, then mapping back 102 of 115 changed by more than 1%, but 18 re-graded showed better 2 · worse 2, no difference, while the time went from a median of 18.0 s → 5.6 s. Results did not improve, so the default processing resolution stays; to see results quickly, choose 1024px as the processing resolution in the settings
(0.28) Detaching separated pieces for “skin” too Skin pieces were detached in 48 of the 111 pictures named skin, but in 12 looked at at random, the detached pieces were mostly real hands · arms · legs (only cut off by the face and clothes). Only hair is detached
(0.28) Keeping only hair connected to the head zone (without keeping nearby pieces) Even with the head zone widened 1.5×, 8 of 61 re-graded pictures lost the names of long hair · twin tails · drill hair cut off by arms · sleeves · ribbons. Changed to keep nearby pieces
(0.28) Only character faces as anchors In 15 of 198 changed pictures, the hair names of a second person not in the character group · a second appearance of the same person · a detached ponytail were lost (pictures with hair “mostly” named 94 → 87, $p = 0.039$). Also using faces scoring 11 or more as anchors gives 94 → 91 ($p = 0.45$), at the cost of pictures without wrong names 443 → 437
Splitting background pieces at narrow necks (outline gaps) to decide cut-off legs separately Even backgrounds like city night views were split and returned to the character. Not adopted
Detecting outer glow automatically by edge strength by distance around the character The difference between pictures with and without glow was not clear. Switched to the share of fluorescent colors in the border band and adopted (4.5)
Finding outer glow by “the width of the lineless band between background and outline” or “colors running long along the boundary” Ordinary pictures (band 54%) came out higher than glow pictures (29%, 18%), or glow pictures came out 0%. Not separable
Outer glow as a screen layer (only the brightening over the background color) A green glow over a pink background cannot express channels darker than the background, so the glow stayed in the background layer. Made an opaque normal layer
Treating the rainbow border of a yukata picture as glow too Only 19% of the background was found, so the boundary did not follow the border, and the found “glow” was mostly fireworks · lantern pieces. Used only when it surrounds 35% or more of the boundary, so not done for this picture
Protecting the character by skin color Wood · beige walls · cushions are also skin-colored, so 10–50% are background pixels depending on the picture. Not adopted
Stopping the background fill itself at crisp color edges Backgrounds with many crisp edges like the moon’s surface · gardens · gold ornaments returned entirely to the character (one picture’s background 7% → 0%). The fill is kept as is and decisions are made per piece
Deciding by the length connected to the character without lines (smooth contact) Sky pieces also connect smoothly to the margin around the character, so they cannot be told apart. Decided by the share of contact length and color
Measuring line sensitivity from the picture too (threshold at the top 25% of line darkness) In pictures with faint lines, grain · small marks also became lines, raising the line density used for background finding. Café interior background 41% → 32%, three pictures reduced by 3–4%p. Default kept
Always changing the line detection window to the pen width (including shrinking) Even ordinary pictures had the window change by 1px, shaking background · parts (café interior background 41% → 33%). Widened only when the default window is too small
Setting base color merge strength · shadow threshold at the valley of the distribution (Otsu) The distributions have only one peak, so almost every picture went to the end of the range (merge 0.3, shadow 0.2). The only improvement on synthetic pictures was “collar and whites of the eyes merged into one part”. Defaults kept
Increasing the number of color clusters · maximum number of parts in pictures with many colors Parts were only split differently among the same color names (skin 1–12, red 1–13), with no improvement, and some pictures got more small parts. Defaults kept
Reducing the number of color clusters in simple pictures With 10 colors, purple hair split into two parts; with 12 colors, the whites of the eyes merged with the collar. 14 colors is the same as the default. Default kept
Setting the sparkle size from the size of small bright dots (90th percentile of white top-hat piece radii) Pictures with large stars and ordinary pictures had almost the same value (13.1 vs 11.9, mostly eye sparkles). Catching the large stars was luck near the threshold, and the 2048px enlargement, unlike the 800px original, sent eye sparkles to the sparkle layer. Default kept
Using the “line share” of region perimeters as evidence in both directions Shadow boundaries inside the character (no lines) were pushed to the background side, making results much worse. Used only as character-side evidence
Separating character and background by color distribution alone Even using the character · background color distributions learned from the ground-truth outlines as they are, pictures with the same colors on both sides (red ribbon and autumn leaves, black hat and a shaded shrine) got only 76–86% of regions right. Grouping neighbors (graph cut) raised it by only 1–4%p
Separating character lines and background lines by line style (line color · darkness · width) In pictures with background drawn with the same lines as the character, only 1–7%p better than calling “all lines character”. Clear only in a kitchen picture with fluorescent background lines
Blur (focus): ratio of fine-scale to coarse-scale gradients The character and background distributions were almost the same. Even at its best, majority-vote level
Rules on position relative to faces (torso below the face is character, above the head is background) Hats · large hairstyles above the head were seen as background. Widening by color alone without position made half of the two characters in the autumn leaves picture background. Changed to probabilities that add only sure places, and adopted (4.5)
Face-based widening without the outline condition (color and zone only) Finds more on the 8 ground-truth outline pictures (overall accuracy +1.8%p), but in other pictures the magical girl’s cane · skirt end and the classroom girl’s arms · skirt became background. Adopted with the lineless boundary condition
Excluding places dense with crisp lines from face-based widening In pictures with background also drawn with lines, the found background disappeared too, losing the gain (8-picture mean +0.9%p → +0.1%p)
Low-scoring faces only protecting their place and excluded from color learning (two-level threshold) Worse than one threshold (8-picture mean 0.4–1.2%p lower)
Letting face-based widening cross blurred (non-crisp) lines In pictures with blurred character outlines, the classroom girl’s arms · skirt, the hair of the silver-haired girl · the beret girl, and the magical girl’s cane became background (10% in the classroom picture)
Lowering the color confidence threshold far from head · body zones, and accepting very clear colors even inside zones 8-picture mean +0.5%p, but the golden dancer’s translucent sleeves · hair, the crêpe the crêpe girl holds, the bead ornament of the close-up girl, and the wings of a full-body picture became background
Crossing pieces that are blocked by lines but never touch character-side regions (detached objects like window frames · shelves) 8-picture mean +0.3%p, but the classroom girl’s skirt that looks detached behind a desk (4.9% of the picture) and the beret girl’s hair became background. Occluded character parts also look like detached pieces
Changing the size of head · body zones and the color confidence threshold 8-picture mean difference within ±0.3%p (zone width 1.0𝑑 · head 1.8𝑑, threshold 0.7, zone probability 0.4, etc.)
Excluding parts with more than half of their pixels around the eyes ($\lvert u\rvert \le 1,\ -0.6 \le v \le 0.4$) from hair candidates Shadows on the whites of the eyes drop out, but real bangs hanging near the eyes (beret · two-person full body · Miku pictures) dropped out too. Changed to an area condition
Always choosing from the cell above when no hair can be chosen in the bangs cell Correct for the Miku bust, but in the two-person full-body picture with bangs split into three colors, the hat was called “hair”. Only when the forehead is exposed
Letting fake faces vote with a low weight (up to 0.17) 7 more names than with character faces only, 6 of them wrong (clothes · ribbon · ear ornament · stockings). The only correct one was the leg skin of the window-side picture
Treating a line as an open boundary in any picture when both sides have the same color Good for synthetic brush-grain pictures, but in AI-generated pictures pale skin and light hair · white clothes, and neck · shirt · tie became one part (the line was the only boundary). Only when most lines in the picture are grain
Including white · gray in the comparison of colors on both sides of lines Shadows of many materials become the same gray, joining shirt · skin shadow · tie. Only colors with saturation 12 or more
Separating line-art pictures and brush paintings by “the share of clearly different color boundaries that have lines” Overlaps: synthetic brush-grain pictures 45–59%, AI-generated pictures 44–83%. Separated by the share of lines with the same color on both sides (synthetic 86–88%, AI-generated 4–31%)
With only one side achromatic, also accepting the brighter side when “the hue is the same and only brightness differs” The gray shadow of a hand (brightness 66) became the lit surface of a dark red jacket (brightness 24), making the jacket and hand one part. On the bright side, only highlights over brightness 70
Desaturated shadows without a darkness limit Black gloves · hair pieces became one material with a dark green jacket, turning the jacket’s base color into light gray-green. Only brightness 30 or more
Making face finding left-right symmetric (average face pattern averaged with its mirror, eye refinement done twice, left eye first · right eye first, taking the better) Scores became exactly the same when flipped (maximum difference 1.24 → 0), and 60 of 62 faces in original · flipped pictures were found (59 before). But character face selection was right only 40 of 48 times (42 before), names in AI-generated pictures got worse (hair names in the qipao · gothic lolita pictures, skin in the close-up, hair · skin names of the golden dancer mostly lost, and the girl on the dark background got her hair name on something else), and the character folders of the window-side picture went 89% → 61%. The average pattern was made from these pictures’ faces, so it is tuned to the original orientation. On flipped pictures alone the two were equal (20 of 24)
Face pattern correlation as the larger of the pattern and its mirror Symmetric, but fake faces increased 49 → 58, and in the checked-shirt picture a large fake frame below the face (score 14.0) hid the real face, which was missed
Color clusters (k-means) from a histogram of Lab color bins instead of pixel samples (independent of pixel order) In the synthetic naming pictures, hair split into two parts of almost the same color, and hair recall went 84.8% → 65.4%. The name overlap under left-right flipping stayed almost the same (background fill · material grouping · part cleanup also merge greedily in pixel order)
Narrowing or widening the seed zones of character splitting (head ellipse 0.7–1×, body column width 0.8–1.2𝑑, widening 0.1–0.35) No difference: 4 AI-generated two-person pictures 93.6–93.8%, 10 synthetic pictures with two or more people 98.6–98.8%. The errors are at the seam where two characters touch (one hair strand wide), a matter of line strength along the spreading path, not the seeds
Loosening the height condition of character face selection (within 3𝑑 vertically in each other’s face frame) to 5𝑑, measuring in the mean direction of the two face frames, or removing it. Score threshold 11.5 → 11 With the faces of 0.20, group pictures in the 300 AI-generated pixiv pictures (11) got 1–3 more right, but one-person pictures split into two or more by fake faces rose from 13 to 17–32. After fake faces were reduced in 0.22, widening to 4𝑑 was adopted (0.24)
(0.24) Height condition 5𝑑 · removed, character face score threshold 11 · 11.25 · 12 · 12.5, size ratio 0.4–2.5 All had fewer or equal pictures with the right folder count than 4𝑑 (5𝑑: group pictures +1 · one-person pictures −2; threshold 12.5: one-person pictures +6 · group pictures −6)
(0.24) Minimum eye distance 16 → 14 · 12px (at a long side of 800px) to find very small faces No more real faces found (200 → 199 · 198), only more fakes (458 → 493 · 523, threshold 11, before the face-likeness filter)
(0.24) Accepting pale skin without the area condition 29 pictures got new names, but in 8 the whole of white-clothed · white-haired characters, manga panels and even glass boxes became “skin”
Not filling the flat background from the bottom border at all 45 AI-generated pixiv pictures changed: 25 better but 13 worse (white floors · margins · patterned backgrounds at the bottom edge stayed on the character side). Adopted as making places reached only from the bottom border background when they are almost one color
Filtering places reached only from the bottom border by line density or face zones when returning them Line density (0.4 or more) filtered only one black-and-white landscape and missed water reflections · mascot patterns. Filtering by face zones dropped the two biggest improvements (the white shirt of a girl with closed eyes, the black clothes · legs of two people) because they had no sure face
Returning body-zone pieces without a color condition Background holes seen between skirt and sleeve became character (found background of the 8 outline pictures 56.79 → 56.26% in pixel total), and so did a black text box next to a character. Adopted with color log-likelihood ratio −2 or more
Fixing the smearing of background numbers up to the border touching the background 205 AI-generated pixiv pictures changed, mostly 1–2px edges, and on the 8 outline pictures the found background went 56.79 → 56.66% and kept character 96.03 → 96.06% in pixel total. Adopted leaving the inner 2.5px
Using the face score adjustment (mouth · eye contrast · eyelids · white skin) for the faces of background decisions too On 300 AI-generated pixiv pictures, real faces found 193 → 199 and fakes 310 → 249, but 86 backgrounds changed, and of 27 looked at among the 56 changed by more than 0.5%, 4 were better · 11 worse. When fake faces disappear, face-based widening turns off and curtains in pictures of rooms without people stay on the character side, or legs · hair that fake faces had protected go to the background. Used only for names · character folders (4.5)
Also refining the positions of the top 40 pairs by adjusted score when choosing naming faces Real faces rose 196 → 202 but fakes also 232 → 258. In the autumn leaves picture, the witch’s face was pushed out by a pair refined off to the side (score 12.2), and the face in place (12.0) was lost
Rebuilding the face pattern from faces of unseen pictures A pattern made from half the pictures and used on the other half found fewer faces than the original pattern at the same number of fakes (correlation 0.93 with the test-picture pattern)
Trusting face zones and returning color regions of head · body zones taken by the scene background whose color is on the character side (character color from the character remaining in the zone, background color from the background outside the zone) 75 AI-generated pixiv pictures changed; of 18 looked at among the 47 changed a lot, 1 better, 15 worse. What came back was mostly background objects overlapping behind the character (railings, flower bushes, waves, water, floors). Background behind the character often has colors absent from the background outside the zone, so color cannot separate it
Not searching faces in opaque pictures with no background found (as in 0.18) Among the 5 such pictures in the 300 AI-generated pixiv pictures, 1 picture had its character split by a fake face, but 1 picture also lost a wrong “skin” color name and newly got a correct hair name. Faces are always searched for the gain in transparent-background pictures (11)
(0.25) Not merging the color region occupying the cheek · nose bridge cells of a character face with the color region occupying the bangs cell (color difference $\Delta E$ 6 or more) in material grouping · part cleanup Tried because nearly half of the faces without hair names were cases where the skin part covered the bangs too. 28 AI-generated pixiv pictures changed and more pictures got hair · skin names, but one by one, 5 were better · 10 worse. Detached hair grouped with logs · lanterns · leaves of the same color became “hair”, or names went on faces · hats · tablecloths. Material grouping merges greedily, so blocking one pair changes the following merges in a chain, and even with the same background decision the tones differed, slightly shifting the character · background boundary of 9 pictures
(0.25) Doing the separation above only in the part cleanup stage The character · background maps stayed the same and only the names of 21 pictures changed, but 6 were better (hair · skin · eyes of pale skin + light hair, green hair) · 6 worse (logs · trees · tablecloths · hat brims)
(0.26) Filtering out only character pieces by statistics among the pieces face-based widening (9 of 3.5) adds to the background Looking one by one at the 398 added pieces (0.1% of the picture or more) in the 91 pictures that the face stage made worse or mixed: background 131 · character 191 · ambiguous 76. The discriminating power of 19 cues (color log-likelihood ratio, face zone probability, crisp edge share, contact length with background · character and its line share, distance to the face, area, color difference with surrounding character · background, color difference with the hair color, inner sharpness and its ratio, dark lines on the boundary, color spread, brightness) was AUC 0.41–0.63 (0.5 is chance), and a logistic regression combining 11 non-overlapping ones gave AUC 0.51 under picture-level 10-fold cross-validation (even the best 0.63 was a value high by chance among many). Filtering half of the character pieces also catches 48% of the background pieces, losing as much background as is filtered. White dresses and white walls, black hair and dark backgrounds take the same values on color · line · position cues, so adding formulas brings no information to separate them
Setting only an upper limit on the brightness difference for merging shadow surfaces Small surfaces now merged as shadows (60–330 pixels, window-side · café interior · autumn leaves · bench · night view pictures) also include brightness differences of 35–44 and were blocked too. Checked together with area (1% of the picture) to block only wide surfaces comparable in size to the lit surface
(0.29) Making the three size-sensitive values (line detection window · color step threshold · crisp-line blur) proportional to a long side of 1200px at every size Line detection window $\max(1, \mathrm{round}(4s))$ (removing the floor of 3), the pen width measured on brightness scaled to a long side of 1200px and mapped back, color step threshold $\times 1200/\text{long side}$, crisp-line blur $\sigma = 1.5 \times \text{long side}/1200$. The 24 pictures of 1200px were unchanged, 275 of 283 other-sized pictures changed, and re-grading the 248 changed by more than 0.2% gave better 61 · worse 77. Pictures with a long side under 900px got better 19 · worse 57 ($p < 0.0001$) and no major loss 57 → 38 ($p = 0.0005$), so overall no major loss fell 384 → 367 (better 12 · worse 29, $p = 0.012$) (10)
(0.29) Making the three values proportional one at a time in pictures smaller than 1200px Changing only the line detection window changed 78 of 168 pictures by more than 5% and made 61% of the difference pixels of the row above (pictures where the window made more than 70% of the difference: better 10 · worse 37). The window shrank from 3–5px to 2px, fewer lines were found, line density inside the character fell, and the scene background entered clothes · hair (the same cause as DCCI enlargement). The color step threshold alone (larger in small pictures) 23% (better 1 · worse 6), the crisp-line blur alone 24% (better 4 · worse 6)
(0.29) Making the crisp-line blur proportional for large pictures too (𝜎 1.5 → 2.6) Of 16 pictures where the blur made more than 70% of the difference, better 7 · worse 3 · similar 6 ($p = 0.34$); the evidence was weak, so it was left as is
(0.29) Measuring the pen width of large pictures on brightness shrunk to a long side of 1200px 2 of the 4 pictures whose line detection window changed got worse (the picture with window 10 → 8 found no background at all, the one with 8 → 12 went from 70% → 14% found background)
(0.29) Reducing the color step threshold of large pictures without falling back 2 pictures that had found background found none (the background spread with the reduced threshold fell short of the 3% · 5% area criteria). With the fallback, these two pictures became the same as 0.28
(0.29) Making the three values proportional in small pictures and also matching the line density criteria to size On copies of 60 pictures of 1200px shrunk to a long side of 540px, the values best reproducing the scene background candidates of the original-size result were found (crisp line density multiplier 0.25 → 0.15, blurred line density threshold 0.085 → 0.06, color model crisp line density multiplier 0.25 → 0.15 · character core 3 → 4, joined by powers between 1200px and 540px) and run on 168 pictures smaller than 1200px. Re-graded side by side with 0.29: better 26 · worse 60 ($p = 0.0003$), no major loss 84 → 69 (gained 6 · lost 21, $p = 0.006$). Slightly better than the version without matched line density (84 → 63), but worse than 0.29. On the shrunk copies, background pixels disagreeing with the original-size result were also fewest with the current pixel-based values at 9.0%; line detection window proportional alone 10.4% · color step threshold alone 9.9% · crisp-line blur alone 10.3% · all three 11.4% · all three + line density 11.6%, all disagreeing more
(0.29) Enlarging pictures smaller than 1200px with DCCI to split at a long side of 1200px (the size the rules are tuned to), then mapping back Enlarged 2× at a time past 1200px (twice for 540px pictures) and fitted to 1200px with Lanczos, and the character · name maps mapped back to the label with the largest area average. 165 of 168 changed by more than 0.2%, and re-graded side by side with 0.29: better 42 · worse 52 · similar 63 ($p = 0.35$), no major loss 84 → 82 (gained 15 · lost 17), character without loss 20 → 27 (11 · 4, $p = 0.12$), perfect separation 7 → 4. 540px pictures better 32 · worse 44 (no major loss 57 → 51), 900–1200px pictures better 10 · worse 8 (27 → 31); neither clear. Enlarging keeps more blurred edges as character but also sends more lineless clothes · hair to the background, cancelling out. Processing time per picture under 900px 2.6 s → 7.9 s
(0.29) Enlarging only pictures with a long side of 900–1200px with DCCI to split at 1200px 42 AI-generated 900–1200px pictures and, to enlarge the sample, copies of 90 pictures of 1200px shrunk to 900–1199px (88 changed) were placed side by side with the original-size result without knowing which side was enlarged (left/right at random) and re-graded. Enlarged better 23 · original size better 33 · similar 74 ($p = 0.23$), no major loss 84 → 80 (gained 6 · lost 10, $p = 0.45$), character without loss 26 → 27. AI-generated pictures alone: enlarged better 7 · original size better 14. Pixels disagreeing with the 1200px original’s result on the shrunk copies also showed no difference: original size 5.20% · enlarged 5.45%. Splitting time alone 8.4 s → 10.3 s (DCCI time excluded)
(0.29) Shrinking pictures larger than 1200px to a long side of 1200px (Lanczos) to split, then mapping back 114 of 115 high-resolution pictures changed and were re-graded placed left/right at random with 0.29 (original size), without knowing which was shrunk. Shrunk better 25 · original size better 29 · similar 60 ($p = 0.68$), no major loss 65 → 57 (gained 5 · lost 13, $p = 0.10$), no background found 1 → 4. Splitting time halves 17.4 s → 9.1 s, but results did not improve, so it is not the default; added in 0.30 as a setting (“Reduce everything”)
(0.30) Finding only the background · faces of large pictures at 1200px and making layers at the original size 114 of 115 high-resolution pictures changed and were graded blind against the original size: shrunk better 14 · original size better 51 · similar 49 ($p < 0.0001$), no major loss 66 → 58. Enlarging the reduced maps puts their boundaries out of line with the original-size line · color edges, and later stages (pieces on the background · line cleanup) widen the mismatch. The background stage is about 1/3 of the total time, so only 5% faster, 17.4 s → 16.6 s. Kept only as a setting, not recommended (11)
(0.31) Excluding enclosed places only in scene background stage 1 Blocking only stage 1, which fills places with low line density, lets the following margin widening (widening into places where color continues smoothly) take lineless white clothes · skirts as before. The version blocking stage 1 · color model · face-based widening was better 22 · worse 11 than 0.30 in 45 blind pictures, and the version also blocking margin widening (adopted) was better 18 · worse 3 than that version in 26 blind pictures
(0.31) Enclosure threshold 0.8 (13 of 16 directions) Graded blind against 0.9 (15 directions) on 20 random pictures of the 361 changed: better 8 · worse 8 · similar 4, no difference, and one picture found no background at all (the found scene background fell short of 5% area)
(0.31) Treating the bottom border as a wall too when measuring enclosure (characters cut off at the bottom of the screen) Graded blind against the 0.9 version on 12 random pictures of the 167 changed: better 6 · worse 5 · similar 1, no difference. As much bottom floor · grass stays on the character side as cut-off skirts · legs are kept
(0.32) In pictures searched again without enclosure, also running the color model · face-based widening without enclosure Differs only in pictures where the scene background without enclosure fell short, and 5 of 666 changed (one picture’s background 8.8% → 14.7%). Some pictures lost more character clothing pieces, so the color model · face-based widening still block enclosed places
(0.33) Releasing enclosure protection only in pictures that got worse in 0.31 Comparing pictures where 0.30 was better and where 0.31 was better in the 0.31 blind grading (89 · 243 pictures where places only 0.30 saw as background exceeded 1% of the picture) on 13 values (share of enclosed places, line share, share of protected places that are enclosed · outside face zones, enclosure of the border band, flat background area, etc.), the discriminating power was AUC 0.34–0.61 (0.5 is chance). That 90% of protected places are enclosed was also the same on both sides (medians 0.905 · 0.896). Counting only long line pieces (3% · 8% of the long side or more) as walls reduced protection equally on both sides (0.70 · 0.71 at 3%), so pictures could not be told apart
(0.33) Loose gaps (no limit on the piece sum, pieces up to 5% of the picture) Changed 161 of 666 pictures by more than 0.05%; one by one: exactly removed gaps only 85 · visibly lost character 20 · mixed 15 · almost nothing 41. The losses were black-and-white line art filled with white, and white stockings · white ribbons · white clothing pieces (sum 5–30% of the character’s paint), so limiting to a 5% sum · 2% pieces reduced losses to 10 with 74 exact (4.5)
(0.33) Undoing numbers smeared from gaps on the non-gap background side too In 3 test pictures the character layer grew 4–12%, mostly lines · patterns of the background picture coming to the character, so only places whose nearest background is a gap are undone (4.6)
(0.34) Light · sparkle painted over lines as a layer above line art Treating line pixels brighter and more saturated than the surrounding paint as light over lines was right on synthetic pictures (light stroked over lines), but found something in 574 of 666 pictures, mostly color trace (lines tinted with the paint color). Color trace and “black line + screen light” cannot be told apart from one pixel’s color, and adding connectivity to neighboring lines as a condition also removed the gain on synthetic pictures
(0.34) Faint glow spreading outside the outline Inpainting the background far from the character inward to guess the background’s own color, and treating the outline surroundings as glow if tinted with one color more strongly than that color and fading with distance from the line (hue concentrated on one side 0.7 or more, near/far difference ratio 1.5 or more, edge continuing smoothly into the surroundings, surrounding 35% or more of the boundary within 3px). Synthetic glow recall went 6.8% → 27.0% (precision 100%), but all 24 pictures where glow was newly found among the 666 were fake (bands around characters on yellow flat backgrounds, underwater scene pieces, edge stripes). Many pictures (gradients · lighting) have far-background inpainted colors that differ from the actual color of the near background
(0.34) Calling the part in the torso cell “clothes” Called the widest part in the face frame’s torso cell ($\lvert u\rvert \le 0.8,\ 2 \le v \le 3.5$) “clothes” (excluding skin · hair) when the cell was more than half painted. Of all 62 named pictures: only on clothes 33 · mixed 12 · mostly not clothes 17 (hair strands, floor · curtains left in the character layer, frames of misdetected faces). Filtering by share inside the body column · share above the eyes · whether both skin and hair were found for that face still left 9 wrong of 44 and lost 4 correct. What is clothes cannot be decided by color and position
(0.34) Erasing small dot marks of the rough (pieces under $(6s)^2$ not connected to other strokes) In 12 pictures (10 random + 2 test pictures), only 0–67 pixels were erased per picture. The marks left around lace · patterns are mostly short strokes over 100 pixels, so erasing small pieces does not reduce them
(0.34) Mirror-agreed faces for background decisions too The background took character parts (legs, hair) that fake faces had protected, and major losses rose by 4 among pictures whose character map changed. Used only for names · folders (10 of 4.5)
(0.34) Drawing color cluster samples in color order instead of pixel position, and ordering material grouping by boundary length · area instead of region number (so the same parts come out when flipped) Used for all color clusters, left-right name overlap on 25 AI-generated pictures rose for hair 47 → 57% · skin 53 → 65% but fell for eyes 59 → 35%, and the background stage’s color model changed too, changing the character map in more than half the pictures (an effect of different samples, not an improvement). Used only for part · tone clusters, it was lower: hair 40% · skin 50% · eyes 48%
(0.34) The third return pass split by faint edges ($\Delta E \ge 5$) only for pieces touching the character Of the 11 pictures the third pass changed, the background smudges of the 3 where the old version was better were partly removed, but kept character on 6 synthetic dark-background pictures went back 100% → 90.1% (black hair pieces have the same shape as background-side smudges). The same when narrowed to head zones only
(0.34) Closing narrow gaps on dark one-color backgrounds · all backgrounds too In 3 night scenes · dark backgrounds, background objects · dark pieces came back to the character side (2.7–10.3% of the picture). On scene · patterned backgrounds, single-step color differences become walls and the fill breaks up here and there. Done only on bright, almost one-color backgrounds (4.5)
(0.34) Walls for closing narrow gaps from lines only (without sharp color boundaries) Only 3 of 17 major-loss pictures of white clothes · light hair on white backgrounds changed. Faint outlines are often not caught as lines and remain only as color boundaries
(0.34) Sending back to the background flat pieces of the background’s color (90% or more within $\Delta E$ 3) among pieces that became character through gap closing The area of such pieces was the same in the 63 pictures where the new version was better and the 48 where the old was better in blind grading (0.52% · 0.45% of the picture), so they could not be told apart
(0.34) Height condition of character folders (within 4𝑑 vertically in each other’s face frame) at 5𝑑 · 6𝑑 · removed, score threshold 11.5 → 11 Simulated on 436 pictures with mirror-agreed faces: group pictures with two or more folders rose 31 → 32–44, but one-person pictures split in two also rose 6 → 7–21, worsening as much as improving
(0.37) Treating only the single nearest side as “bottom”, only when tilted more than 60° Tried to undo the scene background spreading less at 45° because two sides were caught as bottom, but in 17 blind cases where the result changed: better 6 · worse 8 · same 3 ($p = 0.79$). Rotated canvases at 45° were better 4 · worse 1, but 45 · 60° with the “Tilted picture” setting were better 1 · worse 6
(0.37) Widening the black-clothes barrier to everything within 7 steps of the flat background shrunk by 3px Blocked the hair leaking on dark-background synthetic pictures (10), but blind review of the 27 changed AI-generated pictures gave better 14 · worse 7 · same 6 ($p = 0.19$). On the same 27, the adopted method was better 21 · worse 3, and 5 flipped from “adopted method better” to “0.36 better”
(0.37) Comparing colors for the black-clothes barrier with the original colors instead of 𝑈 (lines filled in) The leaking area of 4 dark-background synthetic pictures stayed the same (the leak entrance is on the shadow side, not line pixels)
(0.38) Returning all islands in the scene background unconditionally Blind review of the 137 changed among 323 development pictures: returning better 66 · 0.37 better 28 · same 43 ($p = 0.0001$). The 28 worse were cases where text · spray · emblems · glitter floating apart from the character came back to the character, and cases where background shapes attached to the character (panels · circles · stripes · floors inside a border) came back. For floating things, the character component holding the island was 4% or less of the largest component, so returning was changed to only when it is a quarter or more, or holds a face (in the 60 changed, the changed version was better 47 · worse 9 · same 4, $p < 0.0001$)
(0.38) Adding “the share of flat background around the island” or “the color difference of the flat background touching the island” to island selection Tried to filter out attached background shapes too, but on the 319 hold-out pictures, the medians for the 52 where 0.37 was better and the 55 where 0.38 was better were the same: perimeter share 0.51 · 0.51, color difference (channel maximum) 0.058 · 0.060, so they could not be told apart
(0.39) When merging small pieces, prefer a neighbor · large part with a close color ($\Delta E < 12$) first The base-color resolving power of the ground-truth pictures rose 1.17× (whites of the eyes · collars into white parts), but in a blind review of 36 AI-generated pixiv development pictures, keeping the previous rule was better 5 · the new one better 2 · same 29 ($p = 0.45$). The gain on ground-truth pictures did not carry over to AI-generated pictures
(0.39) Applying the lit-side base color choice to white · gray materials too In development pictures, gray clothes · gray hair grouped with white clothes got a nearly white base color, so it is used only for colored materials (this variant was not reviewed blind)
(0.46) Drawing rough 2 only with straight segments (a polygon cut at every bending vertex) In previews it looked like a machine-cut polygon rather than a rough drawn by a person, so strokes now break only at sharp corners with gentle curves in between
(0.46) Rough 2’s inner lines from color boundaries (only those with line art under them) In a blind test on 40 unseen pictures, graders kept noting that the inside of complex pictures became a cell-like polygon mesh, so inner lines now come from the long lines of the line art (on the next 40 pictures the changed rough won on form 21 : 10, $p = 0.071$)
(0.46) Capping the total length of inner color boundaries at a multiple of the silhouette length On 16 pictures, the values of good pictures (1.6–2.6×) and of pictures that became a cell mesh (1.3–7.0×) overlapped and could not be separated
(0.47) Tracing every line of the line art in rough 2 (down to short closed loops · contours of thick painted shapes outside faces) In a blind test on 40 unseen pictures it lost heavily to 0.46’s rough 2 on plausible origin 3 : 22 and by hand 2 : 28, with no difference on form 9 : 10. Notes gathered on “patterns traced as small closed loops look mechanical”, so repeated small loops are left out and contours of painted shapes are taken only inside face areas
(0.47) Finding irises by color and drawing them as ellipses (blobs that are neither white of the eye nor skin around found eye points) Some eyes in development pictures were right, but cheek blush · parts of eyes were often taken as irises; above all, recognizing eyes and turning them into symbols was dropped in favor of tracing the line art
(0.48) Naming faces: finding closed · smiling eyes as short dark arcs (scored separately by trough depth · width · skin below the eye) On the 88 development pictures for decisions, faces found +0, and +1 with fakes +1 after widening the arc candidates (acceptance: found +2 or more with fakes +1 or less). Arc candidates appear, but closed-eye faces miss the open-eye cues (sparkle · eye pattern), leaving too few cues to tell them from fakes
(0.48) Naming faces: mean patterns per eye type (real faces split into 1 · 2 · 3 · 4 clusters, per-cluster mean face · eye patterns), a chroma face pattern In two-fold cross-validation on the 117 development pictures for choosing, all 24 variants found as many or fewer faces than the current patterns (55) at the same number of fakes (49–53). The chroma pattern separated real from fake with an AUC of only 0.52 · 0.59
(0.48) Naming faces: accepting smaller faces (eye distance 16 → 12 px on the 800 px grid) · more tilted faces (eye line ±38.7° → ±50.2°) The 14 · 4 new detections were all fakes (text · clothing ornaments · sparkles of large eyes). The missed small · tilted faces score low on other cues too and do not come back
(0.57) Selecting rough 2’s lines by white top-hat · texture-orientation coherence On development pictures the net stayed or faint real lines dropped out with it, so only the difference from the surrounding mean (local contrast) is used
(0.57) Closing and filling the cells of the net (narrow cells between lines as masses) The cells of eyes · mouths were filled too and faces collapsed
(0.57) Filling between lines by grayscale closing before selecting The space between eye whites · irises was filled and the eyes vanished
(0.57) A thinner pen in dense areas On the 18 artist-style reference crops recall fell on all 18 (0 : 18) and F 2 : 16 ($p = 0.001$)
(0.57) Dropping short pieces inside the face area Mouths vanished
(0.57) Choosing the pen width from the character size (learning a width per size) Over 239 pictures the rank correlation of the measured pen width with character size is 0.18 (with the picture’s long side 0.20), too low, so the picture’s line width is measured directly instead of guessed from size
(0.58) Fitting irises with ellipses · filling eye holes scaled to the face Hits varied from picture to picture, and even the hits looked like glasses
(0.58) Filling larger holes outside faces (pen scale² × 60 · 120), changing the eye-corner split · stabilizer strength The ornament net · eye shapes barely changed
(0.59f) Making strokes in dense areas lighter in both width and darkness (multiplied, down to 0.36×) + drawing one in three crossing lines Lost to 0.56 in the blind test by 15 expert-role graders (51 : 82, $p = 9.0 \times 10^{-3}$): “darkness” 12 → 94 · “broken lines” 15 → 57, read as “a faint trace of the line art”. The mesh-cell and clump metrics improve automatically when lines get lighter, so the selection metrics were fooled
(0.59f) Removing lines of lettering · signatures Mistook clusters of hair highlights for text lines and caught almost no handwritten signatures or speech-balloon text
(0.59g) Adding a gentler crossing-line thinning to 0.59e (one in two, crossing threshold 6, lines 40× the pen scale or longer kept) In the blind test against 0.59e by 15 expert-role graders, 131 of 138 were ties (4 : 3, $p = 1.00$). The median mesh-cell count dropped 4.91 → 4.58, but not by a difference people could see, so it was not adopted
(0.48 cycle 1) Face score threshold 13 → 11 in restoring swallowed character parts The 185-picture BER improved (×0.974), but in 8 blind rounds (new graders each round) on the 97 of 400 hold-out pictures that changed: candidate 34 · 0.47 40 · ties 23 ($p = 0.56$). With only 8 AI-generated pictures with ground truth, the 185 pictures do not catch such a regression
(0.48 cycle 2) Line-ratio threshold 0.3 → 0.4 in the gap rule between characters (only on non-white backgrounds) Development screening better 3 · worse 2 · similar 3 (lost white stockings · a white skirt); only 1 of 400 hold-out pictures changed (candidate 1 : 0, $p = 1$)
(0.48 cycle 3) Treating the bottom border as a wall too in the line-enclosure check 185-picture BER ×1.016 (worse); 272 of 400 hold-out pictures changed, and in the blind test of 128: candidate 50 · 0.47 68 · ties 10 ($p = 0.12$). What it returned was mostly floor · background at the bottom
(0.48 cycle 4) Keeping scene-background filling out of the head zone of naming faces (score 12 or more) 185-picture BER ×1.007; only 4.6% of development pictures changed. On 26 of 400 hold-out pictures: candidate 16 · base 9 · ties 1 ($p = 0.23$). Blocking with every found face let fake faces (blurred light circles) in posed synthetic pictures block wide background (185-picture BER ×1.13)
(0.48 cycle 5) Piece-splitting boundary $\Delta E$ 20 → 12 in restoring attached parts 185-picture BER ×1.000; development screening better 8 · worse 6. On 113 of 400 hold-out pictures: candidate 49 · base 52 · ties 12 ($p = 0.84$). Finer pieces increase both what is returned and what is removed
(0.48 cycle 6) Stopping scene filling at a sharp color change ($\Delta E \ge 20$) in front of bright pixels ($L^* \ge 70$), the counterpart of the dark-area block 185-picture BER ×1.017; 51% of development pictures changed, screening better 6 · worse 8. On 236 of 400 hold-out pictures (128 in the blind test): candidate 60 · base 47 · ties 21 ($p = 0.25$). Pictures where bright clothes are kept and pictures where bright background stays are mixed
(0.48 cycle 7) Finding the scene inside a wide frame margin around the picture (filling the margin with inner values and using it as the picture border) 0 of 185 changed; only 1.5% of development pictures (4: better 3 · similar 1). Only 1 of 400 hold-out pictures changed, so even 7 rounds for the candidate and 1 tie give $p = 1$ at the picture level
(0.48 cycle 8) More look-back steps, 3 → 5 · 8, in the dark-area block (scene filling stops in front of dark pixels) It returns black sleeves · legs · hats but also night skies · dark cities · walls. 8 steps: 185-picture BER ×0.994 but development screening better 5 · worse 9; 5 steps: ×1.000 · 3 : 3. The 5-step version went to 8 blind rounds over the 131 of 400 hold-out pictures that changed: candidate 42 · base 58 · ties 28 ($p = 0.13$). One block cannot tell dark clothes from dark backgrounds
(cycle 9 after 0.48) Region vote: at the end of background detection, a weighted sum of 40 region features per color region (fitted on the synthetic ground-truth set) + a graph cut, adding and returning The 185-picture resolving power rose to 9.67× version 0.1 (synthetic pictures), but in 8 blind rounds on the 400 hold-out pictures: candidate 53 · 0.48 69 · tie 6 ($p = 0.17$). On AI-generated pictures it sent character edges (hair tips · ornaments · edges of white clothes) to the background
(cycle 10 after 0.48) Region vote with thresholds only · protecting character tips (no adding for regions under 1% of the picture or in head zones) · returning only 39 · 42 · 50 · 48% in development screening by graders (bar 60%), all short. The candidate with tip protection: on the 400 hold-out pictures candidate 53 · 0.48 54 · tie 1 ($p = 1.0$)
(0.49 preparation) Returning by instability across repeated runs (background stage rerun mirrored · at 0.7 · 0.85 · 1.15×, counting removals per region) AUC 0.55 · 0.63 for background vs character on the development region ground truth; the interval of the area-weighted loss difference crosses 0, worse pictures 26 > better 11
(0.49 preparation) Protecting hair by hair texture alone (structure-tensor orientation coherence and 4 more) Hair vs background AUC 0.78, short of the preset bar 0.80. The texture features are used inside the 0.49 statistical formula
(0.49 preparation) Treating pictures without faces as pictures without characters and removing more Of 36 development pictures without a found face, only 5 really had no character (precision 0.14)
(0.49 preparation) Removing remaining background by the region-feature formula alone · by the network score alone On 5-fold out-of-fold scores of the development region ground truth, 74.5% · 72.1% of the removed area was background, short of the 80% goal (75% breaks even when character loss counts 3×)
(0.49 preparation, cycle 11) Removing by one formula mixing the network score with the region features 75.9% out of fold and 83 : 51 pictures looked better, but in 8 blind rounds on the 400 hold-out pictures: candidate 57 · 0.48 70 · tie 1 ($p = 0.29$). “Removes more background but cuts off pieces of hair · ornaments · clothes · wings”
(0.49 preparation) Returning already removed regions whose network score is high Out of fold: better pictures 28 · worse 49
(0.50 preparation) Retraining the network (boundary cells weighted 2× · character cells swallowed by the background stages weighted 3× · augmentation that paints character clumps as background into the input background map · 1,200 more synthetic training pictures) and returning regions that went to the background along with removal On 85 development pictures (networks from folds that did not see them), two graders compared the 62 changed pictures blind: candidate 26 · 0.49 32 · same 4 (candidate win rate 45%, Wilson 95% 33–58%, $p = 0.51$). It lost 12 : 20 on the 33 pictures with mostly returning, and the notes mostly say it returned bowls · tables · water · rocks · floor shadows · white background strips as character. The 23 pictures with mostly removal were 12 : 11
(0.50 preparation) Narrowing returning by region shape (not touching the picture border · share of the perimeter touching character · face-anchored body zone · enclosed by lines, and 12 combinations) No combination passed the preset bar (character share of returned area 60% or more · returning 30% or more of the character area that went to the background · more improved than worsened pictures). Even the best, “not touching the border”, had character share 56% · returning 23% · improved 10 : worsened 11
(0.50 preparation) Returning with the statistical formula as a restraint on the network score (both thresholds passed · formula features and network score in one logistic formula) With thresholds chosen for a character share of 60% or more, combining with the 0.49 network in one formula reached a character share of 84% but returned only 6%. With the retrained network, 48% · 5%
(0.50 preparation) A network without the background map in its input (character recognition from picture · lines · faces only, trained quickly on 600 synthetic pictures · 6 epochs) with the statistical formula AUC for separating character among regions that went to the background was 0.667, no better than the network with the background map (0.705) or the formula alone (0.687). The best rule had character share 51% · returning 13% · 3 : 3. Merely hiding the background map from an already trained network lowered AUC from 0.705 to 0.618 (0.49 network 0.723 to 0.645)
(0.50 preparation) Whether a region that went to the background continues in color with the neighboring character region (non-line boundary · including line boundary · most similar neighbor) Character vs background AUC 0.47 · 0.53 · 0.44, no separating power. Background next to the character is just as often of a similar color
(0.50 preparation) Treating a piece whose border run ends at a crisp outline on both sides with background beyond as a body continuing outside the picture On 330 candidates touching the border (44 character · 286 background), AUC 0.54; among pieces with at least half such ends, character share 10%. Hair · legs usually continue softly into neighboring color regions at the border, so crisp lines are rare at region-level ends. Pieces touching a picture corner differ (background 38% · character 9%)
(0.50 preparation) Widening the return of body parts cut off by the border (in step 7 of 3.5, area cap for border pieces 6% → 12%, perimeter touching the character 75% → 60%) Of 176 development pictures with a sure face, in the first 78 only 3 pictures changed: improved 0 · worsened 2. More background came back as character than character was recovered. Not adopted
(0.51 preparation) A rule to return arms · hair near the border: after step 7 of 3.5, re-split the remaining background at faint color edges (ΔE 8 or more across 2 px) and lines, and sort each piece by color-distribution comparison · share of perimeter on the border · share joined to the character without a line · area · difference from the face skin color On 508 pieces (106 character) of the 207 development pictures with region ground truth: AUC color distribution 0.69 · border share 0.66 · skin color 0.50 · joined share 0.44. Anime skin is almost the same color as white · pale backgrounds, so many background pieces are ΔE 0 from the skin color. Split the pictures in half: a rule chosen on one half returned area of which the character share was 72% there but 44% on the other half, improved 12 · worsened 13; chosen on the other half, no rule passed the gate (improved > worsened, character share ≥ 60%). Not adopted
(0.51 preparation) Cutting out with graph cut (GrabCut), starting from the 0.50 result with faces as sure character; two variants, one with the scene-background stage-1 area set to “unknown” On one user picture with a rim-lit arm, neither variant brought the arm back and both cut away even the skin beside the armpit. The color models are learned from the starting labels and the boundary cost is only neighbor color contrast, so the cut follows the dark clothes · hair outlines and drops pale skin. Not adopted
(0.52 preparation) Candidates that refine the cutout-model result: averaging with the probability of the mirrored picture (TTA) · cohesion (pixels at 0.1–0.3 or more connected to a 0.5-or-more blob also character) · snapping to color regions (each region decided by its mean probability) · the model alone with no core steps after it Mean BER on the 14 cutouts posted with the pictures (0.51 0.0851): mirror average 0.0900 (worse) · cohesion 0.1 · 0.2 · 0.3 0.0830 · 0.0820 · 0.0822 · snapping 0.0849 · 0.0883 (worse) · model alone 0.0928 (worse). Synthetic set A, 299 pictures (0.51 0.0639): mirror average 0.0588 · cohesion 0.1 0.0586 · model alone 0.0464. Those worse on the pairs were dropped; cohesion passed but was below the addition (below) and was not adopted
(0.52 preparation) Instead of sending floating small pieces (under 1.5% of the picture) to effects by size: a wall rule (character if more than half of the perimeter is line) · wall + base-color rule · cancelling the rule; and keeping line cleanup off pixels the model calls character 14 pairs: rule cancelled 0.0838 · wall rule 0.0838 (improved 4 : 2) · wall + base color 0.0850. Line-cleanup restriction 0.0819 (7 : 3), synthetic set A 0.0517 (205 : 16): the 0.51 line cleanup was moving a whole line blob, outline included, to the background whenever more than half of it lay on the background. 0.52 skips the core steps after the model, so both drop out naturally (the comparison “addition + wall rule + line-cleanup restriction” gives 0.0778 on the pairs and 11.77× version 0.1 on the 185)
(0.52 preparation) Ways to combine the cutout model with the previous method (neural network + statistics): character only when both say so · when either says so · addition $p + \alpha\,(c - 0.5) \ge 0.5$ with α ∈ {0.2, 0.4, 0.6} 14 pairs: both 0.0793 · either 0.2062 (only 59% of background found) · addition 0.2 · 0.4 · 0.6 0.0779 · 0.0778 · 0.0779. Synthetic set A: both 0.0848 · either 0.1271 · addition 0.0454 · 0.0452 · 0.0454 → α 0.4. Confirmed on set B, 199 pictures: 0.51 0.0493 → 0.0293 (improved 0 : 0). Adopted (0.52)
(0.52 preparation) The pixel score $s$ of the 0.49 network (sigmoid of its logit, a 128-px-long-side grid enlarged bilinearly to full size) as a third term: $p + 0.4\,(c - 0.5) + \beta\,(s - 0.5) \ge 0.5$, β ∈ {0.1, 0.2, 0.4} 14 pairs (addition 0.4 0.0778): β 0.1 · 0.2 · 0.4 0.0773 · 0.0772 · 0.0780. Synthetic set A (0.0452): 0.0451 · 0.0450 · 0.0445. Set B (0.0293): 0.0289 (β 0.2). Did not pass the gate, not adopted (the previous method’s decision c already contains the 0.49 network’s agreement deletion)
(0.53 preparation) Raising the weight of the previous method on a log scale where the model falls short (fixed before looking at results). Per picture: with the model’s character area $A_m$ and the previous method’s character area $A_c$, $\alpha = \min\bigl(1,\ 0.4 + \gamma \ln \max(1, A_c / A_m)\bigr)$, γ ∈ {0.2, 0.4, 0.8}. Per blob: for each blob where the two decisions disagree, with the model uncertainty $U$ (mean of $-\ln(\lvert 2p - 1\rvert + 0.01)$), $\alpha = \min\bigl(1,\ 0.4 + \gamma \ln(1 + U)\bigr)$, γ ∈ {0.1, 0.2, 0.4} No version passed the gate (choose γ on synthetic set A, then on set B · the 14 cutout pairs a lower mean BER than 0.52 and more pictures improved than worsened). Cutout pairs (0.52: 0.0778): per picture 0.0500 (improved 5 : worsened 7) · 0.0852 (3 : 9) · 0.1812 (1 : 12), per blob 0.0777 (4 : 7) · 0.0776 (5 : 6) · 0.0774 (3 : 8). Set A (0.0452): per picture 0.0406 (74 : 109) · 0.0498 (70 : 120) · 0.0803 (59 : 133), per blob 0.0452 (110 : 137) · 0.0452 (115 : 144) · 0.0449 (110 : 158). Per picture with γ 0.2 lowered the mean a lot (Bulbasaur fan art 0.500 → 0.106) but slightly worsened many pictures whose area ratio is just above 1. Not adopted
(0.53 preparation, after seeing results) Turning the per-picture log weight on only when the area ratio is large enough: $\alpha = \min\bigl(1,\ 0.4 + \gamma \max(0, \ln(A_c / A_m) - \tau)\bigr)$, τ ∈ {ln 2, ln 4}, γ ∈ {0.2, 0.4} Set A (0.0452): τ ln 2 · γ 0.2 0.0409 (28 : 34) · γ 0.4 0.0420 (25 : 38), τ ln 4 · γ 0.2 0.0411 (14 : 10) · γ 0.4 0.0410 (13 : 11). The lowest of those passing the gate, τ ln 4 · γ 0.4, was checked on the not-yet-seen set B: 0.0293 → 0.0303 (3 : 11), worse, so not adopted
(0.53 preparation, after seeing results) Only pictures where the model missed the character use the previous method: when the model’s character area is under 1% and the previous method’s is 5% or more, that picture uses the previous method’s decision as it is (α = 1). 1% · 5% are the first values set; no other values were compared Only pictures that trigger it change. Synthetic set A 12 pictures (improved 9 · worsened 3, mean 0.0452 → 0.0411) · set B 1 (0.0293 → 0.0285) · cutout pairs 1 (Bulbasaur 0.500 → 0.106, mean 0.0778 → 0.0497). The rule was made after seeing the Bulbasaur picture, so the pair value is not out of sample. Adopted (0.53)
(0.54 preparation) Reducing the two remaining causes of loss in 0.53 (colored like the background · edge) with decision rules (candidates and gate fixed before looking at results): filling the empty part of the model’s input frame with edge replication · mirror reflection (also with an inner margin) instead of black, cohesion on the added map, 2×2 tiles at two scales, contrast boost, attaching blobs of the previous method, the mean · maximum of black and reflected probabilities, reflected bands (64 · 128 px). Gate: chosen on synthetic set A, confirmed on set B · the 14 cutout pairs · 176 AI-generated pixiv development pictures (region ground truth) as not worse than 0.53 None passed every gate. Mirror reflection was better only on synthetic set A (0.0411 → 0.0337) and worse on set B · AI-generated pictures (the character’s mirror image flips the decision of the whole picture). Only the black · reflected mean passed set A · set B · the 176 with the pairs at 5 : 6 (noise level), but it did not recover character on AI-generated pictures (recovered character −0.03 on the 176) and needs two model runs, so it was not adopted. Diagnosis: most lost pixels are places where the model is confidently wrong with probability under 0.3 (3.6% of character pixels in synthetic set A are right by the previous method and wrong by the model), so thresholds · filling · cohesion cannot reduce them → train the model itself further
(0.54 preparation) Using only the fine-tuned cutout model: the same network trained further on synthetic set A 290 (pixel ground truth, 10 composites sharing characters with the pairs excluded) + AI-generated pixiv development 292 (the mean of the original model’s black · reflected probabilities as soft targets), black · reflected filling at random, horizontal flips, BCE + soft IoU, learning rate 2e-5, 12 epochs (about 19 h, CPU). Gate: set B improved > worsened, the 14 pairs not worse, ΔW ≥ 0 on the 176 Synthetic set B improved a lot (0.53 0.0285 → last epoch 0.0217; best epoch 8 0.0181). On the 14 pairs the targeted losses fell (character kept 97.6 → 99.4%, boundary band colored like the background kept 43 → 95%), but aura · flame effects and background attached to the character were taken as character: background found 92.5 → 89.3%, mean BER 0.0497 → 0.0561 (improved 5 · worsened 7), ΔW -0.08 on the 176 → gate failed. Added pixels on the 14 pairs were 801k true background · 118k true character, and the previous method also calls those effects · buildings character, so it cannot tell them apart. The likely cause is that the training data has no example of “effects · props attached to the character = background”. Not adopted on its own
(0.54 preparation, after seeing results) Having decided to use the fine-tuned copy, passing the gate with a decision rule: 24 single-model thresholds · weights (τ 0.8–0.99 · α 0–0.4) and 10 two-model combinations (weighted mean · geometric mean · 0.53 decision ∨ new model ≥ τ · floor on the original model). Candidates written down first, then scored on the 14 pairs · set B; if several pass, single-model rules first, then the lowest set B Every single-model rule failed: some passed the pair mean (best 0.0494) but worsened more set B pictures than they improved. The two-model mean $(p_0 + p_1)/2$ passed: pairs 0.0497 → 0.0483 (improved 5 · worsened 3), set B 0.0285 → 0.0203 (improved 124 · worsened 60), ΔW +0.02 on the 176. The runner-up “0.53 decision ∨ new model ≥ 0.9” recovered the most character (kept 99.5%, set B 0.0168) but failed the pair count 3 : 4. One picture (a character against pink buildings) is not fixed by any rule. The mean was then refined by the mixing optimization in the next row
(0.54 preparation, after seeing results) Optimizing the weights · threshold that mix the statistics and the two models: $w\,p_1 + (1 - w)\,p_0 + \alpha\,(c - 0.5) \ge \tau$ with w · α ∈ 0–1 (step 0.1) and τ ∈ 0.30–0.70 (step 0.05), 1,089 combinations (missed-character rule unchanged). Rule written down first: lowest set B, subject to the pairs not worse than the plain mean and improved ≥ worsened, confirmed by ΔW on the 176 175 combinations passed the pair gate. The lowest set B, w 0.4 · α 0 · τ 0.35 (0.0189), drops the statistics and lowers the threshold, so background follows the character on AI-generated pictures (ΔW -0.20 on the 176) and it failed. Going down the set B order, the first combination with ΔW ≥ 0 and improved ≥ worsened on the 176, w 0.4 · α 0.4 · τ 0.55, was adopted (0.54; the four in between had ΔW < 0 or more worsened than improved on the 176, and some further down, such as w 0.5 · α 0.4 · τ 0.60 (set B 0.0202, ΔW +0.17), also beat the plain mean on all three sets): pairs 0.0497 → 0.0456 (improved 6 · worsened 3, kept 99.2% · found 91.7%), set B 0.0285 → 0.0200 (improved 119 · worsened 63), ΔW +0.12 on the 176 (improved 112 · worsened 48). The statistics weight α stayed best at 0.4. Because the choice was made on the 14 pairs · set B, their 0.54 values are not out of sample, and the 176 are training data, reference only
(0.55 preparation) Training the cutout model further to count effects (glow · particles · light rays) as background, to return to a single model (four gates and the selection rule registered before looking at results: synthetic set B 199 ≤ 0.54’s 0.0200 with improved ≥ worsened, the 14 cutouts posted with the pictures ≤ 0.0456 with improved ≥ worsened, a new effect-composite set rceB of 100 < 0.0383, ΔW ≥ 0 with improved ≥ worsened on the 176 AI-generated pixiv development pictures with region ground truth; selection = lowest set B among those passing the pairs · rceB; candidates = epochs and epoch averages): from the 0.54 copy, on synthetic set A 290 + 300 effect composites (generated on the fly during training, effect pixels as background ground truth) + 292 AI-generated pixiv development pictures; plan A 12 epochs (lr 2e-5) · plan B 6 epochs (lr 5e-6) Plan A, S2 (mean of epochs 4 · 6 · 8 · 9 · 10 · 11): in 8 bits set B 0.0132 (63:34) · pairs 0.0381 (6:4) · rceB 0.0283 passed, ΔW on the 176 -0.549 (60:105) failed (the character missed entirely on two pictures — 0.54 falls back to the previous method when both models miss, which a single model never triggers). Plan B, S1b (uniform mean of epochs 0–5): set B 0.0118 (52:35) · pairs 0.0388 (6:2) · rceB 0.0182 passed, ΔW -0.131 (57:108) failed — character regions +0.001 (no loss), background regions -0.133 (bowls · props taken as character): a single model loses the “veto” the original model holds over background objects in the 0.54 mix. The single-model rule is shelved (training with background-object negatives is needed)
(0.55 preparation, after seeing results) Replacing only the fine-tuned copy in the 0.54 mix with plan B’s copy (S1b) and looking at w ∈ {0.4, 0.5, 0.6} (α 0.4 · τ 0.55 · fallback as in 0.54; the same four gates) w 0.4 fails the pairs (0.0455, 2:4); w 0.5 set B 0.0184 (37:20) · pairs 0.0440 (3:3) · rceB 0.0271 · ΔW +0.034 (88:73); w 0.6 set B 0.0181 (39:25) · pairs 0.0370 (4:2) · rceB 0.0257 · ΔW +0.049 (82:80). Re-scored with the 8 bits the app actually ships (original scales + difference), the rule’s pick w 0.6 gives ΔW +0.047 (78:83), flipping the picture-count condition (the two quantizations differ on 0.023% of pixels), so it was stopped as written down. After seeing results, w 0.5 was registered: all four gates pass under both quantizations (set B 0.0184 (36:21) · pairs 0.0440 (3:3) · rceB 0.0269 · ΔW +0.033 (83:77)) → 0.55. A value inside the grid with the gates unchanged, but the choice is post hoc

Note — Why: Methods not adopted must be measured by the same standard to show why the current method stayed. The 𝑝 values in the table are sign-test or exact-test values from paired gradings (formulas in 11.1). How it works: The line-detection window $\max(1, \mathrm{round}(4s))$ was an attempt to make the 4px window at a 1000px long side proportional to the size ratio 𝑠 without the floor of 3. On small pictures the window shrank to 2px, fewer lines were found and results got worse. References: R85 Dixon · Mood 1946 · a rule set by this program


8. Optimization

Target Method Effect
Dilation · erosion 1D sliding max/min split into rows · columns, monotonic deque $O(1)$ per pixel regardless of radius
Gaussian blur 3 box blurs, cumulative sums $O(N)$ regardless of radius
Spreading computations (fills, distances, inpainting) breadth-first search over the front only, visiting in distance order each pixel visited once
Background color model graph cut on regions (thousands) instead of pixels, Dinic maximum flow solving thousands of regions instead of millions of pixels stays light even repeated 4 times
k-means at most 50,000 samples (40,000 for the color model), k-means++ initialization, early stopping clustering cost independent of picture size
Layer storage stored cropped to the rectangle with content, empty layers not made saves memory and PSD size
PSD compression PackBits RLE per channel row layers with large transparent areas become very small
Where computation runs Web Worker, result buffers moved (no copy) the screen does not freeze during computation
Rough thinning repeats while removing deleted pixels from the candidate list; each stroke segment computes only the pixels in its bounding box, and each pass stacks only the pixels it touched thinning looks again only around lines each iteration; drawing is proportional to stroke length × width (two roughs: median of 12 pictures, measured after one warm-up run, 0.63 + 0.64 s (0.46) → 0.74 + 0.90 s)
Color conversion 256-entry table for sRGB linearization skips power computations
Preview caches the opaque copy of clipping base layers, rebuilds canvases only for layers changed by corrections turning layers on/off · corrections are reflected immediately
Correction undo stores only the rows of the changed rectangle undo memory stays small even for large pictures
Stage isolation fixed random seeds per stage, immediate return outside the operating condition new stages do not change results of existing pictures (regression checks can compare bytes)
Re-splitting after corrections the automatic background result (background · returned-part marks, faces) is kept in the worker and reused when the picture content hash and line settings are the same core computation per correction median 8.0 → 5.1 s, on screen 10.0 → 8.3 s (17–35% faster on three test pictures). Only two picture-sized byte maps are stored

Note — Why: Processing large pictures in seconds in a browser needs methods whose cost does not grow with radius or picture size. How it works: $O(1)$ means constant work per pixel regardless of radius, and $O(N)$ means work proportional to the pixel count 𝑁. Sliding max/min with a monotonic deque needs only a few comparisons per element, and a box blur with running sums needs one addition and subtraction regardless of window size. References: R16 Lemire 2006 · R17 Wells 1986 · R27 Dinic 1970


9. Strengths


10. Limitations

10.1 Picture types · lines · effect layers

10.2 Separating background and character

10.3 Faces · names · character folders

10.4 Parts and base colors

10.5 Size · tilt · stability

10.6 Weaknesses seen through the five targets, and a call for help (0.39)

Two kinds of pictures were used to measure in which cases 0.39 separates the background, body, base colors, faces, and objects correctly and in which it goes wrong (method and per-case tables in 11.13).

  Background Body Base colors Faces Objects
Synthetic: good 77.8% 72.0% 23.6% 42.6% 79.5%
Synthetic: good, 95% CI 76.9–78.6% 71.1–72.8% 22.8–24.5% 41.6–43.6% 78.6–80.4%
Synthetic: good, 80% CI 77.2–78.3% 71.4–72.5% 23.1–24.2% 42.0–43.2% 78.9–80.1%
Real: no problem 47.6% 75.4% 10.9% 45.8% 52.8%
Real: no problem, 95% CI 43.8–51.5% 71.9–78.5% 8.8–13.6% 42.0–49.7% 47.7–57.8%
Real: no problem, 80% CI 45.2–50.1% 73.2–77.5% 9.5–12.6% 43.3–48.3% 49.5–56.1%
Pictures (synthetic · AI-generated) 10,080 · 657 10,080 · 650 10,080 · 650 10,080 · 644 8,064 · 373

Intervals are Wilson intervals (z = 1.96 · 1.2816). Objects are counted only on the 8,064 synthetic pictures that have one, and AI-generated pictures without the target (no background to remove, no visible face, and so on) are left out. The synthetic pictures are not a random sample but every combination of fixed levels, so their intervals are the precision of the rates within this design.

The weaknesses found are below. Real-picture counts are the numbers of grading sheets given that type (small problems included).

Weakness Evidence
Base colors: Materials painted with more shade than lit area take the shade color as their base color Synthetic: adding wide shadows drops good from 38.2% to 5.3%; every button material is wrong
Base colors: Different materials share one base color, and scenery · brush paintings break into patchwork Real: “different materials in one color” 577, “patchwork” 467 (of 650)
Faces: Lying and face-down faces Synthetic: lying, seen from above 1.7%, lying on the side 0.0%, lying on the stomach 0.0%, face down on a desk 8.3%
Faces: Dark skin, head turned 60° Synthetic: dark skin 0.0%, head turned 60° 14.4%
Faces: Missed and false faces Real: missed 423, false 255
Background: A room drawn with lines (furniture, window frames) stays on the character side Synthetic: good 0.0% (background found averages 51.8%)
Background: Scenery, text, and effects stay on the character side Real: scenery 417, text · signature 200, effects · light 145
Body: Dark hair, clothes, and shoes in front of a dark flat background go to the background Synthetic: body good 11.4% (head lost in 52%, feet in 88%, skirt in 24% of the pictures)
Body: Hair, clothes, and white parts are lost Real: hair 161, clothes 147, white · pale areas 72
Objects: A box on the floor beside the character stays on the character side Synthetic: good 37.1%; real: loose items kept with the character 208
Objects: A background-colored bag in front of a dark flat background Synthetic: good 6.0%

In 0.40, the floor of line-drawn rooms is found, so on the 1,680 synthetic room backgrounds the mean background found went 51.8 → 76.3% and body good 93.3 → 100.0%. The windows (the glass inside the window frames) remain, so background good on this background is still 0% (0.40 in 12).

Help wanted

We are looking for people to help solve these weaknesses. Anyone who knows image processing or how illustrations are painted is welcome.


11. Verification

For every picture, the PSD was recomposited with psd-tools (Python) and compared with the original, and its structure was read with ag-psd (JavaScript) to check that the layer · folder counts match the program. Checks of the layer structure (names, blend modes, clipping bases, empty layers, canvas bounds) found 0 problems, and splitting the same picture twice gave byte-identical pixels in every layer. It was also run with all external network requests from the browser blocked (0 external requests).

Note — Why: This gathers in one place which formulas produce the statistics in this section (shares, intervals, 𝑝, odds ratios, 𝜅, resolving power). How it works: All values come from the formulas of 11.1: reconstruction accuracy is PSNR (4.13), separation accuracy is the BER and its reciprocal, the resolving power (11.14), intervals for shares are Wilson intervals, and intervals between versions use a paired picture-level bootstrap. References: R55 Huynh-Thu · Ghanbari 2008 · R56 Wilson 1927 · R80 Efron 1979

In this section:

11.1 Formulas used for evaluation

11.2 The 25 test pictures

Picture Features Parts Reproduction PSNR Time
Sample picture (800×800) cel shading, flat background 6 65.1 dB 4 s
Girl on a dark background (2000×1125) white hair, thin lines, light-beam effects 17 53.8 dB 10 s
Magical girl (1200×800) colored lines (color trace), curtain background, glitter 26 60.2 dB 6 s
Classroom (800×1200) low-saturation watercolor style, classroom background, props 15 57.8 dB 6 s
Tea party on the moon (1200×675) space · Earth · lunar surface background, two figures 29 53.7 dB 6 s
Café and mascot (961×1200) blurred café background, mascot, parfait 19 60.9 dB 6 s
Crêpe on a rainy street (959×1200) bokeh light background, backlight, long hair 28 + small 1 56.5 dB 7 s
On the bench (961×1200) sunlight dapples through leaves, paving blocks 31 + small 8 54.5 dB 8 s
Café interior, full body (800×1200) finely drawn interior background (blurred texture + sharp furniture) 28 + small 3 51.8 dB 7 s
Two people in the kitchen (1200×930) kitchen drawn with lines, paint-splatter border effect 32 + small 23 53.7 dB 9 s
Beret and book (930×1200) beret cut off at the top, blurred garden background 32 + small 1 52.5 dB 7 s
Silver-haired girl in a classroom (936×1200) jacket · skirt cut off at the bottom, classroom background 29 + small 3 53.5 dB 8 s
Two people, full body (1200×936) full body down to the floor, wings · tails 26 51.0 dB 7 s
Silver-haired gothic lolita (930×1200) neon outer glow, graffiti alley background 30 + small 3 49.4 dB 8 s
Two people in yukata (930×1200) fireworks · food stall background 31 + small 6 58.0 dB 8 s
Two people at a party (1200×930) balloons · snacks, sitting poses 30 + small 3 59.6 dB 7 s
Two people before a night view (1200×930) neon lighting, cat ears, fishnet stockings 27 + small 7 52.0 dB 8 s
Two people at the window (1200×930) city night view, long hair overlapping the background 31 + small 10 58.9 dB 7 s
Close-up of a girl in a hat (1200×800) chin in hand, blurred forest · sky background, handwriting 21 57.8 dB 6 s
Witch and shrine maiden before autumn leaves (1200×1097) autumn leaves · shrine building background, witch hat 30 + small 3 53.2 dB 9 s
Golden dancer card illustration (960×1200) background full of gold ornaments · clouds, glitter 31 + small 7 53.9 dB 9 s
Qipao card illustration (960×1200) plum branches · red lantern background 32 + small 6 54.1 dB 9 s
Miku bust (822×1200) background close to a flat sky color, hair blowing in the wind 30 + small 3 54.9 dB 6 s
Woman in a checked shirt with manga panels (829×1200) indoor floor · wall, two small manga panels 28 49.9 dB 6 s
Elf in a flower field (1200×630) sky · clouds · flower field background, scattered petals 23 64.2 dB 4 s
Others 2048px enlargement, noisy JPEG, transparent-background PNG   55–60 dB  

Times are the splitting time at processing resolution 2048px with default settings, measured one picture at a time in sequence on one computer, and differ between computers. Measured alternately with 0.11 on the same computer, face finding · face-based widening take −0.1–2.4 s (median 0.6 s) more per picture. Face finding itself takes 0.4–0.6 s. Measured alternately with 0.16, 0.17 takes a median of +1% (−12 to +15%), similar to the variation between measurements.

PSNR recomposited with psd-tools: 48–57 dB.

Of the last five pictures, the two card illustrations have only a little background separated (background 7%, 21%). The gold ornaments · clouds · lanterns of the background are drawn with the same dark, crisp lines as the characters, and the background colors overlap the character colors (blond hair · skin, red clothes) a lot (color distribution overlap 0.67, 0.51), so the color model stage does not act, per its safeguard. The qipao picture’s background became 15% → 21% with face-based widening (the pillar on the left · clouds on the floor). The other three have sky · floor · wall · flower field separated as background (36%, 31%, 63%). Witch and shrine maiden before autumn leaves is the same case as the card illustrations (background 11%). The autumn leaves · shrine buildings are drawn with the same lines as the characters, and the leaf colors overlap the red clothes · blond hair (color distribution overlap 0.66).

Returning attached character parts (7 of 3.5)

Parts painted softly without lines that had gone into the background came back to the character.

Picture Parts that came back Background
Silver-haired girl in a classroom pink sleeve of the arm against the face 22.9% → 18.0%
Two people, full body outstretched hand, wing pieces, top of the head, the other figure’s fingers 38.4% → 36.0%
Close-up of a girl in a hat the arm resting the chin 34.9% → 32.1%
Classroom sleeve resting on a book 54.0% → 53.0%
Witch and shrine maiden before autumn leaves hand holding the hat 11.4% → 11.0%
Two people before a night view two cat ears 35.0% → 34.4%
Others flying hair tips, skin between skirts, hems 0.1–0.4%p each

In exchange, a few small background pieces touching the characters came to the character too (one firework piece, a clump of grass, a lantern piece, a gap in a manga panel, two cups on the floor; each 0.1–0.7% of the whole). The other 15 pictures are byte-identical. Overlap (IoU) is 0.791 → 0.791 for the two people in yukata and 0.768 → 0.762 for the two people before a night view (the reference outline was drawn without the cat ear tips and counts the cups as background).

Parts touching the border stay as they are: close-up of a girl in a hat (hat brim, sleeve end), Miku bust (the shoulder at the right of the screen), elf in a flower field (white skirt). Painting once along the arm with Return to character was confirmed to bring 90% of the arm area that had gone into the background back to the character.

Background decisions

Overlap (IoU) with the character regions confirmed by a person.

Picture Before the color model stage After
Silver-haired gothic lolita 0.72 0.90
Two people in yukata 0.71 0.79
Two people at a party 0.58 0.63
Two people before a night view 0.68 0.77
Two people at the window 0.69 0.69

The color model stage acts only in pictures with backgrounds drawn with lines (the five above and the kitchen picture). For the other pictures, results were compared and confirmed to be byte-identical to having no such stage.

Verifying automatic settings

Variants of the sample picture were made by redrawing it in code with different line widths · line colors · resolutions · star sizes, and the same picture was also drawn with “lines only in black” as the ground-truth lines. The share of found line pixels that are ground truth (1px tolerance) is precision, and the share of ground truth found is recall.

Variant Default precision / recall Automatic precision / recall Value chosen automatically
800px, 5px lines (the sample as is) 0.998 / 0.993 0.998 / 0.993 default kept
800px, 2px lines 0.991 / 1.000 0.991 / 1.000 default kept
2000px, 5px lines 0.988 / 1.000 0.988 / 1.000 default kept
800px, 12px lines 0.898 / 0.010 0.991 / 0.924 line width 3 → 8 (measured pen width 13px)
500px, 9px lines 0.990 / 0.304 0.974 / 0.986 line width 3 → 7 (10px)

Variants with faint lines (gray-purple) or colored lines (reddish brown) are the same with default · automatic (recall 0.015, 0.605). Where lines are brighter than the paint, they are not “dark thin structures” and are not found. All 28 test pictures are fine with the default window, so automatic settings also give byte-identical results (measured pen width 4.7–9px, 12.3px for the 2048px enlargement). Measuring the picture takes about 0.3 s per picture, similar to the variation between measurements.

Limits of separating background by meaning

In pictures with characters and background drawn with the same colors · same lines, character outlines were drawn by hand as ground truth, and it was measured how far various methods can separate them. Values are “share of background found / share of character kept” (in 24-color regions, area-weighted); the outlines were drawn roughly by hand, so there is an error of a few %p.

Picture 0.11 0.13 (face finding + sure places only) Eye positions marked by a person + widening only when confident (without the outline condition) Upper bound (colors learned from ground truth + face-based position)
Witch and shrine maiden before autumn leaves 34% / 94% 37% / 94% 51% / 93% 76% / 93%
Two people in the kitchen 5% / 99% 5% / 99% 9% / 99% 60% / 95%
Qipao card illustration 26% / 93% 37% / 92% 39% / 90% 79% / 95%
Two people at the window 52% / 92% 56% / 92% 71% / 91% 86% / 99%
Silver-haired gothic lolita 84% / 100% 86% / 100% 81% / 99% 80% / 100%

The upper bound knows the ground truth in advance, so it cannot actually be reached. Knowing the eye positions finds a little more background, but the same method without eye positions sends half of the two characters in the autumn leaves picture to the background. 0.13 has the program find the eyes instead of a person (fake faces mixed in) and adds only “places connected without lines to existing background” so as not to lose character parts, so it finds less than with person-marked eyes. Averaged over the 8 outline pictures (the five above and the yukata · party · night view pictures), background found is 49.9% (0.11) → 51.9% (0.12) → 52.5% (0.13), character kept 96.7% → 96.5% → 96.5%, and the share of regions entirely right 79.8% → 80.4% → 80.7%. The character lost is mostly in the qipao picture (92.6% → 91.5%): gold cloud ornaments at the bottom edge of the screen and branch · floor pieces that were inside the roughly hand-drawn outline.

Face finding

A person marked eye positions for the 31 faces showing both eyes in the 24 test pictures, and it was measured with the average pattern built from the other pictures (leaving one picture out at a time). At threshold 11, 30 of 31 were found (the one missed was the face in the backlit picture, score 10.4), and non-faces were also seen as faces, 2 per picture on average (knees, hands, bowls, clothing patterns, background decorations). Raising the threshold to 12 more than halves the fakes but finds only 26 of 31, and characters with missed faces leak into the background (character kept: autumn leaves picture 94% → 81%, qipao picture 93% → 86%), so it stays at 11. With the average pattern in the program (built from all 31), 1–6 faces were found in the 27 pictures excluding the transparent-background PNG.

What face-based widening changed

For pictures without drawn character outlines, results were placed side by side with the previous ones and each newly background place was looked at. Two people, full body (buildings behind, background 36% → 42%), elf in a flower field (sky · flower field pieces, 59% → 63%), and magical girl (curtain seen between hair, 58% → 59%) separated more background without touching the characters. The other pictures lost small background pieces around them (window frames, leaves, wall pieces) by 0.1–0.9%. The character-side loss was a few shirt-hem pieces already surrounded by background in the Miku bust (under 0.1%). In 0.12, the sample · party · night view · window pictures and the 2048px enlargement found faces but had no background to add, so the results were byte-identical. When 0.13 filtered fake faces, the window picture (city night view · curtain behind, background 23.8% → 25.8%) and the yukata picture (18.7% → 19.5%) separated further, and the tea party on the moon · café interior · close-up · autumn leaves pictures changed within 0.1–0.3%p (in the tea party on the moon, one small piece of the left figure’s collar came off too). Transparent-background PNGs do not get background finding, but from 0.19 their faces are found and named (transparent-background sample: “purple” → “hair”, “blue” → “eyes”; pixels identical).

Part names (eyes · skin · hair)

Naming was re-verified in 0.18.

Synthetic pictures with ground truth: 48 pictures were made by redrawing the sample picture in code with 10 hair colors, 4 skin colors, 4 sizes · positions, tilts of ±15°–45°, hair exposing the forehead, long hair, clothes of the hair’s color, white clothes + pale skin, flesh-colored props, no lines · colored lines · thin lines, dark · gradient · flesh-colored backgrounds, landscape · portrait pictures, and two people (different hair colors · same hair color · different sizes), and material maps were drawn with the same shapes as ground truth. Counted in pixels excluding a 3px band at material boundaries.

  Hair precision / recall Skin precision / recall Eyes precision / recall Pictures with wrong names
0.17 98.3% / 73.5% 90.1% / 92.7% 100% / 51.0% 11
0.18 99.7% / 81.2% 97.3% / 93.7% 100% / 52.3% 1 (dark skin: the face was not found and only a fake face remained)
0.19 99.7% / 85.8% 97.3% / 97.6% 100% / 53.9% 1 (the same)

There were six causes of wrong names in 0.17: choosing a part with 0 votes as “hair” for hair exposing the forehead; choosing a shadow on the white of the eye as “hair” (in this drawing style the found eye position is 0.22𝑑 too low, so the white of the eye reaches into the bangs cell; for the 30 faces in AI-generated pictures it is −0.07 to +0.07𝑑); filtering the face of a second character with a small head as fake; treating two characters with a size ratio slightly over 1.8 as one character; calling a pale face + light hair in one part “skin”; and a fake face on a collar giving the clothes “skin”. Eye recall is low because only the pupil parts that get the name are counted, while the whites of the eyes become one part with collars · shirts.

25 AI-generated pictures: 24 pictures got meaning names (skin 21, hair 23, eyes 3; 62 parts in all). Painting the named parts over the pictures and looking at all of them, all 4 eyes were eyes, and for skin · hair too, roughly 9 out of 10 parts were mostly what their names said. Of those wrong in 0.17, the black dress of the neon alley picture (“hair”), the teal apron of the kitchen picture (“hair”), the yellow clothes of the close-up (“skin”), the skirt of the night view picture (“hair”), the ribbon of the window picture · the hair piece of the autumn leaves picture (“eyes”), the eye-white shadow of the sample picture (“hair”), and the white part of the café and mascot picture (“hair”, the 0-vote defect) are gone, and the witch’s blond hair in the autumn leaves picture (a lower-scoring second character) newly got “hair”. The leg skin of the left girl in the window picture lost its name, which a fake face had given it. The remaining errors are where a part is grouped in one color with another object: the pinkish white hair of the backlit picture (one part with “skin”), and the notebook in the classroom picture (the same cream color as the hair). In the café and mascot picture, the pale face and blond hair are one part, so no name is given. The Miku bust and the left figure of the two people, full body picture have bangs split into several colored parts, so they have no hair name. Layer pixels · layer counts · reproduction PSNR are unrelated to the naming rules (in 0.18 the only picture whose pixels changed was the tea party on the moon, with a fake face removed), and both PSD parsers read the Korean names.

Left-right flipping: splitting the left-right flipped picture, flipping the name map back, and overlapping it with the original (area-weighted IoU), only 42% of hair, 61% of skin, and 48% of eyes overlap (0.17 also 41%, 59%, 42%). Face scores change by up to ±1 from flipping alone (the witch’s face in the autumn leaves picture is not found when flipped), and whether materials of very similar colors (white hair and pale skin, $\Delta E$ around 5) become one part changes with the color cluster samples. This is a stability problem of face finding and part splitting, not of the naming rules (10). In 0.19 the causes were separated. Over all 25 pictures, the background is the same for 98.7% on average (lowest picture 92.8%), and the character count is the same in 24. The difference in face scores comes from the average face pattern not being left-right symmetric and from the eye refinement starting with the left eye. Making both symmetric brings the score difference to 0, the background to 99.2% (lowest picture 97.7%) and the same character count in 25, but the name map overlaps fall to 34 · 52 · 34% and names in the original orientation get worse, so it was kept (7.5). Making color clusters independent of pixel order (color bin histogram) leaves name overlaps almost the same at 43 · 58 · 43%. Background fill · material grouping · part cleanup all merge greedily in pixel order.

Character folders

All 7 test pictures with two people were split into [Character 1] · [Character 2], and the other 18 stayed in one [Character] folder (0 cases of one-person pictures gaining characters through fake faces of knees · shoes · clothing patterns; the profile figure with closed eyes in the tea party on the moon and the small figures in the manga panels of the checked-shirt picture are not split off). In the four pictures with person-drawn character outlines, the share of pixels inside only one of the two characters’ outlines that went to the right character folder is yukata 99.2%, party 93.2%, night view 98.1%, window 96.3%. The first method (spreading only from small seeds at the face centers) gave 90.0–94.1%, and raising the line cost 5–13× made even clothing pattern · hair grain lines walls, worsening it to 80–93%. The composite (reproduction PSNR, preview) is the same as with one folder for every picture, and in two-person pictures too, send to background · return to character · undo work as before. In 0.19 the four pictures’ results are byte-identical to 0.18, and all wrong pixels were at the seam where the two characters touch (a band one hair strand wide). Changing the size of the seed zones made no difference (7.5). With background separation off, the character count was the same in all 25 pictures (up to 0.18, faces were not searched, so there were no folders · names).

Outer glow

The share of fluorescent colors in the border band was 23% for the silver-haired gothic lolita (4.7% inside) and 30% for the two people in yukata (4.6% inside); the other 23 pictures were under 15% or similar to the inside (elf in a flower field 30% vs 10% inside). For the silver-haired gothic lolita, the neon band around the character came off into the “Outer glow” layer (5.0% of the whole), and 3 glow pieces scattered as small parts on the character side disappeared. The two people in yukata surround only 26% of the boundary, so it was not done. The other 27 pictures are byte-identical. In 5 synthetic glow pictures (green · pink · teal · yellow · thin orange, blur radius 4–12px), only the green glow on a flat background was split (37% of the glow core). The rest did not meet the fluorescence condition ($L^* > 60,\ C^* > 45$) (teal $C^*$ 40, pink spread on a dark background $L^*$ under 60) or had a band fluorescence share just below the threshold (yellow 17.9%). In 52 synthetic pictures without glow, wrongly split glow was 0. In AI-generated pictures without glow, the fluorescence share of the character-side band also rises to 35% (kitchen 35%, yukata · elf in a flower field 30%), so the fluorescence condition was not widened (10).

Note — Why: This shows which condition excluded the synthetic glows that were not separated. How it works: Fluorescence must exceed both $L^* > 60$ (lightness) and $C^* > 45$ (chroma), so teal at chroma 40 and pink below lightness 60 drop out (4.5, outer glow). References: R7 CIE 2004

11.3 57 synthetic ground-truth pictures (0.19)

The figure of the sample picture was redrawn in code, drawing ground truth for the character region · character number · glow · eye positions together. 6 backgrounds (flat, gradient, dark flat, a room drawn with lines (window · shelves · flower pots · wooden floor), stripes, bokeh) × 6 figures (purple hair, black flat hair of the outline’s color, black hair · purple hair with grain strokes, two people (purple + blond, black + pink)), 5 glow pictures, 5 skin colors, left-right mirroring, tilt ±30°, size 0.4–1.2×, three people · two overlapping people, 2 figures without lines, 1 with colored lines. Counted excluding a 3px band at the character boundary.

  0.18 0.19
Background found 90.3% 93.2%
Character kept 81.10% 97.62%
Faces found (of 73) · fake faces 57 · 7 70 · 8
Pictures with the right character count among 15 with two or more people 10 15
Share of character pixels going to the right character folder 95.5% 99.8%
Hair · skin name precision 99.3% · 80.6% 99.5% · 92.3%

In 0.18, black flat-haired characters whose outline had the hair’s color became background entirely in two-person pictures (flat · gradient · stripes · bokeh backgrounds) and on the room background drawn with lines, no background at all was found in front of the gradient sky, and in front of the dark flat background the purple hair · clothes became background (8 of 3.5, 7.2). Returning swallowed characters alone brought character kept to 95.8%; also returning before the scene background’s area check found the background of the two gradient-sky pictures, bringing background found to 93.2%; and splitting once more with fainter edges to return the black hair in front of bokeh brought it to 97.6%. What remains is three pictures of black hair in front of an almost black flat background (outline $\Delta E$ 6 from the background), and one where a fake face on bangs over a lineless face scores slightly higher than the real face. On the room background drawn with lines, window · shelves · flower pots · wooden floor stay on the character side and about half the background is found (10). Faces were all found at tilt ±30°, size 0.4–1.2×, mirroring, and skin brightness up to 77; skin brightness 57 · 34 and one lineless picture were missed. In 8 transparent-background PNGs made from the same pictures, all 14 faces were found and the characters of all 5 pictures with two or more people were split (0.18: 0 faces, 0 folders). The PSDs of the 25 AI-generated pictures are byte-identical to 0.18 (no swallowed faces, so returning does not act).

11.4 300 unseen pictures (0.20–0.22)

To see how it does outside the test pictures used to build the rules and average patterns, illustrations marked all-ages · lowest sensitivity were picked at random from pixiv’s daily · weekly · monthly · rookie rankings (August–September 2026), then looked at one by one, excluding manga · text-centered pictures and pictures with exposure, to collect 300. They mix human characters, animals · robots · monsters, landscapes, snack pictures, character sheets, group pictures, and black-and-white · watercolor · brush paintings (long side around 1200px). There are no ground-truth outlines, so each result was placed next to the original and graded by a person per picture (number of faces showing both eyes and how many were found, number of fake faces, background, names, number of character folders).

Item 0.21 result (0.20)
Errors · hangs 0 (in 0.20, median 6.6 s per picture, longest 14 s. Reproduction PSNR lowest 47.7 dB · median 55.2 dB)
Faces showing both eyes 189 of 355 (53%) found. Found in 96 of 148 one-person pictures. 294 fake faces (about one per picture). Same as 0.20. Naming · folder faces of 0.22 below
Background character intact with most of the background removed 104 (102), character intact with background visibly left 118 (117), parts of the character (hair tips · hands) missing 6 (6), large parts of the character missing 65 (68), no background found 5 (5), pictures without characters 2 (2)
Names (147 pictures with real faces found) Hair: mostly named 38 (37) · partly 55 (48) · none 50 (58). Skin: mostly 41 (43) · partly 11 (13) · none 93 (89)
Wrong names 133 places in 107 pictures (0.20: 132 places in 104 pictures; “hair” · “skin” on clothes · ribbons · props · background). In the 0.20 grading, at least 47 places were named by fake faces
Number of character folders right in 232 of 300. 221 of 235 one-person (or faceless) pictures, 11 of 65 pictures with two or more people. Same as 0.20. 0.22: 236, 0.24: 238 (below)

Face finding, much lower than on the test pictures (30 of 31 faces), almost decides the name · folder results. 114 of the 166 missed were in pictures with two or more people (93 of 207 found in such pictures, 96 of 148 in one-person pictures), and many were missed especially in group pictures and multi-panel pictures with many small faces. Missed faces in one-person pictures included glasses, bangs covering the eyes, strongly tilted or lying faces, faces tinted by blue · red lighting, and dark skin. In 0.20, 46 of the 68 pictures with large parts of the character missing had white clothes · light hair touching a white · light background, and looking at eight stage by stage, the scene background (places with sparse lines) entered the clothes in all of them (10). In 0.21, three of them improved, making 43 of 65 (below). Tests changing the height condition of character face selection were also done on these 300 (7.5).

Compared with 0.18: the same 300 were also split with 0.18 and the character · name maps compared. 288 had the same results and 12 differed. Two were better (three-person selfie: jacket · shoulders that had gone to the background came back; two-person character sheet: the wrong “skin” color name on ribbons · skirts was removed and a hair name given), two were worse (an opaque picture with no background found split one person into two folders through a fake face; a flame-effect stream at the left of the screen came to the character side (5% of the picture)), and the other eight only changed small pieces · names, neither better nor worse. The three-person selfie first got worse in 0.19 when the middle figure’s hair went to the background, and 0.20 fixed the cause (7.2). After the fix, the results of the 25 test pictures · 65 synthetic pictures are byte-identical to 0.19.

Compared with 0.20 (0.21): the three fixes for the white clothes · white background problem (the bottom border of the flat background, body-zone pieces, smearing of background numbers) were run on these 300 one at a time, and every picture whose character map changed was graded side by side with 0.20. The first two changed 61 pictures: 22 better (white shirts · uniforms · skirts, coat hems, black skirts · jackets · legs came back), 8 worse (bushes of a black-and-white landscape, water reflections, a mascot in the background, the gold-trimmed corner of a card, the floor under a table came to the character; teal hair flowing down went to the background; the outline surroundings of two textured pictures went to the background), and 31 with only small pieces changed. For the two pictures whose outline surroundings went to the background, the cause was smearing of background numbers in region splitting (the background decision was almost the same as 0.20), and fixing it made the white-haired picture better than 0.20 (hair · coat edges came back), while in the textured purple-background picture the hair · arm edges came back but background pieces also came to the character side, a mix of better and worse. The smearing fix changed 148 pictures; of the 12 changed a lot, 4 were better (the body of a white cat, the hair of two people in blue light, the outline borders of three people in a character sheet, the edges of white hair), 2 worse (tree pieces of a landscape, night sky pieces), and the rest were 1–2px edges. Faces · character folders are the same for all 300. Name maps differed in 146 pictures as regions changed, and re-grading the 37 changed by more than 5%, 8 were better and 9 worse, about even (names · wrong names in the table above). On the 25 test pictures, the black dress · sleeves of the “girl on a dark background” came back (background 53.7 → 51.6%), and the rest changed at edges by around 0.1%p. Averaged over the 8 outline pictures, background found 52.41 → 52.36% and character kept 96.11 → 96.14%, and the scores of the 65 synthetic pictures are all the same per picture. Measured alternately with 0.20 on the same 10 pictures, it takes 1–4% longer.

Face marking and 0.22: to fix face finding, in the 213 pictures with faces showing both eyes, the 413 faces found by 0.21 were cut out one by one and marked real · fake, and in the 107 pictures with missed faces, all candidates scoring 7 or more were drawn to classify where the 163 missed faces dropped out. 75 had an in-place candidate scoring 9–11, just below the threshold; 24 scored 7–9; 6 crossed the threshold but were dropped by the face-likeness filter (8 of 4.5); 1 was dropped by overlap removal. 57 had no candidate in place (11 very small faces, 2 very large faces, and the rest faces lying sideways · glasses · bangs covering the eyes · lighting · thick-line drawing styles). With the 298 real faces of known position as ground truth, how well various candidate features separate real from fake (AUC) was measured to choose the mouth · eye contrast · lower eyelid · white skin adjustments (9 of 4.5), and splitting the pictures alternately into two halves improved both in the same direction (faces found 95 → 97, 97 → 102, fakes 160 → 131, 144 → 118, measured on candidates before the face-likeness filter). Measuring the final results by matching positions (centers within $0.5d$, size 0.5–2×), the naming · folder faces are

  Real faces found (of 355) Fake faces Pictures with the right folder count
0.21 193 310 232
0.22 196 232 236

(folders by human grading: 6 one-person pictures that had been split into two folders by fake faces became one folder, and 2 two-person pictures merged into one folder; 227 of 235 one-person pictures, 9 of 65 with two or more people). Placing the 52 pictures whose name maps changed next to 0.21, 24 were better (“hair” · “skin” on clothes · props · text · weapons removed, and correctly put on blond hair · black hair · faces), 12 worse (newly put on wings · clothes · furniture · background pieces, or a correct hair name lost), and 16 neither. Background decisions keep using the original faces, so the character regions of the 300 · 25 test pictures · 65 synthetic pictures are byte-identical to 0.21. On the 25 test pictures, fake faces 35 → 27, faces found stay 30 of 31, and the folder accuracy of the four two-person pictures with drawn outlines is the same except 99.2 → 99.1% (yukata). On the synthetic pictures, fake faces 8 → 5, on the 8 transparent-background pictures 2 → 1, and the other scores are the same.

0.24: the whole frames (position · direction · size · score) of the naming · folder faces were saved for all 300 pictures, and the character face selection rules were varied, comparing folder counts with the face counts counted by a person (folder counts simulated from the saved faces match the actual results for all 300). The height condition $4d$ matched most (all 5 changed pictures moved toward the counted number), and two two-person pictures were split correctly, making 238 pictures with the right folder count. Splitting why the cheek · nose-bridge parts did not become “skin” in pictures without any skin name, 64 of the 147 pictures with faces found failed the color condition (pale skin with saturation under 7%). Accepting pale skin together with the area condition newly named 14 pictures: 12 correctly on faces · hands, 2 mixed (without the area condition, 8 of 29 extended even to white clothes · the whole character).

0.25: looking again at all 300 name maps of 0.24 next to the originals, 43 of the 85 pictures where no naming · folder face was found at all had “skin”. It was a color name given to flesh-toned base colors, not a name confirmed by a face (from “skin” up to “skin 11” in one picture), and of the 43 only 10 had it correctly on faces · hands, 7 had it mixed over skin and hair · clothes, and 24 were wrong (blond · light brown hair, a sunflower field, a room, a city night view, robots · raccoon dogs · monsters, snacks · chocolate, a mailbox). The other 2 were small, hard-to-recognize pieces. Changing the flesh-tone color name to “beige · apricot” removed “skin” from all 43, and the character · background maps and reproduction of all 85 are the same as 0.24. Pictures with faces found already had “skin” only on parts confirmed by faces, so they do not change. The results (including name maps) of the 25 test pictures · 65 synthetic pictures · 48 naming ground-truth synthetic pictures and the 28 PSDs saved from the actual screen are also byte-identical to 0.24. Two methods separating skin and bangs to increase faces with hair names were also tested on these 300, but improvements and regressions were about even or regressions dominated (7.5).

11.5 666 test pictures (from 0.25)

The 24 of the 25 test pictures above excluding the code-drawn sample picture, the 300 unseen AI-generated pixiv pictures, and 342 more AI-generated pixiv pictures are used as one set. The added 342 are only all-ages illustrations that reached the top 50 of the daily · weekly · monthly · rookie rankings from January 2024 to September 2026 (88 in the top 10, 209 in the top 25); all artists are different, and they do not overlap the earlier 300. At most 6 pictures of the same work · tag were included. 966 candidates were looked at one by one, excluding manga · text-centered pictures and pictures with exposure, and chosen so that the conditions below are mixed evenly. For quality, 114 pictures each were taken at the original size (long side 2000–7378px) · a 1200px version · a 540px low-quality version (the program’s default processing resolution is a long side of 2048px). A person marked the conditions for all 666, and colorfulness was split into three bins by the colorfulness metric (Hasler–Süsstrunk). The pictures are not in the repository.

Condition Pictures
Number of characters one 406 · two or more 212 · no character (landscape · objects · animals) 48
Occlusion none 553 · face occluded (back view · hand · mask) 57 · body occluded (objects · other characters · effects) 56
Focus on the character 639 · character blurred 27
Tilt upright 451 · right 83 · strong (45° or more · sideways · upside down) 82 · left 50
Pose face · upper body 196 · standing 170 · other (floating · jumping · crouching) 144 · sitting 115 · lying 41
Colorfulness colorful 235 · medium 230 · dull 201
Quality (long side of the input file) 2000px or more 115 · 900–2000px 431 · under 900px 120

Splitting all 666 with 0.25 gives no errors · hangs, with reproduction PSNR lowest 44.6 dB · median 54.9 dB (running 4 at a time, median 8.6 s per picture, longest 41 s). By condition, looking only at the automatic values before human grading (the share of pictures where at least one face was found · at least one “eyes · skin · hair” name was given),

  Pictures Face found Name given
All 666 75% 61%
Character blurred 27 41% 30%
Face occluded 57 63% 47%
Floating · jumping · crouching 144 59% 48%
Strongly tilted 82 70% 52%
Dull colorfulness 201 74% 52%
No character 48 44% 25%

“Faces” found in pictures without characters are all fake, so these values include fake faces. Faces are found less on blurred characters · occluded faces · tilted bodies because face finding uses two crisp eyes and faces with the two eyes almost level (that score is 0 at a tilt of about 35°) as cues (4.5, 10).

Background separation rate (0.25): every background result of the 666 was placed next to the original and graded by a person (the 300 AI-generated pixiv pictures reuse the 0.21 grading; the background maps of 0.21 and 0.25 are the same for all 300). On the 650 excluding the 16 without characters, for a proportion 𝑝 the per-picture standard deviation is $\sqrt{p(1-p)}$, the standard error $\sqrt{p(1-p)/n}$, the margin of error $z \times \text{standard error}$, and the confidence interval the Wilson score interval (𝑧 is 1.645 · 1.960 · 2.576 for 90 · 95 · 99%).

Note — Why: These formulas attach the uncertainty from the number of pictures to the background separation rate (same as 11.1). How it works: The margin of error is 𝑧 times the standard error, the per-picture standard deviation $\sqrt{p(1 - p)}$ divided by $\sqrt n$, and the interval is the Wilson interval, valid near 0 and 1 too. References: R56 Wilson 1927 · R78 Agresti 2013

Grade Pictures Share Standard deviation Standard error 95% margin · interval 90% 99%
Character intact + most background separated 186 28.6% 45.2%p 1.77%p ±3.5%p · 25.3–32.2% 25.8–31.6% 24.3–33.4%
Character intact (even with background left) 387 59.5% 49.1%p 1.93%p ±3.8%p · 55.7–63.2% 56.3–62.7% 54.5–64.4%
No major loss (up to hair tips · hands) 450 69.2% 46.2%p 1.81%p ±3.5%p · 65.6–72.7% 66.2–72.1% 64.4–73.7%
Large parts of the character went to the background 188 28.9% 45.3%p 1.78%p ±3.5%p · 25.6–32.5% 26.1–31.9% 24.6–33.7%
No background found 12 1.8% 13.5%p 0.53%p ±1.0%p · 1.1–3.2% 1.2–2.9% 0.9–3.8%

It differs greatly by source. “No major loss” is 23/24 for the test pictures (95.8%, 95% interval 79.8–99.3%), 76.5% (71.4–81.0%) for the 300 AI-generated pixiv pictures, and 60.7% (55.3–65.8%) for the 342 AI-generated pixiv pictures that deliberately include difficult conditions evenly; the difference between the two AI-generated pixiv sets is hard to see as chance (chi-square $p < 0.0001$). So the overall rates above are values for this 666-picture composition and change with how pictures are chosen. Grading was done by one person and inter-rater agreement was not measured, so the confidence intervals show sampling error only.

For pictures with pixel ground truth, the mean · standard deviation of per-picture values and the 𝑡-distribution confidence interval (excluding the 3px boundary band) are

  Pictures Mean Standard deviation 95% confidence interval
AI-generated pictures: character IoU 8 74.4% 10.1%p 66.0–82.8%
AI-generated pictures: character kept 8 96.6% 3.2%p 93.9–99.2%
AI-generated pictures: background found 8 53.6% 26.8%p 31.2–75.9%
Synthetic pictures: character kept 65 97.9% 8.0%p 96.0–99.9%
Synthetic pictures: background found 65 93.8% 16.5%p 89.7–97.9%

The character is mostly kept, while the amount of background found varies greatly from picture to picture (the 8 AI-generated pictures are a small sample, so the intervals are wide).

Strict separation rate: the grading above looked at one overlay image and misses small losses. So all 186 “complete separation” and 264 “background left · small loss” pictures were looked at again with sheets drawing the character layer alone (background area in magenta) · the background layer alone (character area in green) separately at large size. Only a 1–2px rim at the outline edge was allowed, and any hair tip · finger · prop · hem in the background layer counted as a loss. Looking again, 162 of the 186 “complete separation” pictures had losses or leftover background, and 24 of them (13% of the original grading) and 49 graded “small loss” actually had large parts of the character in the background layer. Rates are over the 650 pictures with characters, and intervals are Clopper–Pearson exact intervals, wider than the normal approximation (Bonferroni gives 95% overall when the three criteria are viewed together).

Criterion Pictures Share Standard deviation Standard error 95% 99% 99.9% One-sided 95% lower bound Bonferroni (98.3%)
Perfect separation (no loss + no leftover background) 24 3.7% 18.9%p 0.74%p 2.4–5.4% 2.1–6.0% 1.7–6.8% 2.6% 2.1–5.9%
Character without loss (background may remain) 87 13.4% 34.0%p 1.34%p 10.9–16.2% 10.1–17.2% 9.4–18.3% 11.2% 10.4–16.9%
No major loss (up to small pieces lost) 377 58.0% 49.4%p 1.94%p 54.1–61.8% 52.9–63.0% 51.5–64.3% 54.7% 53.2–62.6%

The wavering of grading was also measured. Re-grading 48 random pictures without looking at the previous grading, “no major loss” agreed 90% ($\kappa = 0.56$), but “character without loss” agreed 81% ($\kappa = 0.29$), so the grading itself wavered (whether a small piece is a loss or an outline rim), and no picture passed “perfect separation” both times. Counting only pictures passing both times, “character without loss” is $13.4\% \times 3/9 \approx 4.5\%$ (bootstrap 95% 0–9.0%), and “no major loss” $58.0\% \times 39/40 \approx 56.5\%$ (51.7–61.1%). By condition, the lowest “no major loss” is for pictures with occluded faces and occluded bodies (56 each, 41.1%, 95% 28.1–55.0%), and the lowest “character without loss” is occluded bodies 3.6%, left-tilted pictures 4.0%, low quality 7.0%. By source: test pictures 79.2% · 300 AI-generated pixiv 61.4% · 342 AI-generated pixiv 53.4%. In 0.27: perfect separation 20 (3.1%), character without loss 104 (16.0%), no major loss 384 (59.1%; 300 AI-generated pixiv 62.4% · 342 54.6%) (0.27 below). In 0.29: perfect separation 19 (2.9%), character without loss 104 (16.0%), no major loss 390 (60.0%, 95% 56.1–63.8%; 300 AI-generated pixiv 62.4% · 342 56.4%) (0.29 below). In 0.31, the 563 changed pictures were re-graded blind against 0.30, and among the 633 judged to have characters, no major loss went 351 (55.5%) → 445 (70.3%, 95% 66.6–73.8%) (values from the same grader looking at both versions together with the same method; this grading was stricter than the separate grading of 0.29 at 60.0%, so the 0.30 side came out at 55.5%; 0.31 below). Measuring pictures with pixel ground truth by “character kept 99% or more and background found 90% or more”, 51 of 65 synthetic pictures (78.5%, 95% 66.5–87.7%) and 0 of the 8 AI-generated pictures with drawn outlines (95% 0–36.9%) pass.

11.6 Verification on the new 342 alone (0.26)

The 24 test pictures and the 300 AI-generated pixiv pictures are pictures whose results were looked at while refining the rules · thresholds, so their scores may come out favorably. So the 342 AI-generated pixiv pictures never used while fixing the rules were verified separately (composition in the table above; grading by one person, inter-rater agreement not measured).

Actual screen: all 342 were loaded in the browser screen (external requests blocked), split, saved as PSD, then recomposited with psd-tools and read with ag-psd.

Item Result
Errors · external requests 0 pictures (page errors · console errors · external requests all 0)
Layer structure checks (names · blend modes · clipping bases · empty layers · bounds) 0 pictures after the fix (2 before the fix: below)
Reproduction PSNR (8-bit values to be stored) lowest 42.6 dB, median 54.2 dB
PSNR composited with the screen compositor lowest 42.5 dB, median 52.8 dB
PSD: psd-tools all 342 open. Embedded merged image PSNR lowest 42.5 · median 52.8 dB, layers recomposited 42.4 · 51.3 dB. Layer · folder counts all match the screen
PSD: ag-psd all 342 read. Merged images 342, Korean layer names 342, layer counts all match the screen
Splitting time on screen · PSD size median 10.2 s per picture · longest 44.6 s (4 at a time), PSD median 8.6 MB · largest 45.6 MB
Determinism (the same picture twice in new pages) all 12 (4 per quality) byte-identical. The re-split cache after corrections also fine

In two opaque pictures with no background found, an empty “background” layer and [Background] · [Character] folders appeared. The screen always passes correction masks (even with nothing painted), and the core made an empty background map just from the masks. Verification run directly in code had no masks, so it did not show. It was fixed to make the background map only when there are painted pixels (0.26); after the fix, the two pictures have [Painting] · [Effects] · [Line art] at the top and no empty layers. The pixels of the other layers are the same as before the fix. There were 10 opaque pictures with no background found in all; the other 8 ran after the fix and had no empty layers from the start.

Screen verification used files shrunk to a long side of 2048px or less and re-saved as JPEG (quality 95), while verification run directly in code used the shrunk lossless pixels. That compression noise alone decided whether the background was found in 4 of the 342 (one, whose original transparency remained only on one side, counted separately), all right next to a threshold (scene background area 6.0% vs 4.5% (threshold 5%), 89.3% vs 91.0% (threshold 90%), color distribution overlap 0.27 vs 0.38 · 0.25 vs 0.33 (threshold 0.3)). Only 87 of the 342 had the same number of parts, so results change slightly even with small noise on the same picture (the same input always gives the same result).

Faces · names · folders: all 342 were graded by the same criteria as the 300 of 11 (number of human faces showing both eyes and how many were found, fake faces, hair · skin names, wrong names, number of character folders). Intervals are Clopper–Pearson 95%.

Item New 342 (0.25 · 0.26) Reference: 300 (0.21 grading)
Faces showing both eyes found 204 of 356 (57.3%) 189 of 355 (53%)
In pictures with one face, that face found 103 of 180 (57.2%, 49.6–64.6%) 96 of 148
Fake faces 326 (0.95 per picture), in 186 pictures (54.4%, 48.9–59.8%) 294 (about one per picture)
Hair names (150 pictures with real faces found) mostly 43 · partly 59 · none 48 → named 68.0% (59.9–75.4%) 93 of 147 (63%)
Skin names (the same 150) mostly 82 · partly 11 · none 57 → named 62.0% (53.7–69.8%) 52 of 147 (35%)
Pictures without wrong names 214 of 342 (62.6%, 57.2–67.7%). 188 wrong places in 128 pictures 193 of 300 (133 places in 107 pictures)
Right number of character folders 277 of 342 (81.0%, 76.4–85.0%) 232 of 300 (238 in 0.24)
 One-person (or no two-eyed face) pictures 270 of 281 (96.1%, 93.1–98.0%). 11 split into two or more by fake faces 221 of 235
 Pictures with two or more people 7 of 61 (11.5%, 4.7–22.2%). All 54 others have too few folders 11 of 65
Right folders + no wrong names 179 of 342 (52.3%, 46.9–57.7%)  

Skin names increased a lot because these are results after 0.22 (fake face filtering) · 0.24 (pale skin) (the 300 grading is 0.21).

Both sets were pictures that version had never seen, so the differences were tested (Yates chi-square · Fisher's exact test, Newcombe interval for the difference, formulas above). The new 342 deliberately included more occluded faces · tilted bodies · several people · low quality, so the odds ratios of a logistic regression including the conditions (number of people · occlusion · focus · tilt · pose · colorfulness · quality · long side) are also given.

Item (per picture) 0.21 · 300 0.26 · new 342 Difference (95%) Yates $\chi^2$ · 𝑝 Condition-adjusted odds ratio (95%) · 𝑝
Skin names (pictures with faces found) 52/147 (35.4%) 93/150 (62.0%) +26.6%p (+15.3 to +37.0) 20.01 · < 0.0001 6.33 (3.00–13.38) · < 0.0001
Hair names (pictures with faces found) 93/147 (63.3%) 102/150 (68.0%) +4.7%p (−6.0 to +15.4) 0.54 · 0.46 1.67 (0.81–3.47) · 0.17
Right number of character folders 232/300 (77.3%) 277/342 (81.0%) +3.7%p (−2.6 to +10.0) 1.09 · 0.30 1.76 (0.89–3.46) · 0.10
No wrong names 193/300 (64.3%) 214/342 (62.6%) −1.8%p (−9.1 to +5.7) 0.14 · 0.70 0.72 (0.46–1.13) · 0.15
In pictures with one face, that face found 96/148 (64.9%) 103/180 (57.2%) −7.6%p (−17.9 to +3.0) 1.68 · 0.19 1.06 (0.54–2.10) · 0.86
No fake faces 143/300 (47.7%) 156/342 (45.6%) −2.1%p (−9.7 to +5.6) 0.19 · 0.66 0.79 (0.50–1.24) · 0.30

The only improvement hard to see as chance is skin names (35.4% → 62.0%, 1.75×). All the others have $p > 0.05$, so there is no evidence they changed. The share found counted per face (53% → 57.3% in the table above) also has Fisher $p = 0.29$, and fake faces went 0.98 → 0.95 per picture (exact $p = 0.75$). The lower share found in pictures with one face disappears with matched conditions (odds ratio 1.06), so it is because the new pictures have many difficult conditions.

Wrong names were mostly cases where fake faces (stickers · dolls · hands · clothing patterns) were chosen as character faces and names were put around them, and cases where skin · hair parts merged with clothes · props · background of the same color.

By condition, faces were found less on blurred characters (2 of 8 faces), sitting poses (46.0%), and bodies tilted right · strongly (47%), and the pictures chosen as two or more people in the condition table (125; 60 of them have two or more faces showing both eyes, and the rest are back views · profiles where one folder is correct) had the lowest share of right folders at 53.6% (44–63%). Differences by colorfulness · quality overlapped within the intervals (faces 54–61%, folders 75–87%).

Pictures with faces found and background results: pictures with faces found also have better background results. Among pictures with faces showing both eyes, “no major loss” of the strict separation rate is

Set Face found Two-eyed face present but not found Difference (95%) · ratio · odds ratio Yates $\chi^2$ · 𝑝 · Fisher 𝑝
New 342 100/150 (66.7%, 58.5–74.1%) 41/91 (45.1%, 34.6–55.8%) +21.6%p (+8.7 to +33.7) · 1.48× (1.15–1.91) · 2.44 (1.43–4.16) 10.03 · 0.0015 · 0.0012
300 (0.21 grading) 95/147 (64.6%) 33/66 (50.0%) +14.6%p (+0.4 to +28.4) · 1.29× · 1.83 (1.01–3.29) 3.48 · 0.062 · 0.050
Combined 195/297 (65.7%) 74/157 (47.1%) +18.5%p (+9.0 to +27.8) · 1.39× (1.16–1.68) · 2.14 (1.45–3.18) 13.84 · 0.0002 · 0.0002

and pictures where large parts of the character went to the background are, in the new 342, 52.7% not found → 31.3% found ($p = 0.0016$). Pictures without a face showing both eyes are 34 of 87 (39.1%) in the new 342. This could be because pictures with faces found cluster in easy conditions (one person, no occlusion, upright pose, high quality), so it was measured again with matched conditions, but the Mantel–Haenszel odds ratios stratified by one condition at a time were 2.10–2.28 (number of people · occlusion · focus · tilt · pose · colorfulness · quality · source, all $p \le 0.0004$), and a logistic regression with all conditions and the long side together gave 2.16 (1.41–3.31, $p = 0.0004$), unchanged. This difference is not explained by chance or by the graded conditions.

But this difference was not made by the face-based background stages (8 · 9 of 3.5). All 666 were run again with a core that passes no faces to those two stages (an empty face list for the returning of 8, 9 skipped; part names · folders unchanged). Pictures whose character map changed were 390 of the 650 with characters, and the 253 pictures where the pixels the faces protected as character were 0.1% or more of the character (pictures that might have escaped a major loss only with faces on), or major-loss pictures where the pixels the faces sent to the background were 0.1% or more of the picture (pictures whose major loss might disappear only with faces off), were all re-graded with on · off side by side. For the other pictures, the changes were smaller than that, so their grades were treated as unchanged.

Pictures with characters Face stages on Face stages off Passed thanks to faces · failed because of faces McNemar exact 𝑝
All 650 377 (58.0%) 383 (58.9%) 5 · 11 0.21
Face found 297 195 (65.7%) 196 (66.0%) 4 · 5 1.00
Two-eyed face present but not found 157 74 (47.1%) 75 (47.8%) 1 · 2 1.00
No two-eyed face 172 89 (51.7%) 93 (54.1%) 0 · 4 0.13

Even with the face stages off, the difference between found · not found remains at 66.0% vs 47.8% (+18.2%p, $\chi^2 = 13.43,\ p = 0.0002$). So the better background of pictures with faces found is not thanks to the face stages; pictures where faces are easy to find are also easy to separate from the background. It remains even with the graded conditions (number of people · occlusion · focus · tilt · pose · colorfulness · quality · size) matched, so which other property separates both together has not been measured yet. Only 16 pictures had “no major loss” changed by the face stages, and more were taken (black hair · white dresses · legs · gloved hands · whole small figures within the picture) than protected (bangs · flaming sword · jacket · other). 5 of these 16 (3 protected · 2 taken) are borderline cases where it is unclear whether the loss is major, so protected can be seen as 2–5 and taken as 9–11.

What the face stages actually do is find more background. The places the faces sent to the background were 1% or more of the picture area in 222 pictures and 5% or more in 60, and summed over pixels, this stage found 3.3% of the final background (character protected: 0.34% of the final character). Comparing the 253 re-graded pictures by eye, the side with the face stages on was better in 115, worse in 48, mixed in 56, and almost no difference in 34, so the better side is more numerous than chance would explain (sign test $p < 0.0001$). In pictures with faces found it is 62 vs 20 ($p < 0.0001$), but in pictures where the real face was not found or there is no two-eyed face (fake faces used), it is 46 vs 28 ($p = 0.047$), barely across the threshold. “No major loss” over the whole new 342 is 175 of 328 (53.4%, 47.8–58.9%).

Results by detailed condition (0.29): the condition table above was assigned from thumbnails when choosing pictures, so it is coarse. The 666 were looked at again at original size and the conditions re-marked in 12 fields. Some fields allow several values per picture (occlusion location · what occludes · effects · props).

Field Values
Number of people · size number of characters (0–5 or more), the largest character as face close-up · upper body · above the knees · full body · small figure (under 1/3 of the picture height)
Face direction (front · oblique · profile · back view · not a human face), eyes (both open · both closed · wink · hidden)
Occlusion where (face · top (head · shoulders) · middle (torso · arms) · bottom (below the waist)), by what (hand · hair · prop · other character · effect · light · object in front · text · frame)
Focus on the character · foreground blurred · focus behind (character blurred) · all blurred
Tilt what tilts (none · character only · background only · whole picture), how much (10–45° · over 45° · sideways · upside down), direction (head to the left · right)
Pose standing · sitting · kneeling · lying · lying face down · floating · jumping · crouching · face · upper body only, waist (bent · straight · leaning back), viewpoint (eye level · from above · from below)
Drawing style paint (cel · soft digital · thick paint · brush · watercolor · pastel · black and white · manga · sketch · flat), lines (dark lines · colored lines · no lines · thick outlines)
Background white · flat · gradient · pattern · scene drawn with lines · painted scene · blurred scene · dark flat · several panels, whether some places have colors similar to the character
Hair color (black · white · silver · gold · brown · chromatic), length (waist · shoulder · short)
Effects light · glow · glitter · speed lines · text · logo · frame · card border · texture overlay · chromatic aberration
Lighting normal · dark scene · backlight · strong shadows · light dapples · colored lighting
Props · appearance weapons · umbrella · instrument · animal ears · tail · horns · wings · robot · armor · non-human character

Looking again, 15 of the 27 marked “character blurred” when choosing had the focus on the character. There were no pictures with only the background tilted, and the one 3D · semi-realistic picture was left out of the table.

The values below are results of 0.29 (faces · folders are the same as 0.26; background re-graded for pictures changed in 0.27 · 0.29, names for pictures changed in 0.27 · 0.28 · 0.29). Quality is the long side of the input file. For the background result that changed greatly in 0.31 (“no major loss”), see the per-condition table of 0.31 below. In parentheses is the number of pictures on which the metric can be measured (face found: pictures with faces showing both eyes; hair · skin names: pictures with real faces found; background: pictures with characters). Below 10 pictures it is written as (pass / total). ▲ ▼ means the difference between pictures with that condition and the rest has $p < 0.05$ in Fisher's exact test and stays $q < 0.05$ after Benjamini–Hochberg correction for testing many conditions at once (hard to see as chance); △ ▽ means $p < 0.05$ but it disappears after correction. The formulas are above.

Condition Pictures Face found Hair name Skin name No wrong names Right folders No major loss Character without loss
All 666 67.6% (478) 71.8% (323) 57.3% (323) 65.2% 79.9% 60.0% (650) 16.0% (650)
Quality · high (long side 2000px or more) 115 57%▽ (75) 74% (43) 53% (43) 66% 87%△ 57% 10%
medium (900–2000px) 425 71%△ (315) 75% (224) 58% (224) 65% 78% 64%△ 19%▲
low (under 900px) 126 64% (88) 57%▽ (56) 55% (56) 64% 81% 50%▽ 10%
Colorfulness · colorful 235 74%△ (174) 82%▲ (128) 61% (128) 63% 81% 65% 19%
medium 230 66% (167) 71% (110) 65% (110) 67% 78% 56% 14%
dull 201 62% (137) 58%▼ (85) 42%▽ (85) 66% 81% 59% 15%
People · no character 48 — — — 77% 98%▲ 64% 33%△
one 403 66% (298) 73% (198) 59% (198) 65% 96%▲ 58% 15%
two 126 66% (103) 74% (68) 60% (68) 63% 55%▼ 63% 16%
three · four 60 74% (53) 59% (39) 54% (39) 62% 30%▼ 67% 15%
five or more 29 75% (24) 78% (18) 33%▽ (18) 59% 34%▼ 55% 14%
Size · face close-up 9 (3/6) (1/3) (3/3) (5/9) (9/9) (2/9) (0/9)
upper body 184 74%△ (154) 75% (114) 54% (114) 60% 83% 59% 14%
above the knees 170 67% (138) 74% (92) 63% (92) 66% 80% 61% 10%▽
full body 236 63% (177) 68% (111) 53% (111) 66% 73%▼ 61% 19%
small figure 19 (3/3) (2/3) (3/3) 74% 84% 63% 26%
Face direction · front 390 71%▲ (349) 73% (249) 61%△ (249) 59%▼ 77%▽ 64%△ 15%
oblique 176 57%▼ (125) 65% (71) 45%▽ (71) 76%▲ 77% 52%▽ 12%
profile 27 (3/4) (3/3) (2/3) 63% 96%△ 52% 15%
back view 8 — — — (4/8) (8/8) (7/8) (3/8)
not a human face 17 — — — 65% 100%△ 44% 31%
Eyes · both open 460 71%▲ (402) 71% (286) 57% (286) 64% 78%▽ 61% 15%
both closed 68 48%▽ (33) 69% (16) 62% (16) 65% 74% 54% 10%
one closed (wink) 56 46%▼ (41) 89% (19) 58% (19) 62% 79% 57% 12%
eyes hidden 9 (2/2) (2/2) (1/2) (7/9) (9/9) (7/9) (1/9)
Occlusion · none 211 74% (149) 72% (110) 55% (110) 66% 78% 65% 24%▲
face occluded 51 56% (34) 68% (19) 32%▽ (19) 63% 92%△ 37%▼ 0%▼
top (head · shoulders) occluded 2 (1/1) (1/1) (1/1) (1/2) (1/2) (1/2) (0/2)
middle (torso · arms) occluded 356 66% (295) 72% (194) 58% (194) 63% 78% 60% 10%▼
bottom (below the waist) occluded 22 59% (17) 60% (10) 80% (10) 73% 86% 55% 23%
Occluded by · hand 204 69% (177) 74% (123) 59% (123) 63% 81% 62% 10%▽
hair 11 (3/7) (1/3) (1/3) 73% 91% 36% 9%
prop 149 63% (118) 76% (74) 58% (74) 69% 89%▲ 54% 9%▽
other character 86 65% (68) 73% (44) 59% (44) 56% 48%▼ 64% 9%
effect · light 25 58% (19) 73% (11) 55% (11) 60% 88% 56% 8%
object in front 28 77% (22) 65% (17) 53% (17) 64% 82% 54% 14%
text · frame 7 (4/4) (4/4) (3/4) (5/7) (6/7) (4/7) (3/7)
Focus · on the character 604 68% (474) 72% (320) 57% (320) 64%▽ 78%▼ 60% 15%▽
foreground blurred (out of focus in front) 12 (3/4) (3/3) (2/3) 83% 92% 33% 17%
focus behind (character blurred) 2 — — — (2/2) (2/2) (2/2) (2/2)
What tilts · upright 496 69% (394) 72% (273) 58% (273) 64% 77%▼ 60% 16%
character only tilted 85 59% (58) 68% (34) 53% (34) 67% 87% 55% 9%
whole picture tilted 37 62% (26) 81% (16) 56% (16) 57% 76% 73% 16%
Tilt amount · less tilted (10–45°) 90 63% (67) 74% (42) 55% (42) 63% 82% 58% 11%
strongly tilted (over 45° · sideways · upside down) 32 47% (17) (5/8) (4/8) 66% 88% 69% 12%
Tilt direction · head to the left 59 76% (34) 65% (26) 46% (26) 64% 83% 63% 10%
head to the right 63 48%▼ (50) 79% (24) 62% (24) 63% 84% 59% 13%
Pose · standing 178 74% (129) 63%▽ (95) 59% (95) 70% 70%▼ 61% 16%
sitting 114 59%▽ (92) 72% (54) 63% (54) 65% 83% 55% 17%
kneeling 11 (6/8) (4/6) (3/6) 73% 82% 60% 20%
lying 30 50% (20) 60% (10) 40% (10) 63% 87% 73% 13%
lying face down 3 (1/3) (1/1) (1/1) (3/3) (3/3) (3/3) (0/3)
floating · jumping · crouching 87 61% (64) 82% (39) 54% (39) 59% 72% 67% 14%
face · upper body only 195 73% (162) 76% (118) 56% (118) 61% 84% 55% 14%
Waist · bent 41 60% (30) 78% (18) 72% (18) 76% 90% 56% 22%
straight 439 71%▲ (357) 71% (254) 57% (254) 63% 77%▽ 59% 15%
leaning back 10 (6/8) (4/6) (5/6) 60% 90% 50% 0%
Viewpoint · eye level 581 67% (452) 74%△ (304) 57% (304) 64% 78%▼ 60% 15%
from above 24 71% (17) 42%▽ (12) 58% (12) 67% 88% 62% 8%
from below 13 (7/9) (3/7) (6/7) 77% 100% 38% 15%
Paint · cel shading 23 84% (19) 81% (16) 69% (16) 65% 48%▼ 74% 26%
soft digital paint 335 74%▲ (283) 74% (209) 57% (209) 62% 79% 64%△ 12%▽
thick paint · brush 159 48%▼ (89) 70% (43) 53% (43) 69% 89%▲ 45%▼ 14%
watercolor · pastel 68 70% (43) 63% (30) 57% (30) 68% 74% 62% 20%
black and white · manga 13 55% (11) (4/6) (3/6) 54% 69% 69% 23%
sketch 8 (2/6) (1/2) (0/2) (6/8) (7/8) (4/8) (1/8)
flat (little shading) 59 63% (27) 59% (17) 71% (17) 71% 81% 66% 33%▲
Lines · dark lines 504 71%▲ (393) 73% (280) 56% (280) 62%▽ 78%▽ 65%▲ 15%
colored lines 11 (6/8) (3/6) (4/6) 73% 55% 82% 45%△
no lines 130 47%▼ (62) 62% (29) 62% (29) 75%△ 89%▲ 36%▼ 15%
thick outlines 21 53% (15) (6/8) (6/8) 62% 86% 62% 19%
Background · white · flat 213 70% (150) 70% (105) 59% (105) 68% 76% 63% 16%
gradient · simple pattern 56 61% (33) 70% (20) 55% (20) 64% 79% 62% 15%
pattern · ornament 120 74% (104) 78% (77) 47%▽ (77) 67% 76% 68%△ 16%
scene drawn with lines 44 73% (33) 79% (24) 75% (24) 50%▽ 84% 70% 28%△
painted scene 131 63% (87) 65% (55) 67% (55) 67% 85% 51%▽ 14%
blurred scene 20 60% (15) (7/9) (5/9) 70% 85% 30%▽ 20%
dark flat 70 51%▽ (47) 79% (24) 50% (24) 63% 93%▲ 51% 7%▽
several panels · collage 12 (9/9) (4/9) (4/9) 50% 42%▼ 75% 33%
Background color · character and background colors similar 233 61%▽ (183) 71% (112) 47%▽ (112) 66% 82% 55% 12%▽
colors different 385 72%△ (295) 72% (211) 63%△ (211) 63% 76%▼ 62% 17%
Hair color · black · dark hair 151 65% (101) 70% (66) 59% (66) 69% 73%▽ 51%▽ 15%
white · silver hair 125 64% (103) 53%▼ (66) 38%▼ (66) 68% 85% 63% 10%
gold · light hair 78 74% (62) 85%△ (46) 63% (46) 65% 90%△ 65% 14%
brown hair 59 67% (49) 67% (33) 76%△ (33) 56% 73% 64% 22%
chromatic hair 197 69% (163) 80%△ (112) 60% (112) 61% 75% 61% 16%
Hair length · long hair 392 68% (319) 70% (218) 56% (218) 65% 77%▽ 62% 13%▽
shoulder-length hair 92 68% (73) 74% (50) 58% (50) 66% 82% 41%▼ 10%
short hair 126 64% (86) 78% (55) 64% (55) 60% 79% 66% 23%△
Effects · light · glow 122 63% (95) 77% (60) 53% (60) 65% 85% 55% 9%▽
glitter · particles 140 69% (115) 81%△ (79) 52% (79) 61% 79% 63% 14%
speed lines · lightning 18 62% (13) (7/8) (6/8) 78% 83% 67% 17%
text · logo 203 72% (148) 72% (106) 55% (106) 65% 72%▼ 68%△ 21%△
frame · card border 51 81% (43) 69% (35) 49% (35) 69% 53%▼ 82%▲ 35%▲
texture overlay 10 (5/8) (3/5) (0/5) 60% 90% 40% 0%
chromatic aberration · glitch 10 (4/6) (3/4) (2/4) 80% 80% 50% 0%
no effects 263 65% (165) 66% (107) 61% (107) 65% 86%▲ 54%▽ 14%
Lighting · normal lighting 519 70%△ (377) 71% (265) 58% (265) 63%▽ 78% 64%▲ 17%
dark scene 72 52%▽ (50) 73% (26) 54% (26) 69% 81% 46%▽ 11%
backlight 24 47% (15) (4/7) (5/7) 83% 92% 21%▼ 0%▽
strong shadows · light dapples 20 54% (13) (3/7) (4/7) 70% 100%△ 50% 25%
colored lighting · neon 31 78% (23) 94%△ (18) 50% (18) 71% 81% 61% 16%
Props · appearance · weapons 64 65% (43) 82% (28) 57% (28) 66% 81% 59% 11%
umbrella 12 (4/8) (3/4) (1/4) 75% 100% 58% 33%
instrument 12 60% (10) (4/6) (1/6) 92% 50%▽ 42% 8%
animal ears · tail · horns 135 76%△ (114) 63% (87) 54% (87) 63% 71%▼ 65% 15%
wings 52 63% (43) 67% (27) 44% (27) 52%▽ 85% 62% 12%
robot · armor 18 (2/6) (2/2) (2/2) 78% 94% 71% 24%
non-human character 54 53% (15) (7/8) (6/8) 67% 89% 63% 24%

The conditions overlap one another (pictures without lines often have thick paint, and so on). So a logistic regression with all 32 conditions together (ridge $\lambda = 1$) measured each condition’s effect with the other conditions matched (measured on 0.27 results). Only the ones below have $p < 0.05$; all other conditions (several people, tilt, pose, viewpoint, hair color, effects, background type …) had $p \ge 0.1$.

Metric Conditions lowering it even with other conditions matched (odds ratio, 95%, 𝑝)
No major loss (617 with characters) no lines 0.39 (0.22–0.71, 0.002) · face occluded 0.39 (0.21–0.72, 0.003) · low quality 0.51 (0.32–0.80, 0.004) · dark scene · backlight 0.55 (0.30–0.99, 0.046)
Face found (478 with two-eyed faces) eyes closed · wink 0.29 (0.16–0.51, < 0.0001) · flat · black and white · sketch 0.40 (0.20–0.79, 0.009) · thick paint · brush 0.45 (0.23–0.89, 0.022) · oblique face 0.53 (0.33–0.85, 0.009)

This matches face finding using two crisp eyes and dark eyes on bright skin as cues (4.5) and background finding using lines as boundaries (3.5). Heads tilted to the right · sitting poses find fewer faces when looked at alone (table above), but no difference remained with the other conditions matched.

0.27: skipping face-based widening on flat backgrounds: splitting the on · off comparison above (253 pictures) by background flatness (4.5, measured on the background of the result with the face stages off), the face stages were better in 96 · worse in 28 of the 186 with flatness under 0.6, but there was no gain in the 67 with 0.6 or more (19 · 20), and 5 of the 11 major losses caused by the face stages were here (all 5 that escaped major losses thanks to the face stages were under 0.6). On white · flat backgrounds, earlier stages already find almost all the background, leaving little to find, and face-based widening takes character parts of the background’s color (white dresses, black hair). So 0.27 does not do face-based widening when flatness is 0.6 or more (9 of 3.5).

The character map of 134 of the 666 changed (the other 532 have the same character map · names · folders), and the 133 with characters were re-graded by the strict criteria with 0.26 · 0.27 side by side. Better 22 (major loss → without loss 4 · major loss → small loss 3 · small loss → without loss 15), worse 5 (perfect → without loss 3 · perfect → small loss 1 · without loss → small loss 1), same 106; the better side is more numerous than chance would explain (sign test $p = 0.0015$). 13 vs 4 on the 75 white · flat backgrounds, 9 vs 1 on the other 58.

Criterion (650 with characters) 0.26 0.27 Better · worse in 0.27 McNemar exact 𝑝
Perfect separation 24 (3.7%, 95% 2.4–5.4%) 20 (3.1%, 1.9–4.7%) 0 · 4 0.13
Character without loss 87 (13.4%, 10.9–16.2%) 104 (16.0%, 13.3–19.0%) 19 · 2 0.0002
No major loss 377 (58.0%, 54.1–61.8%) 384 (59.1%, 55.2–62.9%) 7 · 0 0.016

Keeping more of the character made names slightly worse. Re-grading the 85 pictures whose name maps changed visibly (faces · character folders unchanged for all 134)

Names (per picture) 0.26 0.27 Better · worse in 0.27 McNemar exact 𝑝
Hair names (323 with real faces found) 226 (70.0%) 230 (71.2%) 8 · 4 0.39
Skin names (the same 323) 183 (56.7%) 186 (57.6%) 3 · 0 0.25
No wrong names (666) 419 (62.9%) 410 (61.6%) 3 · 12 0.035
Right character folders + no wrong names (666) 345 (51.8%) 337 (50.6%) 1 · 9 0.021

These are cases where clothes · legs · hands · armor · props newly kept on the character side were grouped into hair · skin parts or got those names (wrong places 330 → 339), and even in pictures with the same background decision, a slight change in the character map re-split parts and changed names. Losing character is harder to fix than a wrong name (a name only needs the layer renamed, while lost character must be painted with the correction brush), so 0.27 was adopted.

0.28: detaching separated hair pieces: looking at the wrong names that increased in 0.27, the most common case was skirts · legs · sleeves · bags · background pieces with the hair’s base color going into the “hair” part and getting the name (a part gathers the same base color across the whole picture). So hair pieces not connected to the head zone of a face are split off as color-named parts (9 of 4.8). Layer pixels · composites · background · faces · character folder counts are unchanged for all 666 (in 4 pictures with two or more characters, 22–58 pixels moved to a neighboring character’s folder), and in 181 of the 369 pictures with hair names, 6.7% of the “hair” pixels moved to color-named parts.

The rule was changed three times, and every changed picture was re-graded next to 0.27 (61 for the detach-only version, 198 for the version keeping nearby pieces, 43 for the final version with wider anchor faces). Names were graded by the same criteria as the 300 of 11.

Names (per picture) 0.27 0.28 Better · worse in 0.28 McNemar exact 𝑝
No wrong names (666) 410 (61.6%) 437 (65.6%, 95% 61.9–69.2%) 27 · 0 < 0.0001
Right character folders + no wrong names (666) 337 (50.6%) 358 (53.8%, 49.9–57.6%) 21 · 0 < 0.0001
Hair names given (323 with real faces found) 230 (71.2%) 232 (71.8%, 66.6–76.7%) 2 · 0 0.50
Hair “mostly” named (the same 323) 94 (29.1%) 91 (28.2%) 2 · 5 0.45

Wrong places went 339 (256 pictures) → 292 (229 pictures). Compared with 0.26, pictures without wrong names went 419 → 437 (better 28 · worse 10, $p = 0.005$), and wrong places 330 → 292, decreasing more than they had increased in 0.27. Skin · eye names did not change.

Not every detached piece was a wrong name. The first version (keeping only places connected to the head zone) also removed the names of long hair · twin tails · drill hair cut off by arms · sleeves · ribbons, and the version keeping nearby pieces removed the names of a second person not in the character group · a second appearance of the same person · a detached ponytail (15 pictures). Using faces scoring 11 or more as anchors too revived 9 of them, but stockings · a teddy bear’s muzzle · shorts pieces of the same color were also revived, reducing pictures without wrong names by 6 (443 → 437, 7.5). The remaining 6 are cases where long hair tips far from the head, or the hair of people whose face was not found, became color names (10).

0.29: the color step threshold of large pictures in proportion to picture size: the three size-sensitive values (10) were changed to ratios relative to a long side of 1200px and run on the 666. 1200px pictures were kept byte-identical (checked on a sample of 24), and of the 283 other-sized pictures placed next to 0.28, every picture whose character map changed by more than 0.2% was re-graded. Changing the three values at every size made small pictures much worse (7.5), so each value was run separately on large pictures (long side over 1200px), and only the color step threshold, which helped, was added. Grading recorded both the strict grade of the new result and the comparison with 0.28 (better · worse · similar, weighting lost character more heavily than the same area of leftover background), and grades were aligned so that “similar” keeps the 0.28 grade, “better” does not go below 0.28, and “worse” does not go above it (so grading wavering does not mix in as change).

115 high-resolution pictures Result
Pictures whose character map changed 106 (83 by more than 0.2%, 52 by more than 1%, 7 by more than 5%)
Changed pixels 4.27 million pixels back to character · 0.67 million became background
Compared with 0.28 (80 with characters) better 33 · worse 7 · similar 40, sign test $p < 0.0001$
No major loss 57 (51.4%) → 63 (56.8%, 95% 47.0–66.1%), better 6 · worse 0, McNemar exact $p = 0.031$
Character without loss · perfect separation 11 → 11, 3 → 2
Processing time per picture (4 at a time) 18.6 s → 17.4 s

The better pictures are cases where background leaking into long hair tips · hems · sleeves · the edges of held objects stopped, and the 7 worse are cases where background pieces like floors · sofas · curtains · flower fields · watermarks stayed more on the character side. Over all 666, no major loss went 384 (59.1%) → 390 (60.0%). The 551 pictures of 1200px or less do not change.

For names, all 63 pictures whose name maps changed were re-graded. Pictures without wrong names 437 → 434 (better 7 · worse 10, $p = 0.63$), right character folders + no wrong names 358 → 357 (6 · 7), hair names given 232 → 232 (2 · 2), skin names 186 → 185 (1 · 2): no difference, and wrong places 292 → 306. With more pixels kept on the character side, clothes · background pieces with the base color of hair · skin entered those parts slightly more often. Faces · character folders did not change.

0.30: splitting large pictures at a reduced size (setting): two methods of splitting pictures larger than 1200px at a reduced size were added as settings (off by default). Both were run on the 115 high-resolution pictures (long side 2000 · 2048px) shrunk to a long side of 1200px, and graded blind with the original-size (0.29) result placed left/right at random (114 changed, 112 with characters).

Method Reduced better · original size better · similar No major loss (original → reduced) No background found Time per picture PSD size
Reduce everything 25 · 29 · 60 ($p = 0.68$) 65 → 57 (gained 5 · lost 13, $p = 0.10$) 1 → 4 17.4 s → 9.1 s reduced size
Find only background · faces at reduced size 14 · 51 · 49 ($p < 0.0001$) 66 → 58 (6 · 14, $p = 0.12$) 2 → 3 17.4 s → 16.6 s processing resolution

(The two gradings were done separately, so the original-size grades differ slightly.) “Reduce everything” gives results no different from the original size in half the time, so it can be used for speed. “Find only background · faces at reduced size” clearly has more pictures losing more character and is not faster, so choosing it in the settings shows these results and asks for confirmation. Verification was done only with a target size of 1200px.

0.31: not taking places enclosed by lines into the background: the 48 pictures that lost large parts of the character in 0.30 were looked at one by one, coloring each pixel by which background stage first made it background. The main culprits were scene background stage 1 (places with low line density) 25, face-based widening 8, flat background fill 7, color model 4 (2 of them taking the face · hair entirely), unknown 3. The most common shape was the middle of white clothes · skirts · flat-colored hair without lines inside becoming background. Line density is a widely blurred value of lines, so it drops as low as the background in the middle of wide surfaces, but looking in every direction from that spot, any way soon hits an outline. This “enclosure” (4.5) was added as a blocking condition to scene background stage 1 · margin widening · color model · face-based widening.

First several versions were compared by running only up to the background stages (7.5). Then the full processing result (character layer) was compared with 0.30 on all 666, and all 563 pictures whose character map changed by more than 0.2% were graded. For each picture the two results were placed left/right at random so the new version could not be told, and both sides’ strict grades (the 4.5 grading criteria) and which side was better were recorded together. After grading was finished, the key was used to unblind. The 103 pictures changed by 0.2% or less reuse the 0.29 grading (the two versions are effectively the same).

666 (633 judged to have characters) 0.30 0.31 Changed pictures 𝑝
New version better · worse · similar (563 changed)     262 · 106 · 195 sign test $< 10^{-15}$
No major loss 351 (55.5%, 95% 51.5–59.4%) 445 (70.3%, 66.6–73.8%) better 123 · worse 29 McNemar exact test $< 10^{-14}$
Character without loss 91 90    
Perfect separation 17 18    
No background found at all 13 17    
Condition (pictures with characters) Pictures No major loss 0.30 → 0.31 Better · worse (𝑝)
High quality (2000px or more) 111 55.9% → 71.2% 24 · 7 (0.003)
Medium (900–2000px) 410 59.3% → 73.7% 74 · 15 ($< 10^{-9}$)
Low quality (under 900px) 112 41.1% → 57.1% 25 · 7 (0.002)
White · flat background 199 61.8% → 68.3% 25 · 12 (0.047)
Pattern · ornament background 119 58.8% → 78.2% 28 · 5 (< 0.001)
Painted scene background 122 45.1% → 68.0% 32 · 4 ($< 10^{-5}$)
Dark flat background 67 40.3% → 56.7% 14 · 3 (0.013)
No lines 115 31.3% → 49.6% 23 · 2 ($< 10^{-4}$)
Thick paint · brush 145 34.5% → 56.6% 37 · 5 ($< 10^{-6}$)
Character and background colors similar 233 48.1% → 67.0% 52 · 8 ($< 10^{-8}$)

The better pictures are mostly cases where white dresses · skirts · sleeves, the middle of lineless clothes, dark clothes in front of dark backgrounds, and faces · hair the color model used to take came back to the character. The 29 worse (dropped from no major loss) and the 106 judged worse for the new version are cases where hollow background pieces caught as enclosed places (background seen between skirt and arm, between hair, background props · text boxes not touching the border) stayed on the character side, and cases where the scene background fell short of the 5% area criterion and no background was found at all (13 → 17). Character losses decreased (among pictures whose character map changed, the character grew in 537 and shrank in 26), and leftover background increased slightly.

For names, 60 random pictures out of the 384 whose name maps changed by more than 0.2% were graded with the same blinding. New version better 23 · worse 20 · similar 17 ($p = 0.76$), pictures without wrong names 17 → 20 (12 · 9, $p = 0.66$), wrong places 53 → 55, pictures with hair names 29 → 27: no difference. As much as names are newly given to clothes · hair returned to the character, names are also sometimes given to background pieces left on the character side. Processing time, running the same 24 pictures one at a time, did not change: median 6.9 s → 6.5 s (the enclosure computation takes 0.1–0.3 s regardless of picture size).

0.32: fewer pictures with no background found: pictures with no background found at all increased in 0.31 (0.30: 13 → 0.31: 17), so the causes were examined. The 6 newly missed in 0.31 all had a scene background area slightly short of the criterion (5%) (2.9–4.4% with enclosed places removed). Of the 12 that also had no background in 0.30, 3 had a 1–2px border line around the picture edge, so the fill could not start from the border (only these 3 among the 666, 2 of them with white backgrounds), the rest had scene backgrounds of 1.5–4.6% or over 90%, and one (a brush painting) was judged to have almost no lines and did not enter the scene background stage. So (1) frames are found and filled with the inner colors only during the background stages, (2) if the scene background falls short of the criterion with enclosure removed, it is searched again without removing it, and (3) the area criterion of the scene background was lowered 5% → 2%. Running up to the background stages and comparing with 0.31, only 23 of the 666 changed, and the 22 whose character map changed by more than 0.2% in full processing were graded blind against 0.31.

22 pictures whose character map changed Result
New version better · worse · similar 14 · 1 · 7 (sign test $p = 0.001$)
No major loss 7 → 19 (better 12 · worse 0, McNemar exact $p = 0.0005$)
No background found at all (633 with characters) 18 → 5
No major loss among the 633 with characters 443 (70.0%) → 455 (71.9%, 95% 68.2–75.3%)

(The 22 changed pictures were re-graded with both versions together this time, and the 0.31-side grades differed from the 0.31 grading in 6 pictures, so the 0.31 values are written as 445 → 443 and no background 17 → 18.) The 1 worse picture is a figure on a white background inside a decorative border, where the newly found scene background also took a lineless painted arm, and 0.31, which found no background at all, was judged better. For names, the 18 pictures whose name maps changed were graded with the same blinding: better 3 · worse 7 · similar 8 ($p = 0.34$), no difference; wrong places 15 → 13, pictures with hair names 4 → 8. In pictures with newly found background, the character is separated and gets new face · hair names, while background pieces left on the character side sometimes get color names.

0.33: verifying the character layer, and gaps: from the 633 with characters, 120 random pictures (seed 80) had their 0.32 character layers placed next to the originals, and the amount and kind of background left in the character layer were recorded one by one. For how much character was lost (completeness), the strict grades of the 0.32 grading are used.

Background left in the character layer (120 pictures) Pictures No major loss (P · K · c)
None 17 (14%) 10
Small pieces 38 (32%) 24
Visible pieces (a few % of the picture) 30 (25%) 20
Wide (over 10% or most of the background) 35 (29%) 30
Kind of leftover background All pictures The 65 with visible · wide leftovers
Props · objects drawn with lines 36 31
Blurred background · scene pieces 34 26
Text · logos · frames 29 26
Background seen between character parts (gaps) 18 8
Effects (light · petals · particles) 17 10
Floor · ground 16 16
The whole background 13 13
Thin rim around the outline 9 0

(If a picture has several kinds, all were counted.) Because the background is taken on the side of not losing the character, pictures with wide leftover background actually had fewer major losses (5 of 35, versus 7 of 17 with no leftover background). The area that was background in 0.30 but stayed on the character side in 0.32 averaged 1.9 · 3.3 · 5.5 · 7.1% for no leftover · small pieces · visible · wide, so much of the leftover background is what 0.31’s enclosure protection kept. So it was checked whether the protection could be released only in pictures where 0.31 was worse, but none of 13 values built from enclosure · lines · face zones could separate such pictures (7.5).

Props · blurred scenes · text require recognizing what is the character’s object and what is the background’s, so they are hard to fix with rules, while gaps, on white · flat backgrounds, have exactly the background’s color and can be separated by rules, so these were fixed (10 of 3.5, 4.5, 4.6). After setting the thresholds by looking one by one at the 161 pictures changed by a version gathering pieces loosely (7.5), the background stages were run on all 666, giving 168 pictures with gaps found (mean 0.38% of the picture, up to 2.6%; excluding 30 pictures removed for dense lines) and 134 pictures whose character map changed by more than 0.1% in full processing. 50 of them, chosen at random, were compared with 0.32 under left/right random blinding.

50 of the 134 pictures whose character map changed Result
New version better · worse · similar 17 · 6 · 27 (sign test $p = 0.035$)
No major loss 35 → 35 (no picture changed)
Perfect separation (P) 0 → 3
Leftover background of the 25 changed among the earlier 120 (not blind) better 8 · worse 2, no leftover background 17 → 20, pictures with gaps left 18 → 10

The better pictures are cases where, for figures on white backgrounds, the space between arm and body · between hair · between legs became background. The 6 worse are cases where white character parts surrounded only by lines (white wings · white clothing pieces · white plates of a robot, the white body of a small figure) went as gaps. Pictures losing large parts of the character neither increased nor decreased.

For names, 60 random pictures out of the 96 whose name maps changed by more than 0.2% were graded with the same blinding: better 18 · worse 21 · similar 21 ($p = 0.75$), no difference. Wrong places 64 → 73 (more wrong 18 · less wrong 10 pictures, $p = 0.19$), pictures without wrong names 23 → 19, pictures with hair names 33 → 37. Removing gaps changes regions slightly, changing which parts get names, without leaning to one side. Processing time did not change: median of the 198 changed pictures 10.0 s → 9.5 s (same computer, 4 at a time).

0.34: tackling the limitations again: each limitation of 10 was attempted again, and adoption was decided by synthetic pictures (ground-truth maps) · full processing of the 666 · blind grading. What was not adopted is in 7.5 (light over lines, spreading glow, “clothes” names, erasing rough dots, left-right identical color clusters, etc.).

Adopted Grading Result
Mirror agreement of naming · folder faces (10 of 4.5) all 89 pictures whose name maps changed by more than 0.2% (excluding pictures where only color names changed), left/right random blinding new version better 44 · previous better 27 · similar 18 ($p = 0.057$), wrong names 78 → 34 places
  all 13 pictures whose character folder count changed new version better 7 (one-person pictures that had been split in two) · previous better 5 (lost one face in two- or three-person pictures) · similar 1
  naming faces of the 666 · synthetic pictures 1046 → 755. Fake faces on the 57 synthetic pictures 5 → 1 (real faces 70/73 unchanged)
Third return pass ($\Delta E \ge 5$ · fine color bins, 4.5) 6 synthetic dark-background pictures (ground-truth maps) character kept 84.1% → 100%. All 57 synthetic 97.65% → 99.41%
  8 AI-generated pictures whose character map changed by more than 0.2%, blind new version 1 · previous 3 · similar 4. Some pictures had dark background smudges around the returned black hair come to the character too
Closing narrow gaps on bright flat backgrounds (4.5) all 160 pictures whose character map changed by more than 0.2%, blind (strict grades of both versions recorded together) new version better 63 · previous better 48 · similar 49 ($p = 0.18$), no major loss 99 → 114 (resolved 27 · arose 12, McNemar $p = 0.024$)

In gap closing, the 48 where the previous version was better are pictures where white background narrowly open between character parts (between arm and body, between hair, between flying hair tips) stayed in the character layer, and the 63 where the new version was better are pictures where white clothes · white hair · pale skin leaked into the background through broken outlines. The previous-side grades of the 160 re-graded with both versions together differed from the stored grades in 65, so writing no major loss over all 628 judged to have characters with the same grading gives 450 (71.7%, 95% 68.0–75.2%) → 465 (74.0%, 70.4–77.4%). Major loss (M) grades went 177 → 162.

Then the character layer was looked at again. Of the random 120 whose leftover background was recorded in 0.33, the 30 whose character map changed by more than 0.1% in 0.34 were recorded again by the same criteria: leftover background decreased in 2 · increased in 7 · same in 21, and over all 120, no leftover 20 → 20 · small pieces 38 → 34 · visible 27 → 30 · wide 35 → 36. All 7 increases are white background pieces returned by gap closing. These pieces are surrounded only by lines and have the background’s color, but are large (over 2% of the picture · 5% of the character’s paint), so the gap rule of 0.33 (4.5) does not take them, and that upper limit exists to protect white stockings · white clothing pieces, so it could not be relaxed. Choosing the side of not losing the character, gap closing stays, and this cost is written in 10. Splitting 36 random major background losses by cause: white · light clothes drawn on light backgrounds 17 · brush paintings 7 · scenes with colors similar to the character 6 · touching the border 3 · dark scenes 1 · other 2; gap closing targeted the first of these (9 of the 17 changed; 3 of the 8 unchanged were taken by the scene background stage rather than the flat fill).

Overall check (0.33 → 0.34) Result
57 synthetic (ground-truth maps) background found 93.2 → 93.1%, character kept 97.65 → 99.41%, real faces 70/73 → 70/73, fake faces 5 → 1, character folders 15/15, glow recall 6.8 → 8.8% (precision 100%)
Left-right flipping (25 AI-generated pictures) background agreement 99.24 → 99.24%, same character count 22 → 23, name overlap hair 46 → 47% · skin 53 → 53% · eyes 59 → 59%
Reproduction PSNR · processing time on the 666 lowest 44.6 dB. Median per picture 9.4 s → 10.8 s (4 at a time, face finding done twice)

11.7 Base colors of brush paintings (synthetic pictures)

Measured on pictures drawn in code with ground-truth material maps. The same figure (hair, skin, shirt, jacket, ribbon, whites of the eyes, pupils) was drawn as 1 cel-shaded picture (lines + two-level shading), 3 brush paintings (soft shading, blue shadows · warm light, brush-mark blotches), 3 pictures with hair grain stroked in dark brush lines, and 3 brush paintings whose shadows drift toward gray. The share taken by the dominant part per material (coverage), the share of the dominant material per part (purity), and the difference between base color and ground-truth color ($\Delta E$) were averaged (excluding a 2px band at material boundaries and pixels gone to the background).

  Coverage Purity Base color $\Delta E$
0.16 77.0% 85.0% 25.4
0.17 96.6% 99.3% 18.2

In 0.16, the blue hair part of brush paintings swallowed pale skin · whites of the eyes · pupils · the jacket (color relations with white · gray on one side), and hair with grain strokes was split into 6–8 parts (hair coverage 36–54% → 97–100% in 0.17). The cel-shaded picture is unchanged. The problem of lineless faces · clothes going to the background in grain-stroked pictures (10) is not included in these values. The share of lines with the same color on both sides is 86–88% in grain-stroked pictures and 4–31% in the 25 AI-generated pictures, so in AI-generated pictures the grain rule does not act and only the color relation rules change. Reproduction PSNR of the AI-generated pictures averages 55.67 → 55.62 dB, the mean number of parts 26.1 → 26.5, and the share of base color boundaries where there is neither a line nor a color edge 6.3% → 6.3%. Visibly better pictures: close-up of a girl in a hat (face · hands that were one part with cream pieces became pink skin), qipao card illustration (skin separated from the white dress · silver hair), two people at the window (white blouse and skin separated), two people, full body (face and white jacket separated), café and mascot (ice cream colors separated).

11.8 Base colors (0.39)

The 642 AI-generated pixiv pictures (consistent set of 300 · mixed set of 342) were split into 323 development pictures (151 · 172) and 319 hold-out pictures (149 · 170); the rules were set by looking only at the development set, and the hold-out set was graded blind once. To look only at base colors, a composite of only the base color layers was placed next to each original (background hatched).

What was wrong with 0.38’s base colors: 68 development pictures (37 of the 300 set · 31 of the 342 set) were viewed as base-color-only composites; one picture can have several problems.

Problem Set of 300 (37) Set of 342 (31)
Finely broken patchwork (pictures full of scenery · props, brush · watercolor pictures) 19 (51%) 21 (68%)
Different materials with one base color (skin with white clothes · pale hair, blonde hair with a cream coat) 14 (38%) 13 (42%)
Colored areas buried in a white · gray base color (red tail, orange pattern, yellow trims) 10 (27%) 6 (19%)
A shadow surface with its own base color (two-colored hair) 7 (19%) 1 (3%)
Small colored areas such as eyes · hair ties · ties lost into a neighbor’s color 4 (11%) 5 (16%)
Base color on the shadow side (a gold cloak as brown, black hair as gray) 1 (3%) 3 (10%)
No visible problem 3 (8%) 2 (6%)

0.39 fixes the third, fifth and sixth (4.7, 4.8). The most common ones — patchwork, different materials with one base color — and shadow surfaces across a line getting their own base color remain (10).

Base-color resolving power (ground-truth pictures): measured on 117 synthetic pictures with material ground-truth maps (57 background · face synthetic pictures, 48 naming synthetic pictures, 12 brush paintings). A material is a (character, material) pair, and the ground-truth base color is the color it was drawn with (the character’s set color for hair · skin · clothes · iris, white for collars · whites of the eyes, the local color for brush paintings). A 3px band around material boundaries (character boundaries included) and pixels gone to the background (no base color layer) are excluded; a pixel is wrong if the $\Delta E^*_{ab}$ between its base color layer color and the ground-truth base color is 10 or more. The mean over materials (with at least 100 remaining pixels) of each material’s wrong share is the picture’s base-color error rate,

\mathrm{BER}_{\text{base}}=\frac1{|M|}\sum_{m\in M}\frac{|\lbrace p\in m:\ \Delta E(F_p,\ F^{\text{true}}_m)\ge10\rbrace|}{|m|},\qquad \text{base-color resolving power}=\frac1{\overline{\mathrm{BER}}_{\text{base}}}

Note — Why: This measures how well base colors match the true material colors in one number of the same form as the resolving power. How it works: For each material 𝑚, the share of pixels whose base color differs from the true color by $\Delta E \ge 10$ (a clearly different color) is the error rate, averaged over materials. Each material weighs the same, so failures on small materials (eyes, ribbons) count fully. The reciprocal is the base-color resolving power. References: R7 CIE 2004 · a rule set by this program

and the reciprocal of its mean over the 117 pictures is the base-color resolving power. The 95% CI of the ratio is a picture-level paired bootstrap (10,000 draws, seed 20261002).

Version 57 background · face synthetic 48 naming synthetic 12 brush paintings All 117 Base-color resolving power Coverage Purity Mean base color $\Delta E$ Parts
0.38 23.25% 20.92% 56.83% 25.74% 3.89 95.4% 96.6% 7.0 6.5
0.39 22.85% 20.49% 49.28% 24.59% 4.07 94.7% 96.8% 6.2 8.2

0.38 → 0.39 is 1.05× (95% CI 1.02–1.07×), with 19 pictures better · 9 worse · 89 the same. With other thresholds it is 1.02× (0.996–1.046) at $\Delta E$ 5 and 1.08× (1.015–1.153) at 20; at 5 the interval does not stay above 1. Of the 9 worse pictures, 7 are within 0.4 percentage points (the glossy band of black hair is no longer merged into the hair and becomes its own gray part, 4% of the hair pixels; 3 of 4.8). Two two-character pictures (striped background · naming synthetic) are 4.5 points worse because the base color of the second character’s green iris became the color of the bright spot inside the iris (the lit-side base color of 4.7). The whites of the eyes are wrong at 87–93% in both versions (the shadow color on the white is wider, or it is merged into the skin part). The shirt · jacket of the brush paintings (blue shadows · warm light) mostly stay above $\Delta E$ 10 in 0.39.

Blind grading (hold-out): of the 319 hold-out pictures, the base color composite changed in 282 (131 of the 300 set · 151 of the 342 set); the 276 in which more than 0.1% of the character pixels changed by $\Delta E$ 10 or more were placed as [original | left | right] (sides randomized per picture, unblinded only after all grades were written) and graded by which side has better base colors, looking only at base colors.

Set Graded 0.39 better 0.38 better Same Sign test 𝑝
300 (consistent set) 127 60 12 55 $8.1 \times 10^{-9}$
342 (mixed set) 149 63 8 78 $1.0 \times 10^{-11}$
All 276 123 20 133 $2.8 \times 10^{-19}$

The 6 pictures that changed by less than 0.1% were not graded, and 37 had byte-identical base color composites. In changed pictures, the median share of changed character pixels is 4.5%. On the development set, a version with only the first two rules (splitting colors off white · gray materials, keeping small colored areas) was reviewed blind on 30 pictures: 0.38 better 1 · new better 20 · same 9 (set of 300: 1 · 10, set of 342: 0 · 10); the version adding the lit-side base color was compared with it on 20 pictures: with it better 4 · worse 1 · same 15.

Existing scores (0.38 → 0.39):

Score Result
Background maps (background layer alpha $\ge 128$) byte-identical for all 642 AI-generated pixiv pictures · 185 ground-truth pictures. So the strict separation grades and “no major loss” (300: 84.6% · 342: 75.4% · all 79.6%) and the background resolving power (1.78× version 0.1, 1.50–2.14×) are unchanged
Character folder counts identical for all 642. In the character folder maps, at most 0.014% of the character pixels moved to the neighboring character in 11 pictures (the moving of part pieces under 64 pixels depends on the parts)
Names (blind, the 99 hold-out pictures whose name maps changed) wrong names 93 → 93 (fewer in 8 pictures · more in 7, $p = 1$). Pictures without wrong names 35 → 33 (gained 1 · lost 3, $p = 0.63$). Pictures with a hair name 61 → 63 (better 3 · worse 3), skin 63 → 63 (better 3 · worse 0, $p = 0.25$). Which is better: 0.38 11 · 0.39 28 · same 60 ($p = 0.009$)
Names, by set 300 (50 pictures): wrong names 36 → 33, better side 0.38 5 · 0.39 20 ($p = 0.004$). 342 (49 pictures): 57 → 60 (fewer in 3 · more in 5, $p = 0.73$), pictures without wrong names 14 → 11 ($p = 0.25$), better side 6 · 8 ($p = 0.79$)
Reproduction PSNR mean over 642: 54.820 → 54.821 dB (difference +0.001, 95% CI −0.007 to +0.011), lowest 44.60 → 44.60 dB. On the 319 hold-out pictures, up 132 · down 154 (sign test $p = 0.21$). Over all 642, slightly lower pictures are more common (244 · 332, $p = 0.0003$; median size of the change 0.005 dB)
Part counts (mean over 642) parts 21.97 → 23.16, “small parts” 1.75 → 4.22 (pictures with small parts 221 → 320), pictures reaching the maximum of 32 parts 108 → 133
Pictures where the rules applied (642) splitting colors off white · gray materials 438 (300 set 213 · 342 set 225; 3.0 new materials per picture on average, the moved tones a median 0.4% of the picture), keeping small colored areas 432 (225 · 207), lit-side base color 517 (245 · 272; 6.0 materials per picture on average). On the 117 ground-truth pictures: 5 · 73 · 37
Processing time the background stage (2–4 s) is unchanged; the later stages took 2% more in total on 12 hold-out pictures (the shorter of two alternating runs in the same process; median 2.95 → 2.90 s)
Screen verification (28 test pictures) 0 errors · external requests, both psd-tools · ag-psd read all 28 (merged image PSNR 48.76–61.87 dB; 0.38: 48.79–61.86 dB), splitting the same picture twice byte-identical for all 28, re-split cache after corrections fine. Mean layer count 113.3 → 121.7

11.9 Tilted pictures (0.37)

Pictures with ground truth were rotated and measured. The 57 synthetic pictures (character · material · two-eye ground truth) and 25 test pictures (35 two-eye positions marked by a person; 8 of them with character outline ground truth) were rotated about the center with Catmull–Rom (clockwise +) in three ways: corners of the enlarged canvas filled with white, filled with transparency, and only the largest rectangle inside the rotated picture cropped to fill the canvas. Results were mapped back to the original coordinates to match the ground truth, excluding pixels outside the rotated picture. On the 82 upright pictures, the tilt part left the character map · name map · faces byte-identical to 0.36 (0 differing pictures). Table cells are 0.36 → 0.37 (faces: found / ground truth; folders: pictures with the right character count / pictures with two or more people).

Pictures saved rotated with white · transparent corners (no setting):

Rotated canvas Synthetic: background found % Synthetic: character kept % Synthetic: faces found Synthetic: right character folders Real: faces found Real: fake faces 8 outline pictures: background found % 8 outline pictures: character kept %
White corners −15° 88.1 → 93.0 99.3 → 98.6 71/73 → 72/73 15/15 → 15/15 28/35 → 28/35 15 → 16 18.8 → 34.9 96.6 → 97.3
White corners 15° 88.1 → 93.0 99.6 → 99.3 71/73 → 71/73 15/15 → 15/15 28/35 → 27/35 16 → 14 25.8 → 37.9 96.3 → 98.5
White corners −45° 66.5 → 93.0 92.6 → 96.9 59/73 → 70/73 7/15 → 15/15 11/35 → 25/35 16 → 20 19.4 → 12.9 96.8 → 99.3
White corners 45° 65.5 → 93.0 93.7 → 96.9 62/73 → 70/73 11/15 → 15/15 18/35 → 24/35 15 → 18 18.8 → 15.3 96.8 → 99.5
Transparent corners −15° 0.0 → 93.1 100.0 → 98.6 71/73 → 72/73 15/15 → 15/15 28/35 → 28/35 15 → 16 0.0 → 33.6 100.0 → 98.6
Transparent corners 15° 0.0 → 93.1 100.0 → 99.3 71/73 → 71/73 15/15 → 15/15 28/35 → 27/35 17 → 13 0.0 → 38.9 100.0 → 98.0
Transparent corners −45° 0.0 → 92.9 100.0 → 96.9 65/73 → 70/73 11/15 → 15/15 11/35 → 25/35 17 → 20 0.0 → 15.1 100.0 → 99.1
Transparent corners 45° 0.0 → 93.1 100.0 → 96.9 64/73 → 70/73 11/15 → 15/15 18/35 → 24/35 17 → 18 0.0 → 15.4 100.0 → 99.3

In 0.36, transparent corners made the picture look like a transparent-background picture, so no background was searched (background 0%). At 45°, faces in AI-generated pictures went 11–18 → 24–25, and character folders in synthetic pictures went 7–11 → all 15 right. At white corners ±45°, background found on the 8 outline pictures is lower than 0.36 (19 → 13%, a limitation in 10).

Pictures tilted while filling the whole canvas without corners (the “Tilted picture” setting on):

Filled + setting on Synthetic: background found % Synthetic: character kept % Synthetic: faces found Synthetic: right character folders Real: faces found Real: fake faces 8 outline pictures: background found % 8 outline pictures: character kept %
Filled −15° 94.0 → 94.0 99.3 → 99.3 71/73 → 71/73 15/15 → 15/15 25/34 → 29/34 12 → 13 54.0 → 54.0 93.3 → 92.8
Filled 15° 94.4 → 94.4 94.8 → 94.8 67/73 → 67/73 12/15 → 12/15 26/31 → 26/31 10 → 13 49.6 → 50.4 93.4 → 94.1
Filled −45° 96.3 → 95.8 65.4 → 66.8 40/71 → 48/71 1/15 → 1/15 12/30 → 20/30 11 → 15 47.4 → 49.0 88.2 → 90.7
Filled 45° 96.3 → 95.8 67.9 → 65.4 42/71 → 48/71 1/15 → 1/15 16/30 → 18/30 13 → 17 48.6 → 48.5 88.7 → 88.4
Filled −90° 92.9 → 93.2 74.8 → 98.2 1/73 → 71/73 0/15 → 15/15 6/35 → 26/35 20 → 20 40.2 → 41.2 95.8 → 98.8
Filled 90° 89.7 → 92.6 75.6 → 98.2 1/73 → 71/73 0/15 → 15/15 9/35 → 25/35 20 → 19 40.1 → 42.4 95.6 → 97.9

At ±90° (pictures lying on their side), synthetic faces 1 → 71, real faces 6–9 → 25–26, and character kept 75 → 98% improved. At ±45° faces increase but character folders · character kept stay the same, and fake faces increased by 1–4 at ±15 · ±45°. Turning the setting on for the 82 upright ground-truth pictures gives real faces 29/35 → 26/35 · fake faces 15 → 17, and synthetic fake faces 1 → 2.

Blind tests (AI-generated pictures): the 666 were split into three bins by original long side (under 900px · 900–1600px · 1600px or more), and 20 per bin were chosen for each of two tests (T1, T2), 120 different pictures. The picture size ratio 𝑟 was set independently of the original size as $r = 2^u,\ u \sim U(-1, 1)$ (density $f(r) = 1/(2r \ln 2),\ 1/2 \le r \le 2$, cumulative $F(r) = (1 + \log_2 r)/2$), with $u_i = -1 + (2i - 1)/20$ shuffled within each bin so that small · large are mixed evenly. The processing long side is $L = \min(r \cdot \text{stored long side}, 4096)$; enlarging repeats DCCI 2× until past the target and then area-averages, shrinking area-averages (long side 280–3957px, 60 enlarged · 60 shrunk). T1 rotated by ±15 · ±30 · ±45° with white · transparent corners, T2 by ±45 · ±60 · ±90° filling the canvas. The two results (pictures with places gone to the background painted, character folder counts, names) were placed left/right at random (separately drawn random numbers, unblinded after grading) and graded by the same criteria, looking first at how well the character was kept and the background removed, then at faces · names.

Note — Why: Picture sizes must be spread evenly between shrinking and enlarging so size effects do not lean one way. How it works: With $r = 2^u$ and 𝑢 uniform on −1 to 1, the distribution is uniform on a log scale, so ½× and 2× are equally likely. By change of variables the density is $f(r) = 1/(2r\ln 2)$ and the cumulative $(1 + \log_2 r)/2$. $u_i = -1 + (2i - 1)/20$ are the midpoints of 20 equal cells (stratified sampling), spreading more evenly than random draws. The processing long side is capped at 4096 for memory. DCCI, used for enlarging, is a directional cubic interpolation that follows edge directions so boundaries do not blur. References: a rule set by this program · R49 Zhou et al. 2012

Test 0.37 better 0.36 better Same Sign test 𝑝 By angle (better : worse : same)
T1 rotated canvas (no setting) 37 12 11 0.0005 15° 11 : 3 : 4 · 30° 16 : 2 : 3 · 45° 10 : 7 : 4
T2 filled, setting on vs off 28 12 20 0.02 45° 7 : 5 : 6 · 60° 12 : 4 : 5 · 90° 9 : 3 : 9

Splitting time in medians is 1.34× for rotated canvases (two tilt hypotheses) and 1.45× with the setting on (seven). A version changing the down-direction rule to 60° · one side (7.5) was re-graded the same way on the 17 of the above 120 whose results changed: better 6 · worse 8 · same 3 ($p = 0.79$), so it was not added.

11.10 Black-clothes barrier (0.37)

Drawing posed synthetic pictures (full body · 14 poses · combinations of bending and turning the waist · neck, 6 backgrounds, 5 shirts · skirts, legs bare or in stockings of the lines’ color #2a2a30), pictures with stockings kept only 73% of the character (bare legs 94%), so the background stages were turned off one at a time to trace it, and all the lost pixels came from scene background stage 1 (3.5). On 80 pictures of the same poses (40 stockings · 40 bare legs, random), 0.36 → 0.37:

Group Character kept % Background found % Pictures with character under 90% Kept improved · worsened by more than 1%p
Black stockings 72.1 → 83.1 96.5 → 96.1 28 → 16 12 · 5 ($p = 0.1435$)
Bare legs 94.5 → 96.7 88.7 → 88.7 8 → 7 16 · 4 ($p = 0.0118$)
All 83.3 → 89.9 92.6 → 92.4 36 → 23 28 · 9 ($p = 0.0026$)

On the 666 AI-generated pictures (background stages), the background of 144 changed by more than 0.1%, and 138 had less background (returned to the character, median 0.39%, at most 33.7%). Cropping and enlarging only the changed places and grading them placed left/right at random: 0.37 better 86 · 0.36 better 20 · same 38 ($p < 0.0001$). The better pictures are mostly black hair · clothes · capes on white backgrounds, dark weapons · props, and text · framed pictures touching white backgrounds. The worse ones are mostly background water drops · star patterns, text pieces, color panels · props staying fragmented on the character side, and sometimes background smudges remaining in dark-background pictures. On the upright ground-truth pictures, the 25 AI-generated pictures are the same on every metric, and the 57 synthetic pictures go background found 93.1 → 92.9%, character kept 99.4 → 98.9% (4 dark-background pictures, 10).

Enlargement methods (used for future verification): 16 pictures per bin (48) from the 666 were halved by area averaging · by taking every other pixel, enlarged back 2×, and compared with the original.

Method PSNR (dB, shrunk by area averaging) Edge PSNR (top 10% of brightness gradient) SSIM Pictures where closest
Nearest pixel 28.42 20.09 0.9029 1
Bilinear 28.13 20.43 0.8945 0
B-spline 26.86 19.31 0.8614 0
Mitchell (1/3, 1/3) 28.55 20.82 0.9026 0
Catmull–Rom 29.31 21.54 0.9167 0
Lanczos 2 29.34 21.62 0.9168 0
Lanczos 3 29.66 22.04 0.9201 6
DCCI 29.96 22.29 0.9244 41

When shrunk by taking every other pixel, DCCI was also highest at 30.07 dB (47 of 48 pictures).

11.11 12-category blind test · reverse verification (0.37)

Using condition tags people assigned to the 666 AI-generated pictures (number of people · occlusion · focus · tilt · pose · viewpoint · paint · line style · clothes · subject and background colors, etc.; 𝑘 = the number of variables deviating from the default per picture), 12 categories were made, and for each category 120 samples mixing variations were made from 25 pictures (the standard category has only 14 matching pictures), 1440 in all (289 pictures) (fixed seed).

The two results (pictures with places gone to the background painted, character folder counts) were placed left/right at random (separately drawn random numbers, unblinded after all 1440 were graded) and graded by the same criteria, first how well the character was kept and the background removed, then faces · names.

Category Pictures Original size (A) better Enlarged 2× (B) better Same Sign test
Standard (0–1 variables off the default) 14 35 17 68 $p = 0.0175$
Opposite situation (left-right · top-bottom flips) 25 14 8 98 $p = 0.2863$
Tilted pictures 25 36 11 73 $p = 0.0003$
Pose (bending · sitting · lying, etc.) 25 35 8 77 $p < 0.0001$
Size (much smaller · much larger) 25 24 13 83 $p = 0.0989$
2 variables combined 25 31 7 82 $p = 0.0001$
3 variables combined (incl. clothes · props) 25 24 18 78 $p = 0.4408$
4 variables combined (incl. similar subject · background colors) 25 18 15 87 $p = 0.7283$
5 variables combined (incl. several figures) 25 28 14 78 $p = 0.0436$
6 or more variables combined (incl. face conditions) 25 34 23 63 $p = 0.1849$
Face conditions (profile · back · eyes closed · occluded) 25 23 15 82 $p = 0.2559$
Other (viewpoint · focus · paint · line style) 25 24 16 80 $p = 0.2682$
All 289 326 165 949 $p < 0.0001$

Of the 491 with differing results, enlarging was better in 33.6% (95% Wilson interval 29.6–37.9%). By processing long side, A : B was 54 : 28 under 600px, 88 : 39 at 600–900px, 52 : 29 at 900–1200px, 42 : 32 at 1200–1600px, and 90 : 37 at 1600px or more, so enlarging was not better at any size, and the difference was largest for ±45° filled (94 : 22). Splitting time averages 10.2 s → 32.6 s (3.2×). The character maps of the two versions agree on an average of 93.0% of opaque pixels (the bottom 10% at 85.1% or less), and character folder counts agree in 96.2%. The current approach of not enlarging pictures to split is kept (the same conclusion as the 0.29 experiment in 7.5).

Reverse verification: for rotated or flipped samples, the picture at the same size without rotation · flipping (the reference) was split separately, and its result was moved into the sample’s coordinates and compared on the sample’s opaque pixels (agreement is the share of pixels with the same character/not-character decision). Filled-and-cropped samples lose edges the reference had, so the difference also includes border rules applying differently.

Variation Samples A agreement % A character IoU % B agreement % B character IoU %
Flip only 251 97.5 96.1 93.4 88.4
±15°, white corners 234 91.3 85.7 88.7 80.8
±15°, filled 246 85.9 79.5 83.7 75.9
±45°, white corners 244 87.5 80.8 86.3 79.0
±45°, filled 236 76.1 69.5 71.2 64.3

For parts, 120 reference parts (area 0.1% or more) were drawn per category, and the IoU with the most-overlapping part in the sample was measured. Medians were 24–42% (A) by category, with 22–42% of parts at 0.5 or more. Over all reference parts, even flip-only samples have a median of 0.49 (49% at 0.5 or more), and rotated samples 0.25–0.34, so the boundaries splitting parts change by about half even from flipping alone. The background layer and the character map had neither overlapping pixels nor pixels in neither for every sample of A (B overlaps 0.2% on average from returning by majority vote).

11.12 Returning islands in the scene background (0.38)

The 642 AI-generated pixiv pictures (300 · 342) were stratified by set and 0.34 grade and split into 323 development pictures · 319 hold-out pictures (fixed seed). The rule and thresholds (a quarter, faces) were set by looking only at the development pictures, and the hold-out pictures were graded once, after the rule was set. Pictures whose background map changed by more than 0.1% (127 development · 114 hold-out) were laid out as original · left · right (left/right at random, without knowing which is the new version), and with the character layer emptied to a checkerboard (or black) where the background was decided, both versions were graded separately, then unblinded. Gained · lost are the numbers of pictures that newly pass · newly miss the criterion from 0.37 → 0.38, and 𝑝 is McNemar’s exact test (picture counts are pictures with characters).

Set Pictures No major loss (gained · lost, 𝑝) Character without loss (gained · lost, 𝑝) Perfect separation Grade up · down
Hold-out, all 110 85 → 96 (11 · 0, 0.0010) 60 → 85 (25 · 0, < 0.0001) 4 → 1 25 · 4
Hold-out · AI-generated pixiv 300 57 45 → 50 (5 · 0, 0.063) 31 → 44 (13 · 0, 0.0002) 3 → 1 13 · 3
Hold-out · AI-generated pixiv 342 53 40 → 46 (6 · 0, 0.031) 29 → 41 (12 · 0, 0.0005) 1 → 0 12 · 1
Development, all 121 80 → 107 (28 · 1, < 0.0001) 49 → 86 (39 · 2, < 0.0001) 3 → 1 45 · 5
Development · AI-generated pixiv 300 61 47 → 58 (11 · 0, 0.0010) 33 → 48 (16 · 1, 0.0003) 1 → 0 18 · 2
Development · AI-generated pixiv 342 60 33 → 49 (17 · 1, 0.0001) 16 → 38 (23 · 1, < 0.0001) 2 → 1 27 · 3

Grades are ordered perfect separation > character intact (background left) > small pieces lost > major loss > no background found. Comparing the same 114 hold-out pictures side by side and choosing the better one gives 0.37 better 52 · 0.38 better 55 · same 7 ($p = 0.85$; 300: 32 · 26 · 2, 342: 20 · 29 · 5), about even. When background shapes attached to the character were mixed into the returned islands, the 0.37 side with less leftover background was chosen (10); by grade, no hold-out picture lost “no major loss”. The earlier version that also returned floating decorations (7.5) was better 66 · worse 28 · same 43 than 0.37 on the development pictures, and the version adding the quarter condition was better 47 · worse 9 · same 4 than that one.

Over all 642 (the 401 unchanged use the stored 0.37 grades, the 241 changed use this blind grading for both versions), 0.37 → 0.38 is as follows (95% Wilson intervals in parentheses).

Set Pictures No major loss Character without loss Perfect separation Major loss No background found
AI-generated pixiv 300 285 78.9% (73.8–83.3) → 84.6% (79.9–88.3) 34.7 → 44.6% 4.6 → 3.5% 21.1 → 15.4% 0 → 0%
AI-generated pixiv 342 329 68.7% (63.5–73.5) → 75.4% (70.4–79.7) 22.8 → 33.1% 2.4 → 1.8% 29.8 → 23.1% 1.5 → 1.5%
All 614 73.5% (69.8–76.8) → 79.6% (76.3–82.6) 28.3 → 38.4% 3.4 → 2.6% 25.7 → 19.5% 0.8 → 0.8%

As same-picture pairs, “no major loss” gained 39 · lost 1. The values from grading 0.37 separately were 300: 78.0% · 342: 67.2% · all 72.2% (without loss 21.1%); the boundary between “small pieces lost” and “without loss” is a criterion on which grading wavers (Strict separation rate above), so the without-loss share came out higher in this grading. The difference between the two versions should be read from the paired comparison above, graded the same way.

11.13 Five-target classification by case (0.39)

To see in which cases backgrounds, base colors, faces, objects, and the body (pose) come out right and in which they go wrong, 0.39 was run with default settings on 10,080 synthetic pictures with ground truth and on the 666 AI-generated pictures without it.

Synthetic pictures (scored against ground truth): The figure of the posed synthetic pictures was varied at several levels for each of the five targets, and every combination of levels was drawn: 6 backgrounds (flat, gradient, dark flat, line-drawn room, stripes, bokeh) × 4 base-color cases (basic, lineless color bands on white clothes, small color patches (buttons, tie, ribbon), wide shadows on hair and clothes) × 6 faces (front, head turned 60°, eyes closed, small face (figure at 42% of the frame), dark skin, head tilted 35°) × 5 objects (none, bag in hand, box on the floor beside, ball held in front, background-colored bag in hand) × 14 poses = 10,080 pictures. Each picture was drawn together with its ground-truth maps (character side, materials, base colors, 10 body parts, which side each object belongs to, both eye positions); a 3px band around the ground-truth boundary is excluded from scoring. The “good” criteria were fixed before looking at results: background — at least 90% of the background found; body — every visible body part (30 pixels or more) at least 90% kept on the character side; base colors — for every material over 300 pixels (eyes excluded), at least 80% of its pixels with $\Delta E < 10$ from the true base color; faces — when both eyes are visible, a face of 0.5–2× the size found near the midpoint between the eyes (within half the face size); objects — at least 90% of the object pixels on the right side (held or hugged items with the character, items on the floor with the background). A target is not counted when the face is not visible or there is no object. The 168 pictures used for the blind-grade check below were run a second time separately, and the scores of all five targets matched the main run in 168 of 168 pictures.

Target Good 95% CI 80% CI
Background 77.8% (7,838/10,080) 76.9–78.6 77.2–78.3
Body 72.0% (7,253/10,080) 71.1–72.8 71.4–72.5
Base colors 23.6% (2,381/10,080) 22.8–24.5 23.1–24.2
Faces 42.6% (4,294/10,080) 41.6–43.6 42.0–43.2
Objects 79.5% (6,413/8,064) 78.6–80.4 78.9–80.1

All five targets were good in 436 of the 8,064 pictures with an object (5.4%); adding the pictures without an object (four targets counted), every counted target was good in 596 pictures (5.9%). The table below gives the good rate (%) for each level of each variable; the number of pictures per level is 10,080 divided by that variable’s number of levels (the object column skips “none”).

Variable Level Background Body Base colors Faces Objects
Background flat 98.8 88.5 18.6 36.7 86.5
  gradient 97.5 84.9 19.3 40.4 86.5
  dark flat 99.5 11.4 48.8 48.2 65.6
  line-drawn room 0.0 93.3 13.6 40.4 81.6
  stripes 72.2 93.0 19.7 41.2 75.1
  bokeh 98.5 60.7 21.8 48.8 81.7
Base colors basic 77.8 72.0 38.2 44.1 79.4
  white clothes + color bands 77.3 70.6 20.0 42.4 79.6
  small color patches 77.8 73.9 31.0 44.4 79.5
  wide shadows 78.1 71.3 5.3 39.5 79.7
Face front 77.3 73.2 24.3 73.3 77.8
  head turned 60° 77.0 72.7 29.5 14.4 77.5
  eyes closed 77.2 71.6 26.1 48.3 77.6
  small face 81.9 65.8 7.3 47.5 87.4
  dark skin 77.3 73.7 23.7 0.0 77.8
  head tilted 35° 76.0 74.6 30.8 72.1 79.0
Object none 79.0 72.0 23.6 41.3 —
  held bag 79.0 71.2 22.6 43.1 99.7
  box on the floor 72.7 72.5 21.0 43.2 37.1
  ball held in front 79.0 72.0 28.5 42.2 100.0
  background-colored bag 79.1 72.0 22.4 43.2 81.3
Pose standing 83.3 76.0 15.0 46.7 87.3
  half-risen 83.3 75.8 4.6 55.7 77.3
  on a chair 81.1 71.8 27.6 61.4 76.4
  slumped on the floor 81.0 71.4 41.7 64.6 74.5
  squatting 82.6 81.4 9.2 81.4 74.0
  kneeling 81.0 83.8 42.5 59.9 74.1
  lying on the stomach 74.3 71.8 21.7 0.0 76.9
  face down on a desk 55.1 59.9 13.5 8.3 70.1
  lying (seen from above) 69.0 67.6 13.1 1.7 88.2
  lying on the side 68.9 70.0 13.1 0.0 89.1
  running 83.3 71.7 45.3 56.5 77.4
  jumping 81.4 61.4 32.8 53.1 87.3
  one knee up 81.0 74.2 22.5 59.0 73.8
  leaning 83.2 70.7 28.3 48.2 87.0

Among the cells where two variables cross, the one that falls furthest below what the two variables alone predict ($\text{row rate} + \text{column rate} - \text{overall rate}$) is, for each target:

Target Crossed cell Good Expected Pictures
Background stripes (background) × lying on the side (pose) 16.7% 63% 20/120
Body gradient (background) × face down on a desk (pose) 30.0% 73% 36/120
Base colors small face × running (pose) 0.0% 29% 0/120
Faces small face × running (pose) 9.2% 61% 11/120
Objects dark flat (background) × background-colored bag (object) 6.0% 67% 20/336

The share of body parts that did not keep more than 90% on the character side is foot 22.4% · head 12.3% · skirt 7.5% · thigh 3.5%, and the share of materials with wrong base colors (under 80% of pixels right) is buttons 100.0% · shoes 52.6% · hair 47.6% · skirt 17.7%.

666 AI-generated pictures (blind grading): Each 0.39 result became one grading sheet (original, character side, base-color layer, found faces, parts, what went to the background); these were shuffled together with the sheets of 168 of the synthetic pictures above (chosen so that every pair of levels of any two variables appears at least twice), numbered, and the 834 sheets were graded in order. The sheets show no file names, sets, or conditions, and the grading rules (A good · B small problem · C large problem · N not found (background and faces only) · - not applicable, plus problem types per target) were fixed before grading and not changed. For objects, things the character holds or wears belong with the character, and loose items and furniture with the background. “No problem” is A or B; intervals are Wilson 95%.

Target No problem 95% CI 80% CI A · B · C · N Test 24 · AI-generated pixiv 300 · AI-generated pixiv 342 (%)
Background 47.6% (313/657) 43.8–51.5 45.2–50.1 117 · 196 · 232 · 112 41.7 · 49.2 · 46.7
Body 75.4% (490/650) 71.9–78.5 73.2–77.5 323 · 167 · 160 · — 87.5 · 77.5 · 72.7
Base colors 10.9% (71/650) 8.8–13.6 9.5–12.6 1 · 70 · 579 · — 4.2 · 9.6 · 12.6
Faces 45.8% (295/644) 42.0–49.7 43.3–48.3 134 · 161 · 55 · 294 91.7 · 46.0 · 42.3
Objects 52.8% (197/373) 47.7–57.8 49.5–56.1 129 · 68 · 176 · — 35.3 · 54.0 · 53.3

The most frequent problem types per target (number of sheets given that type, over B, C, and N):

Target Most frequent types
Background scenery (417), text · signature (200), effects · light (145)
Body hair (161), clothes (147), white · pale areas (72)
Base colors different materials in one color (577), patchwork (467), colors buried in white · gray (171)
Faces missed (423), false (255), side · back · turned (66)
Objects loose items kept with the character (208), held items sent to the background (37), mixed into body parts (1)

Levels with a good rate below 5%: background — line-drawn room 0.0%; base colors — half-risen 4.6%; faces — dark skin 0.0%, lying on the stomach 0.0%, lying (seen from above) 1.7%, lying on the side 0.0%. In the line-drawn room, some of the room’s lines and furniture stay on the character side, so the background found averages 51.8%; in front of the dark flat background the dark-brown hair, navy skirt, and brown shoes join the background, losing the head in 52%, the feet in 88%, and the skirt in 24% of the pictures. Faces with dark skin ($L^* = 43$) were never found, like the skin lightness 57 and 34 that 0.19 already missed, and most turned, lying, or face-down faces are missed too. With wide shadows the shadow-side color becomes the base color of the hair in 82% and of the shoes in 70% of the pictures, and the buttons, painted mostly in shade, take the shade color (the ground truth is the lit color). The back hair is painted in a shade color (darker than the lit side) below the face; in the half-risen and squatting poses the shaded part of the back hair showing above the shoulders is the larger one, so the back hair takes the shade color as its base color (hair base color wrong, without wide shadows: half-risen 84%, squatting 86%, standing 22%).

Split by the condition tags (the detailed conditions above), some of the differences from the rest that are significant (Fisher exact test, Benjamini–Hochberg 5%) are listed per target (no-problem rate, passed/total).

Target Lower than the rest Higher than the rest
Background line-drawn scene background 13.6% (6/44), frames · card borders 9.1% (2/22), thick paint · brush 29.7% (46/155) white · flat background 70.3% (147/209)
Body dark scenes 57.7% (41/71), no lines 61.5% (75/122) line-drawn scene background 97.7% (42/43)
Base colors thick paint · brush 2.0% (3/152), painted scene background 2.4% (3/125), no lines 4.1% (5/122) white · flat background 20.2% (42/208)
Faces eyes closed 19.1% (13/68), profile 18.5% (5/27), strongly tilted 18.8% (6/32) face · upper body only 60.0% (117/195)
Objects line-drawn scene background 13.5% (5/37), sitting 29.5% (26/88) white · flat background 80.2% (73/91)

Checking the blind grades: Comparing the eye grades (no problem / large problem) of the 168 mixed-in synthetic pictures with the ground-truth verdicts (good / otherwise) for the same pictures gives agreement of background 97.6% ($\kappa = 0.93$), body 83.3% ($\kappa = 0.47$), base colors 54.2% ($\kappa = 0.16$), faces 89.3% ($\kappa = 0.79$), objects 93.8% ($\kappa = 0.84$). For the body, 28 of the 45 pictures with a ground-truth problem were judged fine by eye (small losses at the ends of parts graded B), so the eye is lenient; for base colors, the ground truth measures per-pixel color difference per material while the eye looks at whether parts are patchwork or different materials share one color, so the two measure different things (9 of the 40 ground-truth-good pictures were judged a problem by eye, and 68 of the 128 ground-truth problems were judged fine). With the same eye grading, “no problem” goes from the 168 synthetic pictures to the AI-generated pictures as background 80 → 48%, body 90 → 75%, base colors 59 → 11%, faces 52 → 46%, objects 71 → 53%; AI-generated pictures are hardest on base colors and backgrounds. Regrading 67 randomly chosen AI-generated-picture sheets (10%), renumbered and reshuffled, agrees with the first grades at background 100.0% ($\kappa = 1.00$, 66 sheets), body 95.2% ($\kappa = 0.89$, 63 sheets), base colors 95.2% ($\kappa = 0.77$, 63 sheets), faces 92.2% ($\kappa = 0.84$, 64 sheets), objects 85.4% ($\kappa = 0.69$, 41 sheets).

11.14 Resolving power by version

Every version from 0.1 to 0.59e was measured again with the same pictures and the same scoring. Each version’s code was run as is, with that screen’s default settings, on 185 pictures with ground truth (57 synthetic · 8 AI-generated pictures with character outline ground truth · 120 posed synthetic). Pixels with background-layer alpha of 128 or more count as background and the rest as character; transparent pixels (alpha under 128), a 3px band around the ground-truth character boundary, and glow pixels are excluded from scoring. For each picture the balanced error rate

\mathrm{BER}=\frac{(1-\text{character kept})+(1-\text{background found})}2,\qquad \text{resolving power}=\frac1{\overline{\mathrm{BER}}},\qquad \text{× version 0.1}=\frac{\overline{\mathrm{BER}}_{0.1}}{\overline{\mathrm{BER}}_v}

Note — Why: A single error number for background–character separation is needed to compare versions. Pictures with wide and narrow backgrounds are mixed, so both kinds of error weigh the same. How it works: The balanced error rate BER is the mean of the share of character lost and the share of background missed, so answering “all one side” on a picture dominated by one side does not score well (it gives BER = 0.5). Resolving power is the reciprocal of the mean BER, and the multiple of 0.1 the ratio of the two mean BERs. Intervals come from a paired picture-level bootstrap (the same resample of pictures for both versions). References: R54 Guyon et al. 2004 · R80 Efron 1979

is measured ($\mathrm{BER}$ is 0.5 when nothing is split and 0 when perfect), and the reciprocal of the mean $\mathrm{BER}$ over the 185 pictures is the resolving power. The 95% interval is the 2.5 · 97.5 percentiles of a bootstrap resampling the same pictures in pairs (10,000 draws, seed 20261002). Rough generation does not change the background layer (confirmed pixel-identical background maps on 8 versions · 2–3 pictures each; for the new rough of 0.44, all other layers were identical with the rough on and off on 6 pictures), so some versions were run with the rough turned off to save time. The posed synthetic pictures are the most numerous and weigh the most, so the multiplier per group (synthetic · AI-generated · posed) is also given. There are only 8 AI-generated pictures, so their values vary a lot.

Version What changed Character kept % Background found % Mean BER Resolving power × version 0.1 95% CI Synthetic · AI-generated · posed (×)
0.1 First version 96.5 72.8 0.1533 6.52 1 (reference) — 1.00 · 1.00 · 1.00
0.2 Illustrator-style layer structure, running without internet 96.5 72.8 0.1533 6.52 1.00 1.00–1.00 1.00 · 1.00 · 1.00
0.3 Refining with AI-generated pictures, work-file layers 95.2 75.4 0.1473 6.79 1.04 1.01–1.08 1.07 · 1.00 · 1.04
0.4 Scene backgrounds and exact lines 80.8 85.1 0.1704 5.87 0.90 0.77–1.05 1.00 · 1.59 · 0.78
0.5 Correction tools 81.1 85.0 0.1696 5.90 0.90 0.77–1.06 1.01 · 1.67 · 0.78
0.6 Automatic decision for cut-off parts, loop, maximum number of parts 81.1 84.6 0.1714 5.83 0.89 0.76–1.04 1.01 · 1.52 · 0.77
0.7 Automatic separation of backgrounds drawn with lines 79.9 88.0 0.1605 6.23 0.95 0.80–1.15 0.96 · 1.90 · 0.85
0.8 Turning all layers off 79.9 88.0 0.1605 6.23 0.95 0.80–1.15 0.96 · 1.90 · 0.85
0.9 A rough without breaks 79.9 88.0 0.1605 6.23 0.95 0.80–1.15 0.96 · 1.90 · 0.85
0.10 Returning attached character parts, full re-verification 82.1 87.9 0.1498 6.67 1.02 0.85–1.23 0.96 · 1.91 · 0.95
0.11 Line width set by measuring the picture 81.6 88.5 0.1496 6.69 1.02 0.85–1.24 1.00 · 1.91 · 0.93
0.12 Finding faces to widen the background 80.7 88.8 0.1522 6.57 1.01 0.84–1.21 1.02 · 1.98 · 0.89
0.13 Filtering fake faces 80.7 88.9 0.1522 6.57 1.01 0.84–1.21 1.02 · 2.01 · 0.89
0.14 Eye · skin · hair names 80.7 88.9 0.1522 6.57 1.01 0.84–1.21 1.02 · 2.01 · 0.89
0.15 Per-character folders 80.7 88.9 0.1522 6.57 1.01 0.84–1.21 1.02 · 2.01 · 0.89
0.16 Outer glow layer 80.7 88.9 0.1522 6.57 1.01 0.84–1.21 1.02 · 2.02 · 0.89
0.17 Cleaning up base colors of brush paintings 80.7 88.9 0.1522 6.57 1.01 0.84–1.21 1.02 · 2.02 · 0.89
0.18 Re-verifying naming 80.7 88.7 0.1530 6.54 1.00 0.83–1.21 1.00 · 2.02 · 0.89
0.19 Re-verifying background · faces · characters · glow · brush painting cleanup 85.7 89.8 0.1225 8.16 1.25 1.03–1.52 3.05 · 2.02 · 0.90
0.20 Verification with 300 unseen pictures 85.7 89.8 0.1226 8.16 1.25 1.03–1.52 3.05 · 2.02 · 0.90
0.21 White clothes on white backgrounds 86.3 89.7 0.1196 8.36 1.28 1.06–1.55 3.04 · 2.02 · 0.93
0.22 Fewer names · folders from fake faces 86.3 89.7 0.1196 8.36 1.28 1.06–1.55 3.04 · 2.02 · 0.93
0.23 Faster re-splitting after corrections 86.3 89.7 0.1196 8.36 1.28 1.06–1.55 3.04 · 2.02 · 0.93
0.24 Folders of two-person pictures, names for pale skin 86.3 89.7 0.1196 8.36 1.28 1.06–1.55 3.04 · 2.02 · 0.93
0.25 Removing the “skin” color name in pictures without faces 86.3 89.7 0.1196 8.36 1.28 1.06–1.55 3.04 · 2.02 · 0.93
0.26 Verification on 342 new pictures, empty background layer in pictures without background, the relation between faces and background results 86.3 89.7 0.1196 8.36 1.28 1.06–1.55 3.04 · 2.02 · 0.93
0.27 Skipping face-based widening on flat backgrounds, results by detailed condition 87.0 89.6 0.1167 8.57 1.31 1.09–1.59 3.04 · 2.02 · 0.96
0.28 Removing names from separated hair pieces 87.0 89.6 0.1167 8.57 1.31 1.09–1.59 3.04 · 2.02 · 0.96
0.29 The color step threshold of large pictures in proportion to picture size 87.1 89.6 0.1164 8.59 1.32 1.09–1.59 3.04 · 2.02 · 0.96
0.30 Splitting large pictures at a reduced size (setting) 87.1 89.6 0.1164 8.59 1.32 1.09–1.59 3.04 · 2.02 · 0.96
0.31 Not taking places enclosed by lines into the background 87.1 89.1 0.1188 8.42 1.29 1.08–1.55 3.05 · 1.70 · 0.96
0.32 Fewer pictures with no background found 87.1 89.1 0.1188 8.42 1.29 1.08–1.55 3.05 · 1.70 · 0.96
0.33 Verifying the character layer, background seen between character parts (gaps) 87.1 89.2 0.1186 8.43 1.29 1.08–1.55 3.05 · 1.70 · 0.96
0.34 Tackling limitations again: narrow gaps on white backgrounds, mirror-agreed faces, returning black hair 87.8 89.2 0.1150 8.70 1.33 1.11–1.61 3.73 · 1.70 · 0.97
0.35 Layer name “색 트레이스”, a tool to rename layers in old PSDs 87.8 89.2 0.1150 8.70 1.33 1.11–1.61 3.73 · 1.70 · 0.97
0.36 Fixing layer names of old PSDs inside the program 87.8 89.2 0.1150 8.70 1.33 1.11–1.61 3.73 · 1.70 · 0.97
0.37 Tilted pictures, keeping black clothes from leaking into the background 91.0 89.0 0.0999 10.01 1.53 1.29–1.84 3.46 · 1.70 · 1.18
0.38 Returning lineless clothes · legs that went into the scene background 94.6 88.2 0.0862 11.60 1.78 1.50–2.14 3.43 · 1.70 · 1.44
0.39 Base colors: colors buried in white · small colored areas · shadow base colors 94.6 88.2 0.0862 11.60 1.78 1.50–2.14 3.43 · 1.70 · 1.44
0.40 The floor of line-drawn rooms 94.6 91.1 0.0716 13.96 2.14 1.79–2.61 3.43 · 1.70 · 1.90
0.41 Returning hair tips · sleeves cut off by the frame 94.6 91.0 0.0718 13.93 2.14 1.79–2.60 3.43 · 1.69 · 1.90
0.42 Sending fewer black legs · clothes to the background 95.4 91.0 0.0680 14.71 2.25 1.89–2.75 3.43 · 1.68 · 2.07
0.43 Dark character parts · rectangular background objects 99.5 95.3 0.0259 38.58 5.91 4.33–8.63 9.43 · 1.67 · 10.56
0.44 A rough that looks drawn by a person 99.5 95.3 0.0259 38.58 5.91 4.33–8.63 9.43 · 1.67 · 10.56
0.45 Keeping rough details 99.5 95.3 0.0259 38.58 5.91 4.33–8.63 9.43 · 1.67 · 10.56
0.46 Two roughs (concept · refined) 99.5 95.3 0.0259 38.58 5.91 4.33–8.63 9.43 · 1.67 · 10.56
0.47 Roughs that trace 99.5 95.3 0.0259 38.58 5.91 4.33–8.63 9.43 · 1.67 · 10.56
0.48 Head-structure cues for naming faces · per-stage painting folders · 8 background improvement cycles 99.5 95.3 0.0259 38.58 5.91 4.33–8.63 9.43 · 1.67 · 10.56
0.49 Neural-network assist (remaining background removed only when the statistical formula and the network agree) 99.5 95.5 0.0250 40.03 6.14 4.50–8.91 9.43 · 1.80 · 10.56
0.50 Neural-network assist strengthened (statistical score and network score combined in one formula) 99.5 95.7 0.0240 41.75 6.40 4.73–9.25 9.67 · 1.90 · 10.96
0.51 Character decided by the cutout model (anime-character segmentation network reduced to 8 bits, built into the app) 98.1 99.0 0.0146 68.59 10.51 6.80–17.77 7.32 · 4.34 · 24.51
0.52 Character decided by adding the previous method’s decision (neural network + statistics) to the cutout-model probability, with no core steps after it 98.5 98.8 0.0135 73.90 11.33 7.13–20.43 8.13 · 3.96 · 33.16
0.53 Pictures where the cutout model finds almost no character use the previous method’s decision (neural network + statistics) as it is 99.0 98.7 0.0115 87.23 13.37 9.24–22.15 13.13 · 3.96 · 33.16
0.54 Character decided from a weighted average (0.6 · 0.4) of the cutout model and a fine-tuned copy of it run together, with the threshold raised to 0.55 (re-measured with the released app as it is; 0.55 correction in 12) 99.4 98.6 0.0104 96.51 14.80 10.09–24.70 24.77 · 3.88 · 29.04
0.55 Character decided from the average (0.5 · 0.5) of the cutout model and a copy further trained to count effects (glow · particles · light rays) as background, with threshold 0.55 99.5 98.7 0.0088 114.28 17.52 11.87–29.98 55.71 · 4.06 · 33.24
0.56 A ‘Background fill’ layer that estimates the background behind the character with an inpainting network (big-lama) and patch matching, placed directly above the ‘Background’ layer (the background layer is unchanged, so all 185 are byte-identical to 0.55) 99.5 98.7 0.0088 114.28 17.52 11.87–29.98 55.71 · 4.06 · 33.24
0.57 Rough 2 traced with a G-pen (local-contrast lines · pen width · pressure · stabilizer), rough 1 with pencil grain (background layer unchanged, so all 185 are byte-identical to 0.55) 99.5 98.7 0.0088 114.28 17.52 11.87–29.98 55.71 · 4.06 · 33.24
0.58 Rough 2’s thick lines (eye rims · lashes) drawn as one center line with two window sizes (background layer unchanged, so all 185 are byte-identical to 0.55) 99.5 98.7 0.0088 114.28 17.52 11.87–29.98 55.71 · 4.06 · 33.24
0.59e Rough 2 gets a pressure curve · darkness from line importance · overstrokes, and traces eye · mouth boxes (background layer unchanged, so all 185 are byte-identical to 0.55) 99.5 98.7 0.0088 114.28 17.52 11.87–29.98 55.71 · 4.06 · 33.24
0.59h The help is taken out of the app file and the help button opens the help file in the same folder (core · models byte-identical to 0.59e, so all 185 equal 0.55) 99.5 98.7 0.0088 114.28 17.52 11.87–29.98 55.71 · 4.06 · 33.24
0.59i The sample button opens one of 10 pictures bundled in the app at random (core · models byte-identical to 0.59h, so all 185 equal 0.55) 99.5 98.7 0.0088 114.28 17.52 11.87–29.98 55.71 · 4.06 · 33.24
xychart-beta
    title "Resolving power by version (0.1 = 100%)"
    x-axis ["0.1", "0.2", "0.3", "0.4", "0.5", "0.6", "0.7", "0.8", "0.9", "0.10", "0.11", "0.12", "0.13", "0.14", "0.15", "0.16", "0.17", "0.18", "0.19", "0.20", "0.21", "0.22", "0.23", "0.24", "0.25", "0.26", "0.27", "0.28", "0.29", "0.30", "0.31", "0.32", "0.33", "0.34", "0.35", "0.36", "0.37", "0.38", "0.39", "0.40", "0.41", "0.42", "0.43", "0.44", "0.45", "0.46", "0.47", "0.48", "0.49", "0.50", "0.51", "0.52", "0.53", "0.54", "0.55", "0.56", "0.57", "0.58", "0.59e", "0.59h", "0.59i"]
    y-axis "Resolving power (%)" 0 --> 1800
    line [100, 100, 104, 90, 90, 89, 95, 95, 95, 102, 102, 101, 101, 101, 101, 101, 101, 100, 125, 125, 128, 128, 128, 128, 128, 128, 131, 131, 132, 132, 129, 129, 129, 133, 133, 133, 153, 178, 178, 214, 214, 225, 591, 591, 591, 591, 591, 591, 614, 640, 1051, 1133, 1337, 1480, 1752, 1752, 1752, 1752, 1752, 1752, 1752]

From 0.4, finding scene backgrounds let the AI-generated pictures’ backgrounds be found (background found 0 → 46%) but also took characters in the synthetic and posed pictures (character kept 96.8 → 83.7% · 94.1 → 78.7%), so versions 0.4 through 0.18 were close to or below 0.1. 0.19 recovered the synthetic pictures’ characters (82.0 → 97.7%), and in 0.37 · 0.38 the posed pictures’ character kept rose 81.6 → 86.7 → 91.9%, taking the posed group’s multiplier 0.97 → 1.18 → 1.44×. 0.40 finds the floor of line-drawn rooms, so the background found rose on 18 posed pictures (with the character kept unchanged), taking the posed group’s multiplier 1.44 → 1.90×. 0.41 returns hair tips · sleeves cut off by the frame, which raised character kept in the AI-generated picture t29, but that picture, another AI-generated picture and one posed picture keep a little more background, so it is slightly below 0.40 (mean BER 0.0716 → 0.0718, 2.140 → 2.136×). 0.42 makes face-based widening and the scene background take fewer black legs · clothes, which changed 18 posed pictures and raised character kept 92.0 → 93.2%, taking the posed group’s multiplier 1.90 → 2.07×. 6 of the 8 AI-generated pictures keep a little more background (mean background found 41.5 → 41.1%), so the AI-generated group is 1.69 → 1.68×, but overall it is above 0.41 (mean BER 0.0718 → 0.0680, 2.136 → 2.254×). 0.43 returns black hair · skirts · legs on dark backgrounds (character kept on the posed pictures 93.2 → 99.6%) and finds more window panes · shelves · floors of line-drawn rooms (background found: synthetic 92.2 → 97.5%, posed 93.8 → 97.9%), taking the synthetic group 3.43 → 9.43× and the posed group 2.07 → 10.56× (mean BER 0.0680 → 0.0259). 5 of the 8 AI-generated pictures keep a little more background (mean background found 41.1 → 40.9%), so the AI-generated group is 1.68 → 1.67×. 177 of the 185 pictures are synthetic, which is why the overall multiplier jumped; the gain on AI-generated pictures should be read from the 0.43 entry in section 12 (blind component grading on the 777 AI-generated pictures) and the blind test in 11.15. 0.44 to 0.48 changed only the rough · naming faces · painting folders (no candidate of 0.48’s 8 background improvement cycles was adopted), and all 185 background maps are byte-identical to 0.43. 0.49 finds more background with the neural-network assist in 5 of the 8 AI-generated pictures (mean background found 40.9 → 45.3%, character kept 99.2 → 99.1%, lower BER on all 5), taking the AI-generated group 1.67 → 1.80×; the 177 synthetic · posed pictures have background maps byte-identical to 0.48 (mean BER 0.0259 → 0.0250, 5.91 → 6.14×). 0.50 combines the same statistical · network scores in one formula; 26 of the 185 pictures changed (BER improved 19 · worsened 7), background found on the 8 AI-generated pictures went 45.3 → 48.4% (character kept 99.1 → 98.8%), and synthetic · posed pictures also found a little more background (mean BER 0.0250 → 0.0240, 6.14 → 6.40×). 0.51 decides the character with the cutout model; compared with 0.50, 170 of the 185 pictures changed (BER improved 118 · worsened 52). Background found on the 8 AI-generated pictures rose 48.4 → 82.7% and character kept fell 98.8 → 94.2%; the posed group rose 10.96 → 24.51× and the synthetic group fell 9.67 → 7.32× (mean BER 0.0240 → 0.0146). 0.52 adds the previous method’s decision to the model probability; compared with 0.51, 167 of the 185 pictures changed (BER improved 73 · worsened 94). On the 8 AI-generated pictures character kept 94.2 → 96.4% · background found 82.7 → 78.3%; the synthetic group 7.32 → 8.13× · the posed group 24.51 → 33.16× (mean BER 0.0146 → 0.0135). These 185 were not used to choose the 0.52 candidates (chosen on 498 synthetic pictures and the 14 cutouts posted with the pictures, 7.5). 0.53 differs from 0.52 on only 1 of the 185 pictures: on the synthetic picture lineless_scene (lineless character · scene background) the model found almost no character, so the previous method’s decision was used as it is (BER 0.500 → 0.118). The fall of mean BER 0.0135 → 0.0115 and the rise of the synthetic group 8.13 → 13.13× come entirely from this one picture. The other 184 equal 0.52, and the 95% interval largely overlaps 0.52’s (7.13–20.43×). These 185 were not used to make the 0.53 rule. 0.54 averages two models, so 154 of the 185 differ from 0.53 (BER improved 119 · worsened 35; the changed pictures are synthetic 42 · AI-generated 8 · posed synthetic 104). Mean BER 0.0115 → 0.0104, 13.37 → 14.80× version 0.1, higher than 0.53. On the 8 AI-generated pictures, character kept 96.4 → 97.0% · background found 78.3 → 77.3% (3.96 → 3.88×); synthetic group 13.13 → 24.77×, posed synthetic group 33.16 → 29.04×. These values were re-measured for 0.55 with the released app as it is (probabilities weighted 0.6 · 0.4); the values written at the 0.54 release (15.06×, 155 changed) came from a measurement bench that mixed the two probabilities with equal weights (0.5 · 0.5) (0.55 correction in 12). The 185 were not used to train the 0.54 model or to choose its rule. 0.55 swaps the fine-tuned copy for the effect-trained copy and averages the two probabilities with equal weights, so 140 of the 185 differ from 0.54 (BER improved 68 · worsened 72; the changed pictures are synthetic 37 · AI-generated 8 · posed synthetic 95). Mean BER 0.0104 → 0.0088, 14.80 → 17.52× version 0.1, higher than 0.54. On the 8 AI-generated pictures, character kept 97.0 → 96.4% · background found 77.3 → 78.9% (3.88 → 4.06×); synthetic group 24.77 → 55.71×, posed synthetic group 29.04 → 33.24×. The picture that changed most is lineless_scene (BER 0.1175 → 0.0165). The 185 were not used to train the 0.55 model or to choose it. 0.56 leaves the ‘Background’ layer unchanged and adds a ‘Background fill’ layer above it, so the background maps of all 185 are byte-identical to 0.55 (confirmed by re-running the same app code; 17.52× unchanged). 0.57 · 0.58 · 0.59e change only the roughs, so the background maps of all 185 are byte-identical to 0.55 (confirmed by re-running 245 pictures with the 0.59e app code, and 122 of them with the 0.58 app code · 45 with the 0.57 app code too; 17.52× unchanged).

11.15 Blind test (0.1 · 0.59e · 0.59h · 0.59i)

To compare versions on AI-generated pictures without ground truth too, 60 pictures were drawn from the 642 AI-generated pixiv pictures with characters, 30 from each of the consistent set (300) and the mixed set (342) (seed 20261002), and version 0.1 and the latest versions were run on them. For each picture, only the distinct results were collected (versions with identical results share one panel), given random letters, mixed across the versions and placed next to the original without knowing which version made which; each panel was graded (perfect separation · character intact · small pieces lost · major loss · no background found), then the key was opened. “No major loss” is perfect separation · character intact · small pieces lost, “character without loss” is perfect separation · character intact, and the parentheses give picture counts and 95% Wilson intervals.

Version No major loss Character without loss Major loss No background found 300 · 342 (no major loss)
0.1 31.7% (19/60, 21.3–44.2) 26.7% 6.7% 61.7% 10/30 · 9/30
0.59e 86.7% (52/60, 75.8–93.1) 76.7% 8.3% 5.0% 25/30 · 27/30
0.59h 86.7% (52/60, 75.8–93.1) 76.7% 8.3% 5.0% 25/30 · 27/30
0.59i 86.7% (52/60, 75.8–93.1) 76.7% 8.3% 5.0% 25/30 · 27/30

0.56 · 0.57 · 0.58 · 0.59e · 0.59h · 0.59i leave the ‘Background’ layer unchanged, so the background maps of the 60 pictures are byte-identical to 0.55 (confirmed by re-running the 0.56 · 0.59e app code; 0.57 · 0.58 share all code outside the rough function with 0.59e, and 0.59h’s and 0.59i’s cores are byte-identical to 0.59e); they share a panel, and the grades given at 0.55 are reused (as for 0.39 = 0.38; the background fill layer and the roughs are not part of the background map). For 0.55 the earlier grades were not reused: the four versions 0.1 · 0.53 · 0.54 · 0.55 were graded again from scratch, together (0.53: 86.7 → 81.7%). Each version was run with its own app code and default settings (cutout model on); 0.54 was re-run with the released app’s weighted average (0.6 · 0.4) (the blind test at the 0.54 release used a measurement bench that mixed the two probabilities with equal weights; 0.55 correction in 12). Four graders each took 15 pictures and graded without knowing the versions (all panels of a picture were graded by one grader). 0.55 differs from 0.54 on 58 pictures (panel counts: 2 panels 2 · 3 panels 1 · 4 panels 57 pictures). As same-picture pairs, 0.54 → 0.55 gained 1 · lost 0 in “no major loss” ($p = 1.00$), grade up 2 · down 6. 0.53 → 0.55 gained 3 · lost 0 ($p = 0.25$), 0.1 → 0.55 gained 35 · lost 2 ($p = 1.0 \times 10^{-8}$), and 0.53 → 0.54 gained 3 · lost 1 ($p = 0.62$). The rates differ from the grading done together at 0.54 (0.1 26.7% · 0.52 83.3% · 0.53 86.7% · 0.54 86.7%) because the graders changed and because the 0.54 maps changed. Graders differ slightly in what they count as characters (held objects · animals · figures in the background), so the size of the rates moves with the graders. Read this as the difference between versions graded together by the same standard rather than as the size of the rates.

For panels that lost character (small pieces lost · major loss), graders also picked what looked like the cause (more than one allowed). Counts are per picture.

Version Colored like background Edge Effect Non-human Tilted Occluded Other
0.59e 10 2 2 3 1 0 1
0.59h 10 2 2 3 1 0 1
0.59i 10 2 2 3 1 0 1

“Colored like background” is where character and background have similar colors, “Edge” a part cut off at the picture edge, “Effect” light · aura over the character, “Non-human” a body · wings · tail that is not human-shaped, “Tilted” a lying or tilted pose, and “Occluded” a character hidden by props. The 0.57 · 0.58 · 0.59e rows are the same grading as 0.55 (the 0.54 row is in the 0.55 entry of 12, the 0.56 row in the 0.58 entry). The table at the end of the 0.59i entry in section 12 gives the resolving power as a percentage of version 0.1’s and this “no major loss” rate, each with its 95% and 80% intervals, for the four versions side by side.


11.16 14 cutouts posted with the pictures (0.51)

To get pixel-level ground truth for AI-generated pictures without hand labeling, posts were collected in which the uploader posted the same picture both with and without a background. If the version without background is a transparent PNG, its alpha is the cutout posted with the picture; if it is on a plain color, the pixels that are not that color are. Two checks were automatic: the character pixels of both versions match in color (median ΔE ≤ 3, and ΔE ≤ 8 for at least 85% or 90%), and the background of the version with background is not plain · white. Of 165 multi-page Pixiv posts (tags such as background variant · transparent background · no background; all-ages; hold-out · fixed pictures excluded), 16 pictures from 12 posts passed; excluding a decorative frame (not a character) and one whose plain-color version was a different picture, so that its truth was wrong, 14 were measured. Scoring is the same as for the 185 (3 px around ground-truth boundaries and pixels of unknown class, where both versions have the same color, excluded).

Version Character kept % Background found % Mean BER
0.50 99.1 59.7 0.2060
0.51 88.3 94.7 0.0851
0.52 90.4 94.0 0.0778
0.53 97.6 92.5 0.0497
0.54 99.2 91.7 0.0456
0.55 98.5 92.7 0.0440

0.51 lowered BER on 12 of the 14 and raised it on 1. The one where it rose is a character that is not human-shaped (a Bulbasaur fan art); the character was not found at all. One picture has transparent pixels, so the cutout model was not used and the result equals 0.50. On the picture whose artist put aura flames on the character, the aura went to the background and character kept was 74%, but BER still fell because more background was found. Compared with 0.51, 0.52 lowered BER on 10 of the 14 and raised it on 2 (mean 0.0851 → 0.0778). These 14 were used to choose the 0.52 candidates, so the 0.52 value is not an out-of-sample estimate. Compared with 0.52, 0.53 lowered BER on 1 of the 14 (the Bulbasaur fan art, 0.500 → 0.106) and left the rest unchanged (mean 0.0778 → 0.0497). The 0.53 rule was made after seeing this picture, so this value is not out of sample either. Compared with 0.53, 0.54 lowered BER on 7 of the 14 and raised it on 4 (mean 0.0497 → 0.0456; character kept 97.6 → 99.2%, background found 92.5 → 91.7%; re-measured with the released app as it is — the 0.0471 written at the 0.54 release came from a bench that averaged the two probabilities with equal weights). The mixing weights · threshold of 0.54 were chosen on these 14 (0.54 in 12), so this value is not out of sample either. Compared with 0.54, 0.55 lowered BER on 7 of the 14, raised it on 4 and left 3 unchanged (mean 0.0456 → 0.0440; character kept 99.2 → 98.5%, background found 91.7 → 92.7%). 0.55’s w was also gated and chosen on these 14, so it is not out of sample. These pictures were used only for development · verification and are not in the repository.

11.17 Background fill (0.56)

The background fill layer (3.5) was measured on the 177 synthetic pictures with ground truth and on 120 AI-generated pixiv pictures without. For the 177 synthetic pictures (nm2 57 · posed 120) the same generators re-rendered the background without the character as ground truth (the posed pictures include the chair · desk, so pixels outside the character equal the original), and the MAE (0–255, mean over RGB) between the fill and the ground truth is measured inside the hole H that the fill layer covers (the character’s area plus the band). The hole and the known background come from the ground-truth character map (independent of the app’s background decision), so this measures the filling itself. The candidates are: leaving it white (what 0.55 did) · patches only (no network) · network only (the upsampled big-lama estimate with the seam membrane) · network + patches (the 0.56 default).

Background Pictures White Patches only Network only Network + patches
Flat 6 12.0 0.0 2.0 0.0
Gradient 6 22.7 0.4 2.4 1.1
Dark flat 6 223.0 0.0 0.8 0.0
Stripes 6 29.2 2.0 6.7 0.4
Bokeh 6 167.7 9.2 9.8 9.0
Line-drawn scene 6 66.0 18.3 6.0 2.9
Lineless scene 2 44.0 8.4 3.5 1.5
With glow 5 98.8 12.3 76.7 38.2
Several characters 2 17.5 0.3 1.2 0.2
Face variants 11 12.0 0.0 2.9 0.1
Trace 1 12.0 0.0 2.3 0.0
Posed synthetic 120 91.8 3.7 4.0 1.9
All 177 84.20 3.94 6.08 2.82

For the 5 glow pictures this measurement treats the glow band as unknown (the app uses the base color under the glow as known), so the hole the network sees grows to character + glow band and its estimate goes far off: network only 76.7, network + patches 38.2, worse than patches only (12.3). When the network’s estimate is wrong in a large hole the blend uses it; the gains on scenes, stripes and the posed pictures carry the mean. Seam: the MAE in the band within 8 px of the hole boundary is network + patches 1.96 · network only 3.99 · patches only 2.91 (white 85.6), and the “seam-step excess”, the mean |fill − original| over boundary pairs (a hole pixel and the known pixel next to it) minus the same value in the ground truth (0.53), is 0.41 · 0.90 · 1.20. The membrane cuts the step excess a lot when only the network is used (12 development pictures: 0.85 → 0.26) and changes almost nothing for network + patches, whose patch votes already match the boundary. Time (node, working at a long side of ≤ 1024; the 120 pictures were run with four benches in parallel, so these are above an idle machine): on the 120 AI-generated pixiv pictures the medians are network 31.3 s (maximum 109.9 s) plus texture · seam 8.2 s (maximum 22.6 s), patches only 3.7 s; on an idle machine the 4 same-condition pictures took 22–24 s for the network plus 3–14 s for texture and seam. The fill step alone in the browser (worker) took 23.4 s at 800×800 · 28.5 s at 1600×2000 · 24.6 s at 2048×2048, and preparing the model the first time 2 s (the published file is the source as it is; from 0.56 it is not obfuscated).

Naturalness grading (120 AI-generated pixiv pictures): on AI-generated pictures without ground truth, the three candidates were produced with the 0.56 app code as it is (the fixed 60 plus 60 newly sampled from the approved lists with seed 20261019); for each picture the original and the three results (random letters) were put on one sheet, and eight graders, 15 pictures each, scored “does it look natural, like a background that never had the character?” from 0 to 100 without knowing the methods (told to look at the seam, at broken structure, and at anything invented).

Method Mean Bootstrap 95% SD Median ≥ 70 ≤ 40
network + patches (0.56) 59.2 56.1–62.3 17.5 58 27% 15%
network only 60.2 57.4–63.1 15.8 60 29% 12%
patches only 44.7 40.3–49.3 25.3 36 23% 55%

Same-picture pairs: network + patches − patches only +14.5 (95% +10.2 to +18.7, wins 82 : 31, ties 7, sign test p = 1.7e-06); network + patches − network only -1.0 (-3.3 to +1.2, 39 : 52, p = 0.21); network only − patches only +15.5 (+10.3 to +20.4, 81 : 34, p = 1.4e-05). Means per grader (network + patches · network only · patches only): grader 1 62.3 · 61.8 · 46.2 · grader 2 50.6 · 51.0 · 47.3 · grader 3 65.6 · 67.3 · 35.9 · grader 4 64.2 · 62.7 · 44.3 · grader 5 60.3 · 63.8 · 42.3 · grader 6 51.5 · 55.6 · 37.5 · grader 7 65.3 · 62.5 · 55.1 · grader 8 53.7 · 57.0 · 49.1. Both network candidates are clearly above patches only (for all eight graders), and network + patches is indistinguishable from network only. The sheets show four pictures reduced to a long side of 480 px, so the full-resolution texture that the patch stage adds is barely visible; structure, seams and blotches are. The default is network + patches because of its much lower error on the synthetic ground truth (hole MAE 2.82 vs 6.08). A mean of 59.2 lies in the “silhouette, blur or seam visible but not very distracting” range (50–69), the limit of filling a large hole (the character covers about half the picture) from a 512-px estimate (10.2).

11.18 Rough 2 traced with a G-pen (0.57 · 0.58)

0.57 · 0.58, which turned rough 2 into G-pen tracing, were measured two ways: against the 18 artist-style reference crops (0.45 in 12), and in a blind comparison with 0.56 on 240 unseen AI-generated pixiv pictures.

18 artist-style reference crops: on face · hand · accessory crops of 18 AI-generated pictures, a grader playing an illustrator drew reference roughs (stroke coordinates), which are matched against the program’s rough 2. Reference strokes are expanded into points 1px apart; a point within 3px of program ink (alpha > 0.25) is “caught” (recall, weighted by stroke width), a pixel of the thinned program ink within 3px of a reference stroke is “on target” (precision), and F is their harmonic mean. “Thick-line recall” is the recall of reference strokes drawn at width 3 (outlines · main lines) only, “on-target center-line distance” the mean distance of on-target center lines from the reference strokes (smaller = more exact placement), and “breaks” the number of uncaught runs (3px or more) per 100px of reference.

Version F Recall Precision Thick-line recall On-target center-line distance (px) Breaks (per 100px)
0.56 0.728 0.825 0.675 0.820 1.07 0.92
0.57 0.742 0.845 0.684 0.847 1.01 0.81
0.58 0.739 0.848 0.677 0.853 1.05 0.81

In same-crop pairs (improved : worsened, sign test), 0.56 → 0.57 is F 12 : 6, $p = 0.24$, recall 14 : 4, $p = 0.03$, precision 11 : 7, $p = 0.48$, center-line distance 14 : 4, $p = 0.03$. 0.57 → 0.58 is F 8 : 10, $p = 0.81$, thick-line recall 11 : 7, $p = 0.48$, center-line distance 0 : 18, $p = 7.6 \times 10^{-6}$: the two window sizes draw thick lines as one center line so eyes read, but that center line sits a little off the reference strokes (where the artist drew). These 18 crops were used to choose 0.57 · 0.58’s values, so they are not an outside estimate.

Blind test on 240 pictures (0.56 vs 0.58): 97 AI-generated pictures not used in development (hold-out), and 143 AI-generated pixiv pictures drawn evenly over four long-side bins (700 · 1100 · 1500 px boundaries; seed 20261020) from the 777-picture validation set minus development · reference-crop · hold-out pictures. For each picture, 0.56’s and 0.58’s rough 2 were drawn through the same app code path (the state just before the roughs was saved and only the roughs re-drawn), and one sheet showed the original · A · B in full plus the same crop around the largest face (or the character center if none), enlarged (roughs at the app’s 45% opacity on white). A · B were randomized per picture (seed 58). The graders were not people but 12 AI graders (separate fresh sessions of the same language model that did not know this development conversation); each took 20 pictures, so every picture was judged once by one grader (no inter-grader agreement was measured). They answered “which looks more like a rough drawn by a person (illustrator)?” (A · B · same), and for each version tagged strange points (tangle · face collapse · broken lines · jitter · mechanical · missing form · spurious lines · darkness) and how much meaning was lost (none · some · big: a main part cannot be recognized). The tally was written down before grading; caching the pictures took long, so grading was done in two rounds (the first 120 ready pictures · the other 120), which is why the first six graders saw mostly hold-out pictures.

  0.56 0.58 Same-picture pairs (0.56 only : 0.58 only) 𝑝
More like a rough drawn by a person 153 65 tie 22 $p = 2.3 \times 10^{-9}$ (sign test)
Meaning badly lost 92 (38.3%, 32.4–44.6) 84 (35.0%, 29.2–41.2) 20 : 12 $p = 0.22$
Some meaning lost (some · big) 212 (88.3%, 83.7–91.8) 190 (79.2%, 73.6–83.8) 27 : 5 $p = 1.1 \times 10^{-4}$
“tangle” 110 (45.8%) 131 (54.6%) 30 : 51 $p = 0.03$
“face collapse” 88 (36.7%) 66 (27.5%) 36 : 14 $p = 2.6 \times 10^{-3}$
“broken lines” 72 (30.0%) 63 (26.2%) 35 : 26 $p = 0.31$
“jitter” 15 (6.2%) 80 (33.3%) 8 : 73 $p = 3.0 \times 10^{-14}$
“mechanical” 10 (4.2%) 117 (48.8%) 2 : 109 $p = 4.8 \times 10^{-30}$
“missing form” 124 (51.7%) 95 (39.6%) 38 : 9 $p = 2.5 \times 10^{-5}$
“spurious lines” 28 (11.7%) 14 (5.8%) 19 : 5 $p = 6.6 \times 10^{-3}$
“darkness” 67 (27.9%) 22 (9.2%) 63 : 18 $p = 5.2 \times 10^{-7}$
Nothing strange 12 (5.0%) 11 (4.6%) 10 : 9 $p = 1.00$

Excluding ties, 0.58’s win rate on “more like a person’s rough” is 29.8% (Wilson 95% 24.1–36.2%). Intervals next to rates are Wilson 95% intervals; pair 𝑝 values are from the exact McNemar test (a binomial test on discordant pictures only).

Group Pictures Person-like 0.58 : 0.56 : tie 𝑝 Badly lost 0.56 → 0.58
Hold-out 97 97 29 : 60 : 8 $p = 1.3 \times 10^{-3}$ 32 → 30
New 143 143 36 : 93 : 14 $p = 5.4 \times 10^{-7}$ 60 → 54
Long side < 700 px 51 16 : 26 : 9 $p = 0.16$ 38 → 33
Long side 700–1100 px 40 16 : 20 : 4 $p = 0.62$ 15 → 11
Long side 1100–1500 px 99 22 : 71 : 6 $p = 3.5 \times 10^{-7}$ 27 → 30
Long side ≥ 1500 px 50 11 : 36 : 3 $p = 3.5 \times 10^{-4}$ 12 → 10

Per grader, 0.58 : 0.56 is 01 4 : 14 · 02 5 : 15 · 03 11 : 9 · 04 4 : 10 · 05 4 : 13 · 06 8 : 10 · 07 1 : 18 · 08 5 : 12 · 09 9 : 11 · 10 2 : 15 · 11 7 : 13 · 12 5 : 13. Regardless of version, A was picked 91 times, B 127 times and “same” 22 times (position-bias check). The graders’ notes show the two versions split almost every time. 0.58 traces both edges of shapes · hair strands · chains · lace with even thin lines, leaving short pieces · spurs · ladder shapes, and many notes call it “a trace of the outlines”. 0.56 has long, loose strokes with varying strength, closer to a hand-drawn rough, but often drops whole faces · eyes · hands · props in front, or draws eyes as rings · letter-like scribbles. Graders usually picked the side whose face survived when only one did, and the looser strokes when both did. Pictures where both broke down were strongly textured painterly pictures · dark pictures · complex scenes (crowds · mecha · checks), and both versions also traced watermarks · sound-effect lettering · screen band edges. Regardless of version B was picked a little more often (A 91 : B 127), but 0.56 is ahead in either position: 0.58 : 0.56 = 21 : 83 when 0.58 was A and 44 : 70 when it was B. The developer disagrees with the “mechanical” · “person-like” judgments, since tracing a clean-up rough with an even pen, both edges of shapes included, is how illustrators actually work, and the release decision did not rest on them (the graders are AI, not illustrators).

Pen width: over the 239 of the 240 pictures with a character, the measured pen width has median 1.30px (10th · 90th percentile 0.92 · 1.87px); its rank correlation with the picture’s long side is 0.20 and with the character size (square root of the character area) 0.18. Pictures of the same size are drawn with different pens by different artists, so the pen width is measured from the picture’s own lines rather than guessed from picture or character size. Time: on the same 240 pictures the rough 2 step takes a median 2.6 s → 3.6 s, a same-picture ratio of 1.25× (quartiles 1.11–1.64×; run 4 in parallel). It is a small share of the whole app (tens of seconds per picture including the cutout model · background fill).

11.19 Rough 2 pressure · eye · mouth boxes and blind tests by expert-role graders (0.59 · 0.59e)

0.59 adds a pressure curve · darkness from line importance · overstrokes · stronger stabilization to 0.58’s G-pen tracing, and 0.59e adds eye · mouth box tracing on top (2.9). All of them change rough 2 only. Six blind rounds were run. The graders are not people but fresh sessions of the same language model (unaware of this development conversation); each round used new graders and new sheets (A · B positions random per picture). From round 2, at the user’s request, only the 138 pictures with a character as the main subject and clear line art were used, and 5 real artists’ roughs found by a fixed rule on pixiv (tag “ラフ” · 300+ bookmarks · no AI images) were shown to the graders first. From 3-A the graders were given the role of “an expert in the composition of Japanese-style illustration and digital drawing (pen pressure · stabilizer · the rough → line-art process)” (with no instruction to prefer any style). Methods · metrics · decision rules were written down before grading, and rounds with bad results are reported as they are. Only pairs within one round are tests; comparing rates across rounds is for reference only, because the groups of graders differ.

Round Pictures Graders Versions More like a rough drawn by a person (new : base : tie) 𝑝 (sign test) Judged on its own as a rough drawn by a person (base → new, pairs) Badly lost meaning (base → new)
1 240 unseen 12 0.59 vs 0.56 127 : 71 : 42 $p = 8.4 \times 10^{-5}$ 78 → 95 (19 : 36, $p = 0.03$) 96 → 85 ($p = 0.03$)
2 138 with clear character · line art 7, 5 reference roughs 0.59 vs 0.56 89 : 39 : 10 $p = 1.2 \times 10^{-5}$ 43 → 77 (5 : 39, $p = 1.4 \times 10^{-7}$) 48 → 37 ($p = 0.03$)
2 control same 138 7, 5 reference roughs 0.58 vs 0.56 42 : 92 : 4 $p = 1.9 \times 10^{-5}$ 63 → 50 (30 : 17, $p = 0.08$) 42 → 38 ($p = 0.50$)
3-A same 138 15 expert-role 0.59 vs 0.56 73 : 57 : 8 $p = 0.19$ 52 → 76 (25 : 49, $p = 7.1 \times 10^{-3}$) 47 → 29 ($p = 2.8 \times 10^{-4}$)
3-B same 138 (new sheets) 15 expert-role 0.59e vs 0.56 100 : 33 : 5 $p = 5.0 \times 10^{-9}$ 54 → 83 (10 : 39, $p = 3.8 \times 10^{-5}$) 49 → 31 ($p = 4.0 \times 10^{-5}$)
3-C same 138 (new sheets) 15 expert-role 0.59f vs 0.56 51 : 82 : 5 $p = 9.0 \times 10^{-3}$ 74 → 47 (46 : 19, $p = 1.1 \times 10^{-3}$) 36 → 37 ($p = 1.00$)
3-D same 138 (new sheets) 15 expert-role 0.59g vs 0.59e 4 : 3 : 131 $p = 1.00$ 45 → 45 (0 : 0, $p = 1.00$) 55 → 55 ($p = 1.00$)

The pairs are (yes only for base : yes only for new), and 𝑝 is McNemar's exact test. Round 1 was the first to ask whether each rough on its own looks like one drawn by a person.

3-B (0.59e vs 0.56): 0.59e’s win rate excluding ties is 75.2% (Wilson 95% 67.2–81.8%), and 14 of the 15 graders picked 0.59e more often. The “something strange” tags (number of pictures with that tag per version) are:

Tag 0.56 0.59e 𝑝 (pairs)
“tangle” 96 (69.6%) 62 (44.9%) $p = 5.7 \times 10^{-8}$
“face collapse” 55 (39.9%) 35 (25.4%) $p = 3.6 \times 10^{-5}$
“broken lines” 36 (26.1%) 18 (13.0%) $p = 3.9 \times 10^{-3}$
“jitter” 23 (16.7%) 7 (5.1%) $p = 5.2 \times 10^{-3}$
“mechanical” 21 (15.2%) 34 (24.6%) $p = 7.2 \times 10^{-3}$
“missing form” 25 (18.1%) 19 (13.8%) $p = 0.18$
“spurious lines” 14 (10.1%) 18 (13.0%) $p = 0.45$
“darkness” 26 (18.8%) 20 (14.5%) $p = 0.45$

0.59e has less tangle · face collapse · broken lines, and more mechanical (lettering · signatures · repeated patterns copied line by line, thin even outlines) · spurious lines.

0.59f (not used): to reduce the “mechanical” notes of 3-B, strokes in dense areas were made lighter in both width and darkness (multiplied, down to 0.36×) and one in three crossing lines was drawn; it lost to 0.56 in 3-C (51 : 82). “Darkness” 12 → 94, “broken lines” 15 → 57, “missing form” 18 → 45; graders wrote “a faint trace of the line art”. The metrics used for selection (mesh-cell count · clump) improve automatically when lines get lighter and thinner, so they were fooled by lightening.

0.59g (not used): dropping the lightening of 0.59f and only softening its crossing-line thinning (one in two, crossing threshold 6, lines 40× the pen scale or longer kept), it was added to 0.59e. Two gates were set before grading: on 60 pictures, ink at least 95% of 0.59e’s (median 0.993×) and the share of 0.59e’s ink outside faces kept, at least 95% of what a redraw of 0.59e with only the seed changed keeps (median 0.996×); it passed both, and the median mesh-cell count went 4.91 → 4.58. But in 3-D (0.59g vs 0.59e) 131 of 138 were ties (4 : 3, $p = 1.00$), and several graders compared the two panels pixel by pixel and wrote that they were “practically the same picture”. By the rule fixed beforehand (release only if it wins the sign test excluding ties with 𝑝 < 0.05 and person-like · badly-lost do not get worse), 0.59e was released.

On absolute levels: the same 0.56 roughs were judged on their own as drawn by a person on 54 pictures (39.1%) in 3-B and 74 (53.6%) in 3-C. Pairs are compared within one sheet, so a weak opponent makes the base look better too. In 3-D 0.59e got 45 (32.6%) and badly lost 55 (39.9%), but that round compared two nearly identical panels, so it is not read as a difference from 0.56.

Time: on the 138 pictures the rough 2 step takes a median 2.7 s (0.56) → 4.0 s (0.59e), a same-picture ratio of 1.31× (quartiles 1.14–1.70×; measured at different times, 3 in parallel). It is a small share of the whole app (tens of seconds per picture).

11.20 Rough skill by version

At the user’s request, how much the rough improved from version to version is measured like the resolving power (11.14), with version 0.1 as 100%. A rough has no ground truth, so wrong pixels cannot be counted; instead graders compare versions blind on “which looks more like a rough an illustrator drew by hand”. The method was fixed in CLAUDE.md as “do not change” before grading.

Every pair within a sheet becomes a win · tie · loss (2760 pairs), and a strength per version is fitted with the Davidson model (the Bradley–Terry model with ties).

P(i \succ j)=\frac{\pi_i}{\pi_i+\pi_j+\nu\sqrt{\pi_i\pi_j}},\qquad P(i = j)=\frac{\nu\sqrt{\pi_i\pi_j}}{\pi_i+\pi_j+\nu\sqrt{\pi_i\pi_j}},\qquad \pi_v=e^{\beta_v},\ \beta_{0.1}=0,\qquad \text{rough skill}_v = 100\cdot\frac{\pi_v}{\pi_{0.1}}\ \%

Note — Why: there are too many versions to put all on one sheet, so each sheet holds a few and one model ties all the grades together, measuring every version on the same scale. How it works: each version gets a strength 𝜋, and the probability that 𝑖 is picked over 𝑗 as more like a human rough is its share of the strengths. A tie is proportional to the geometric mean of the two strengths (larger 𝜈, more ties), and 𝛽 = ln 𝜋 is fitted by maximum likelihood. The strength ratio 𝜋_v / 𝜋_0.1 is the odds that the version beats 0.1 (ties left out), hence a multiple with 0.1 = 100%. A very weak ridge penalty ($0.005\sum\beta^2$) only keeps a version that always wins from going to infinity. Intervals are the 2.5 · 97.5 (95%) and 10 · 90 (80%) percentiles of a bootstrap over pictures (2,000 draws, seed 20261020). References: R96 Bradley · Terry 1952 · R97 Davidson 1970 · R80 Efron 1979

xychart-beta
    title "Rough skill (version 0.1 = 100%)"
    x-axis ["0.1", "0.8", "0.9", "0.43", "0.44", "0.45", "0.46", "0.47", "0.56", "0.57", "0.58", "0.59e"]
    y-axis "% of version 0.1" 0 --> 400
    bar [100, 153, 98, 72, 81, 204, 110, 239, 367, 174, 157, 247]
Version Rough skill (vs 0.1) 95% CI 80% CI Against 0.1 (win : tie : loss) Looks drawn by a person on its own Meaning largely lost
0.1 100% — — — 30% (91/300, 25–36) 19% (57/300)
0.8 153% 114–215% 127–190% 16 : 38 : 6 38% (23/60, 27–51) 13% (8/60)
0.9 98% 63–154% 72–131% 24 : 0 : 36 30% (18/60, 20–43) 22% (13/60)
0.43 72% 46–110% 53–96% 51 : 2 : 67 25% (30/120, 18–33) 22% (26/120)
0.44 81% 48–136% 58–114% 30 : 0 : 30 18% (11/60, 11–30) 27% (16/60)
0.45 204% 128–329% 150–282% 74 : 1 : 45 41% (49/120, 32–50) 20% (24/120)
0.46 110% 65–188% 78–156% 40 : 0 : 20 25% (15/60, 16–37) 32% (19/60)
0.47 239% 143–423% 172–346% 82 : 2 : 36 44% (53/120, 36–53) 25% (30/120)
0.56 367% 200–701% 247–574% 42 : 0 : 18 55% (33/60, 42–67) 23% (14/60)
0.57 174% 111–285% 129–242% 80 : 0 : 40 29% (35/120, 22–38) 21% (25/120)
0.58 157% 97–265% 113–222% 40 : 0 : 20 28% (17/60, 19–41) 25% (15/60)
0.59e 247% 156–419% 184–351% 202 : 0 : 98 52% (157/300, 47–58) 20% (61/300)

The tie weight is 𝜈 = 0.18. “Looks drawn by a person” is counted over the sheets the panel was on (Wilson 95% interval), so the number of sheets differs (0.1 · 0.59e on every sheet, panels in two windows on 120, the rest on 60).

Version Rough-code generation Rough skill (vs 0.1) 95% CI 80% CI Note
0.1 0.1–0.8 100% — — graded
0.2 0.1–0.8 — — — not graded — same rough code (generation 0.1–0.8: 0.1 100% · 0.8 153%); same rough as the previous version on 1/60 pictures
0.3 0.1–0.8 — — — not graded — same rough code (generation 0.1–0.8: 0.1 100% · 0.8 153%); same rough as the previous version on 0/60 pictures
0.4 0.1–0.8 — — — not graded — same rough code (generation 0.1–0.8: 0.1 100% · 0.8 153%); same rough as the previous version on 0/60 pictures
0.5 0.1–0.8 — — — not graded — same rough code (generation 0.1–0.8: 0.1 100% · 0.8 153%); same rough as the previous version on 35/60 pictures
0.6 0.1–0.8 — — — not graded — same rough code (generation 0.1–0.8: 0.1 100% · 0.8 153%); same rough as the previous version on 49/60 pictures
0.7 0.1–0.8 153% 114–215% 127–190% = 0.8 (all 60 roughs byte-identical)
0.8 0.1–0.8 153% 114–215% 127–190% graded
0.9 0.9–0.43 98% 63–154% 72–131% graded
0.10 0.9–0.43 — — — not graded — same rough code (generation 0.9–0.43: 0.9 98% · 0.43 72%); same rough as the previous version on 34/60 pictures
0.11 0.9–0.43 — — — not graded — same rough code (generation 0.9–0.43: 0.9 98% · 0.43 72%); same rough as the previous version on 52/60 pictures
0.12 0.9–0.43 — — — not graded — same rough code (generation 0.9–0.43: 0.9 98% · 0.43 72%); same rough as the previous version on 26/60 pictures
0.13 0.9–0.43 — — — not graded — same rough code (generation 0.9–0.43: 0.9 98% · 0.43 72%); same rough as the previous version on 48/60 pictures
0.14 0.9–0.43 — — — not graded — same rough code (generation 0.9–0.43: 0.9 98% · 0.43 72%); same rough as the previous version on 60/60 pictures
0.15 0.9–0.43 — — — not graded — same rough code (generation 0.9–0.43: 0.9 98% · 0.43 72%); same rough as the previous version on 60/60 pictures
0.16 0.9–0.43 — — — not graded — same rough code (generation 0.9–0.43: 0.9 98% · 0.43 72%); same rough as the previous version on 60/60 pictures
0.17 0.9–0.43 — — — not graded — same rough code (generation 0.9–0.43: 0.9 98% · 0.43 72%); same rough as the previous version on 12/60 pictures
0.18 0.9–0.43 — — — not graded — same rough code (generation 0.9–0.43: 0.9 98% · 0.43 72%); same rough as the previous version on 55/60 pictures
0.19 0.9–0.43 — — — not graded — same rough code (generation 0.9–0.43: 0.9 98% · 0.43 72%); same rough as the previous version on 55/60 pictures
0.20 0.9–0.43 — — — not graded — same rough code (generation 0.9–0.43: 0.9 98% · 0.43 72%); same rough as the previous version on 58/60 pictures
0.21 0.9–0.43 — — — not graded — same rough code (generation 0.9–0.43: 0.9 98% · 0.43 72%); same rough as the previous version on 3/60 pictures
0.22 0.9–0.43 — — — not graded — same rough code (generation 0.9–0.43: 0.9 98% · 0.43 72%); same rough as the previous version on 60/60 pictures
0.23 0.9–0.43 — — — not graded — same rough code (generation 0.9–0.43: 0.9 98% · 0.43 72%); same rough as the previous version on 60/60 pictures
0.24 0.9–0.43 — — — not graded — same rough code (generation 0.9–0.43: 0.9 98% · 0.43 72%); same rough as the previous version on 60/60 pictures
0.25 0.9–0.43 — — — not graded — same rough code (generation 0.9–0.43: 0.9 98% · 0.43 72%); same rough as the previous version on 60/60 pictures
0.26 0.9–0.43 — — — not graded — same rough code (generation 0.9–0.43: 0.9 98% · 0.43 72%); same rough as the previous version on 60/60 pictures
0.27 0.9–0.43 — — — not graded — same rough code (generation 0.9–0.43: 0.9 98% · 0.43 72%); same rough as the previous version on 46/60 pictures
0.28 0.9–0.43 — — — not graded — same rough code (generation 0.9–0.43: 0.9 98% · 0.43 72%); same rough as the previous version on 60/60 pictures
0.29 0.9–0.43 — — — not graded — same rough code (generation 0.9–0.43: 0.9 98% · 0.43 72%); same rough as the previous version on 50/60 pictures
0.30 0.9–0.43 — — — not graded — same rough code (generation 0.9–0.43: 0.9 98% · 0.43 72%); same rough as the previous version on 60/60 pictures
0.31 0.9–0.43 — — — not graded — same rough code (generation 0.9–0.43: 0.9 98% · 0.43 72%); same rough as the previous version on 3/60 pictures
0.32 0.9–0.43 — — — not graded — same rough code (generation 0.9–0.43: 0.9 98% · 0.43 72%); same rough as the previous version on 59/60 pictures
0.33 0.9–0.43 — — — not graded — same rough code (generation 0.9–0.43: 0.9 98% · 0.43 72%); same rough as the previous version on 45/60 pictures
0.34 0.9–0.43 — — — not graded — same rough code (generation 0.9–0.43: 0.9 98% · 0.43 72%); same rough as the previous version on 42/60 pictures
0.35 0.9–0.43 — — — not graded — same rough code (generation 0.9–0.43: 0.9 98% · 0.43 72%); same rough as the previous version on 60/60 pictures
0.36 0.9–0.43 — — — not graded — same rough code (generation 0.9–0.43: 0.9 98% · 0.43 72%); same rough as the previous version on 60/60 pictures
0.37 0.9–0.43 — — — not graded — same rough code (generation 0.9–0.43: 0.9 98% · 0.43 72%); same rough as the previous version on 39/60 pictures
0.38 0.9–0.43 — — — not graded — same rough code (generation 0.9–0.43: 0.9 98% · 0.43 72%); same rough as the previous version on 35/60 pictures
0.39 0.9–0.43 — — — not graded — same rough code (generation 0.9–0.43: 0.9 98% · 0.43 72%); same rough as the previous version on 60/60 pictures
0.40 0.9–0.43 — — — not graded — same rough code (generation 0.9–0.43: 0.9 98% · 0.43 72%); same rough as the previous version on 60/60 pictures
0.41 0.9–0.43 — — — not graded — same rough code (generation 0.9–0.43: 0.9 98% · 0.43 72%); same rough as the previous version on 49/60 pictures
0.42 0.9–0.43 — — — not graded — same rough code (generation 0.9–0.43: 0.9 98% · 0.43 72%); same rough as the previous version on 25/60 pictures
0.43 0.9–0.43 72% 46–110% 53–96% graded
0.44 0.44 81% 48–136% 58–114% graded
0.45 0.45 204% 128–329% 150–282% graded
0.46 0.46 110% 65–188% 78–156% graded
0.47 0.47–0.56 239% 143–423% 172–346% graded
0.48 0.47–0.56 — — — not graded — same rough code (generation 0.47–0.56: 0.47 239% · 0.56 367%); same rough as the previous version on 31/60 pictures
0.49 0.47–0.56 — — — not graded — same rough code (generation 0.47–0.56: 0.47 239% · 0.56 367%); same rough as the previous version on 44/60 pictures
0.50 0.47–0.56 — — — not graded — same rough code (generation 0.47–0.56: 0.47 239% · 0.56 367%); same rough as the previous version on 23/60 pictures
0.51 0.47–0.56 — — — not graded — same rough code (generation 0.47–0.56: 0.47 239% · 0.56 367%); same rough as the previous version on 0/60 pictures
0.52 0.47–0.56 — — — not graded — same rough code (generation 0.47–0.56: 0.47 239% · 0.56 367%); same rough as the previous version on 3/60 pictures
0.53 0.47–0.56 — — — not graded — same rough code (generation 0.47–0.56: 0.47 239% · 0.56 367%); same rough as the previous version on 56/60 pictures
0.54 0.47–0.56 — — — not graded — same rough code (generation 0.47–0.56: 0.47 239% · 0.56 367%); same rough as the previous version on 2/60 pictures
0.55 0.47–0.56 367% 200–701% 247–574% = 0.56 (all 60 roughs byte-identical)
0.56 0.47–0.56 367% 200–701% 247–574% graded
0.57 0.57 174% 111–285% 129–242% graded
0.58 0.58 157% 97–265% 113–222% graded
0.59e 0.59e 247% 156–419% 184–351% graded
0.59h 0.59e 247% 156–419% 184–351% = 0.59e (core · models byte-identical, so the roughs are too)
0.59i 0.59e 247% 156–419% 184–351% = 0.59h (core · models byte-identical, so the roughs are too)

12. Release history

Newest versions are at the top.

Note — Why: The formulas behind each version’s resolving-power multiple, intervals and 𝑝 values are not repeated per version. How it works: The resolving-power multiple and its interval use the BER formula of 11.14 and a paired bootstrap (10,000 draws), blind-test intervals are Wilson intervals, and 𝑝 for paired gradings is McNemar’s exact test or the sign test (11.1). References: R56 Wilson 1927 · R72 McNemar 1947 · R85 Dixon · Mood 1946 · R80 Efron 1979

0.59i;0_1[20] (2026-10-20) Sample image: one of 10 bundled pictures at random

  Version 0.1 Version 0.59e Version 0.59h Version 0.59i
Resolving power 100% 1752% 1752% 1752%
Resolving power 95% CI — 1187–2998% 1187–2998% 1187–2998%
Resolving power 80% CI — 1352–2434% 1352–2434% 1352–2434%
Blind test (no major loss) 31.7% 86.7% 86.7% 86.7%
Blind test 95% CI 21.3–44.2% 75.8–93.1% 75.8–93.1% 75.8–93.1%
Blind test 80% CI 24.5–39.8% 80.1–91.3% 80.1–91.3% 80.1–91.3%
Rough skill 100% 247% 247% 247%
Rough skill 95% CI — 156–419% 156–419% 156–419%
Rough skill 80% CI — 184–351% 184–351% 184–351%

Resolving power · blind test · rough skill are computed as in the 0.59h entry’s table. 0.59i has the same core as 0.59h, so all three equal 0.59h’s.

0.59h;0_1[20] (2026-10-20) Help moved out of the app file, rough skill by version

  Version 0.1 Version 0.58 Version 0.59e Version 0.59h
Resolving power 100% 1752% 1752% 1752%
Resolving power 95% CI — 1187–2998% 1187–2998% 1187–2998%
Resolving power 80% CI — 1352–2434% 1352–2434% 1352–2434%
Blind test (no major loss) 31.7% 86.7% 86.7% 86.7%
Blind test 95% CI 21.3–44.2% 75.8–93.1% 75.8–93.1% 75.8–93.1%
Blind test 80% CI 24.5–39.8% 80.1–91.3% 80.1–91.3% 80.1–91.3%
Rough skill 100% 157% 247% 247%
Rough skill 95% CI — 97–265% 156–419% 156–419%
Rough skill 80% CI — 113–222% 184–351% 184–351%

Resolving power · blind test are computed as in the 0.59e entry’s table. Rough skill is the strength ratio with 0.1 = 100% and its intervals are percentiles of a bootstrap over pictures (2,000 draws) (11.20). 0.59h has the same core as 0.59e, so all three equal 0.59e’s.

0.59e;4_5[20] (2026-10-20) Rough 2 gets a pressure curve · darkness from line importance · overstrokes and traces eye · mouth boxes; blind tests by expert-role graders

  Version 0.1 Version 0.57 Version 0.58 Version 0.59e
Resolving power 100% 1752% 1752% 1752%
Resolving power 95% CI — 1187–2998% 1187–2998% 1187–2998%
Resolving power 80% CI — 1352–2434% 1352–2434% 1352–2434%
Blind test (no major loss) 31.7% 86.7% 86.7% 86.7%
Blind test 95% CI 21.3–44.2% 75.8–93.1% 75.8–93.1% 75.8–93.1%
Blind test 80% CI 24.5–39.8% 80.1–91.3% 80.1–91.3% 80.1–91.3%

Resolving power is given with version 0.1 as 100%; its intervals come from a paired bootstrap over pictures (10,000 resamples, seed 20261002), the 95% interval being the 2.5 · 97.5 percentiles and the 80% interval the 10 · 90 percentiles (0.1 is the reference, so it has no interval). The blind test is the share of pictures graded “no major loss” when the versions’ results on 60 AI-generated pixiv pictures were mixed and graded without knowing the version, with Wilson intervals (z = 1.96 · 1.2816). 0.57 · 0.58 · 0.59e have a background layer byte-identical to 0.55 and keep 0.55’s values (the grading done at 0.55 for the four versions 0.1 · 0.53 · 0.54 · 0.55 together).

0.58 (2026-10-20) Rough 2’s thick lines (eye rims · lashes) drawn as one center line with two window sizes; blind test on 240 unseen pictures

  Version 0.1 Version 0.56 Version 0.57 Version 0.58
Resolving power 100% 1752% 1752% 1752%
Resolving power 95% CI — 1187–2998% 1187–2998% 1187–2998%
Resolving power 80% CI — 1352–2434% 1352–2434% 1352–2434%
Blind test (no major loss) 31.7% 86.7% 86.7% 86.7%
Blind test 95% CI 21.3–44.2% 75.8–93.1% 75.8–93.1% 75.8–93.1%
Blind test 80% CI 24.5–39.8% 80.1–91.3% 80.1–91.3% 80.1–91.3%

Resolving power is given with version 0.1 as 100%; its intervals come from a paired bootstrap over pictures (10,000 resamples, seed 20261002), the 95% interval being the 2.5 · 97.5 percentiles and the 80% interval the 10 · 90 percentiles (0.1 is the reference, so it has no interval). The blind test is the share of pictures graded “no major loss” when the versions’ results on 60 AI-generated pixiv pictures were shuffled and graded without knowing the version; its intervals are Wilson intervals (z = 1.96 · 1.2816). 0.56 · 0.57 · 0.58 have background layers byte-identical to 0.55, so they keep 0.55’s values (the grading of the four versions 0.1 · 0.53 · 0.54 · 0.55 done together at 0.55).

0.57 (2026-10-20) Rough 2 traced over the line art with a G-pen (local-contrast lines · pen width · pressure · stabilizer); rough 1 with pencil grain

  Version 0.1 Version 0.55 Version 0.56 Version 0.57
Resolving power 100% 1752% 1752% 1752%
Resolving power 95% CI — 1187–2998% 1187–2998% 1187–2998%
Resolving power 80% CI — 1352–2434% 1352–2434% 1352–2434%
Blind test (no major loss) 31.7% 86.7% 86.7% 86.7%
Blind test 95% CI 21.3–44.2% 75.8–93.1% 75.8–93.1% 75.8–93.1%
Blind test 80% CI 24.5–39.8% 80.1–91.3% 80.1–91.3% 80.1–91.3%

Resolving power is given with version 0.1 as 100%; its intervals come from a paired bootstrap over pictures (10,000 resamples, seed 20261002), the 95% interval being the 2.5 · 97.5 percentiles and the 80% interval the 10 · 90 percentiles (0.1 is the reference, so it has no interval). The blind test is the share of pictures graded “no major loss” when the versions’ results on 60 AI-generated pixiv pictures were shuffled and graded without knowing the version; its intervals are Wilson intervals (z = 1.96 · 1.2816). 0.56 · 0.57 have background layers byte-identical to 0.55, so they keep 0.55’s values (the grading of the four versions done together at 0.55).

0.56 (2026-10-20) A ‘Background fill’ layer that estimates the background behind the character with an inpainting network (big-lama) and patch matching, placed directly above the ‘Background’ layer (the background layer itself unchanged)

  Version 0.1 Version 0.54 Version 0.55 Version 0.56
Resolving power 100% 1480% 1752% 1752%
Resolving power 95% CI — 1009–2470% 1187–2998% 1187–2998%
Resolving power 80% CI — 1146–2045% 1352–2434% 1352–2434%
Blind test (no major loss) 31.7% 85.0% 86.7% 86.7%
Blind test 95% CI 21.3–44.2% 73.9–91.9% 75.8–93.1% 75.8–93.1%
Blind test 80% CI 24.5–39.8% 78.2–90.0% 80.1–91.3% 80.1–91.3%

Resolving power is relative to version 0.1 (= 100%); its intervals come from a bootstrap resampling the same pictures in pairs (10,000 draws, seed 20261002), the 95% interval being the 2.5 · 97.5 percentiles and the 80% interval the 10 · 90 percentiles (version 0.1 is the reference, so it has no interval). The blind test is the share of pictures graded “no major loss” when the versions’ results on 60 AI-generated pixiv pictures were mixed and graded without knowing the version; the intervals are Wilson intervals (z = 1.96 · 1.2816). 0.56 keeps 0.55’s values because its background layer is byte-identical to 0.55’s (the grading done together for 0.1 · 0.53 · 0.54 · 0.55 at the 0.55 release), and 0.54 is the released app re-run as it is.

0.55 (2026-10-19) Character decided from the average (0.5 · 0.5) of the cutout model and a copy further trained to count effects (glow · particles · light rays) as background, with threshold 0.55

  Version 0.1 Version 0.53 Version 0.54 Version 0.55
Resolving power 100% 1337% 1480% 1752%
Resolving power 95% CI — 924–2215% 1009–2470% 1187–2998%
Resolving power 80% CI — 1040–1832% 1146–2045% 1352–2434%
Blind test (no major loss) 31.7% 81.7% 85.0% 86.7%
Blind test 95% CI 21.3–44.2% 70.1–89.4% 73.9–91.9% 75.8–93.1%
Blind test 80% CI 24.5–39.8% 74.5–87.2% 78.2–90.0% 80.1–91.3%

Resolving power is relative to version 0.1 (= 100%); its intervals come from a bootstrap resampling the same pictures in pairs (10,000 draws, seed 20261002), the 95% interval being the 2.5 · 97.5 percentiles and the 80% interval the 10 · 90 percentiles (version 0.1 is the reference, so it has no interval). The blind test is the share of pictures graded “no major loss” when the versions’ results on 60 AI-generated pixiv pictures were mixed and graded without knowing the version; the intervals are Wilson intervals (z = 1.96 · 1.2816). The four versions were graded again together (0.54 re-run with the released app as it is).

0.54 (2026-10-17) Character decided from a weighted average (0.6 · 0.4) of the cutout model and a fine-tuned copy of it run together, with the threshold raised to 0.55

  Version 0.1 Version 0.52 Version 0.53 Version 0.54
Resolving power 100% 1133% 1337% 1506%
Resolving power 95% CI — 713–2043% 924–2215% 1026–2559%
Resolving power 80% CI — 837–1664% 1040–1832% 1165–2084%
Blind test (no major loss) 26.7% 83.3% 86.7% 86.7%
Blind test 95% CI 17.1–39.0% 72.0–90.7% 75.8–93.1% 75.8–93.1%
Blind test 80% CI 20.0–34.5% 76.3–88.6% 80.1–91.3% 80.1–91.3%

Resolving power is relative to version 0.1 (= 100%); its intervals come from a bootstrap resampling the same pictures in pairs (10,000 draws, seed 20261002), the 95% interval being the 2.5 · 97.5 percentiles and the 80% interval the 10 · 90 percentiles (version 0.1 is the reference, so it has no interval). The blind test is the share of pictures graded “no major loss” when the versions’ results on 60 AI-generated pixiv pictures were mixed and graded without knowing which version made which; its intervals are Wilson intervals (z = 1.96 · 1.2816). The four versions were graded again together (11.15).

0.53 (2026-10-15) Pictures where the cutout model finds almost no character use the previous method’s decision (neural network + statistics) as it is

  Version 0.1 Version 0.51 Version 0.52 Version 0.53
Resolving power 100% 1051% 1133% 1337%
Resolving power 95% CI — 680–1777% 713–2043% 924–2215%
Resolving power 80% CI — 794–1480% 837–1664% 1040–1832%
Blind test (no major loss) 35.0% 70.0% 81.7% 85.0%
Blind test 95% CI 24.2–47.6% 57.5–80.1% 70.1–89.4% 73.9–91.9%
Blind test 80% CI 27.6–43.2% 62.0–77.0% 74.5–87.2% 78.2–90.0%

Resolving power is relative to version 0.1 (= 100%); its intervals come from a bootstrap resampling the same pictures in pairs (10,000 draws, seed 20261002), the 95% interval being the 2.5 · 97.5 percentiles and the 80% interval the 10 · 90 percentiles (version 0.1 is the reference, so it has no interval). The blind test is the share of pictures graded “no major loss” when the versions’ results on 60 AI-generated pixiv pictures were mixed and graded without knowing which version made which; its intervals are Wilson intervals (z = 1.96 · 1.2816). The four versions (plus 0.50) were graded again together (11.15).

0.52 (2026-10-15) Character decided by adding the previous method’s decision (neural network + statistics) to the cutout-model probability, with no core steps after it

  Version 0.1 Version 0.50 Version 0.51 Version 0.52
Resolving power 100% 640% 1051% 1133%
Resolving power 95% CI — 473–925% 680–1777% 713–2043%
Resolving power 80% CI — 524–810% 794–1480% 837–1664%

Resolving power is relative to version 0.1 (= 100%); its intervals come from a bootstrap resampling the same pictures in pairs (10,000 draws, seed 20261002), the 95% interval being the 2.5 · 97.5 percentiles and the 80% interval the 10 · 90 percentiles (version 0.1 is the reference, so it has no interval). Measured with the default settings, cutout model on. No blind test was run.

0.51 (2026-10-15) Cutout model (anime-character segmentation network reduced to 8 bits, built into the app) picks out the whole character, the rest goes to the background layer

  Version 0.1 Version 0.49 Version 0.50 Version 0.51
Resolving power 100% 614% 640% 1051%
Resolving power 95% CI — 450–891% 473–925% 680–1777%
Resolving power 80% CI — 500–779% 524–810% 794–1480%

Resolving power is relative to version 0.1 (= 100%); its intervals come from a bootstrap resampling the same pictures in pairs (10,000 draws, seed 20261002), the 95% interval being the 2.5 · 97.5 percentiles and the 80% interval the 10 · 90 percentiles (version 0.1 is the reference, so it has no interval). Measured with the default settings, cutout model on.

0.50 (2026-10-15) Neural-network assist strengthened (statistical score and network score combined in one formula)

  Version 0.1 Version 0.48 Version 0.49 Version 0.50
Resolving power 100% 591% 614% 640%
Resolving power 95% CI — 433–863% 450–891% 473–925%
Resolving power 80% CI — 482–754% 500–779% 524–810%

Resolving power is relative to version 0.1 (= 100%); its intervals come from a bootstrap resampling the same pictures in pairs (10,000 draws, seed 20261002), the 95% interval being the 2.5 · 97.5 percentiles and the 80% interval the 10 · 90 percentiles (0.1 is the reference, so it has none). Measured with the default settings, neural-network assist on.

0.49 (2026-10-15) Neural-network assist (remaining background removed only when the statistical formula and the network agree)

  Version 0.1 Version 0.47 Version 0.48 Version 0.49
Resolving power 100% 591% 591% 614%
Resolving power 95% CI — 433–863% 433–863% 450–891%
Resolving power 80% CI — 482–754% 482–754% 500–779%
Blind test 27% 50% 50% 48%
Blind test 95% CI 17–39% 38–62% 38–62% 36–61%
Blind test 80% CI 20–35% 42–58% 42–58% 40–57%

Resolving power is relative to version 0.1 (= 100%); its intervals come from a bootstrap resampling the same pictures in pairs (10,000 draws, seed 20261002), the 95% interval being the 2.5 · 97.5 percentiles and the 80% interval the 10 · 90 percentiles (0.1 is the reference, so it has no interval). The blind test is the share of “no major loss” pictures when the four versions’ results on 60 AI-generated pixiv pictures were mixed and graded without knowing the version, with Wilson intervals. The four versions were graded again together (11).

0.48 (2026-10-13) Head-structure cues for naming faces · per-stage painting folders · 8 background improvement cycles

  Version 0.1 Version 0.46 Version 0.47 Version 0.48
Resolving power 100% 591% 591% 591%
Resolving power 95% CI — 433–863% 433–863% 433–863%
Resolving power 80% CI — 482–754% 482–754% 482–754%
Blind test 20% 37% 37% 37%
Blind test 95% CI 12–32% 26–49% 26–49% 26–49%
Blind test 80% CI 14–27% 29–45% 29–45% 29–45%

Resolving power is relative to version 0.1 (= 100%); its intervals come from a bootstrap resampling the same pictures in pairs (10,000 draws, seed 20261002), the 95% interval being the 2.5 · 97.5 percentiles and the 80% interval the 10 · 90 percentiles (0.1 is the reference, so it has no interval). The blind test is the share of “no major loss” pictures when the four versions’ results on 60 AI-generated pixiv pictures were mixed and graded without knowing the version, with Wilson intervals. 0.46 · 0.47 · 0.48 have background maps identical to 0.43 on the 60 pictures, so the grading done together at 0.43 is used as it is (11).

0.47 (2026-10-11) Roughs that trace (no eye recognition · real outlines · background composition · continuous strokes)

  Version 0.1 Version 0.45 Version 0.46 Version 0.47
Resolving power 100% 591% 591% 591%
Resolving power 95% CI — 433–863% 433–863% 433–863%
Resolving power 80% CI — 482–754% 482–754% 482–754%
Blind test 20% 37% 37% 37%
Blind test 95% CI 12–32% 26–49% 26–49% 26–49%
Blind test 80% CI 14–27% 29–45% 29–45% 29–45%

Resolving power is relative to version 0.1 (= 100%); its intervals come from a bootstrap resampling the same pictures in pairs (10,000 draws, seed 20261002), the 95% interval being the 2.5 · 97.5 percentiles and the 80% interval the 10 · 90 percentiles (0.1 is the reference, so it has no interval). The blind test is the share of “no major loss” pictures when the four versions’ results on 60 AI-generated pixiv pictures were mixed and graded without knowing the version, with Wilson intervals. 0.45 · 0.46 · 0.47 have background maps identical to 0.43 on the 60 pictures, so the grading done together at 0.43 is used as it is (11).

0.46 (2026-10-11) Two roughs (concept · refined)

  Version 0.1 Version 0.44 Version 0.45 Version 0.46
Resolving power 100% 591% 591% 591%
Resolving power 95% CI — 433–863% 433–863% 433–863%
Resolving power 80% CI — 482–754% 482–754% 482–754%
Blind test 20% 37% 37% 37%
Blind test 95% CI 12–32% 26–49% 26–49% 26–49%
Blind test 80% CI 14–27% 29–45% 29–45% 29–45%

Resolving power is relative to version 0.1 (= 100%); its intervals come from a bootstrap resampling the same pictures in pairs (10,000 draws, seed 20261002), the 95% interval being the 2.5 · 97.5 percentiles and the 80% interval the 10 · 90 percentiles (version 0.1 is the reference and has no interval). The blind test is the share of pictures with “no major loss” when the results of the four versions were mixed and graded without knowing which version made them, on 60 AI-generated pixiv pictures, with Wilson intervals. 0.44 · 0.45 · 0.46 have the same 60 background maps as 0.43, so the grading done together at 0.43 is used as it is (11).

0.45 (2026-10-11) Keeping rough details

  Version 0.1 Version 0.43 Version 0.44 Version 0.45
Resolving power 100% 591% 591% 591%
Resolving power 95% CI — 433–863% 433–863% 433–863%
Resolving power 80% CI — 482–754% 482–754% 482–754%
Blind test 20% 37% 37% 37%
Blind test 95% CI 12–32% 26–49% 26–49% 26–49%
Blind test 80% CI 14–27% 29–45% 29–45% 29–45%

Resolving power is relative to version 0.1 (= 100%); its intervals come from a bootstrap resampling the same pictures in pairs (10,000 draws, seed 20261002), the 95% interval being the 2.5 · 97.5 percentiles and the 80% interval the 10 · 90 percentiles (version 0.1 is the reference and has no interval). The blind test is the share of pictures with “no major loss” when the results of the four versions were mixed and graded without knowing which version made them, on 60 AI-generated pixiv pictures, with Wilson intervals. 0.44 · 0.45 have the same 60 background maps as 0.43, so the grading done together at 0.43 is used as it is (11).

0.44 (2026-10-11) A rough that looks drawn by a person

  Version 0.1 Version 0.42 Version 0.43 Version 0.44
Resolving power 100% 225% 591% 591%
Resolving power 95% CI — 189–275% 433–863% 433–863%
Resolving power 80% CI — 200–256% 482–754% 482–754%
Blind test 20% 35% 37% 37%
Blind test 95% CI 12–32% 24–48% 26–49% 26–49%
Blind test 80% CI 14–27% 28–43% 29–45% 29–45%

Resolving power is relative to version 0.1 (= 100%); its intervals come from a bootstrap resampling the same pictures in pairs (10,000 draws, seed 20261002), the 95% interval being the 2.5 · 97.5 percentiles and the 80% interval the 10 · 90 percentiles (version 0.1 is the reference and has no interval). The blind test is the share of pictures with “no major loss” when the results of the four versions were mixed and graded without knowing which version made them, on 60 AI-generated pixiv pictures, with Wilson intervals. 0.44 has the same 60 background maps as 0.43, so the grading done together at 0.43 is used as it is (11).

0.43 (2026-10-11) Returning dark character parts · rectangular background objects drawn with lines

  Version 0.1 Version 0.41 Version 0.42 Version 0.43
Resolving power 100% 214% 225% 591%
Resolving power 95% CI — 179–260% 189–275% 433–863%
Resolving power 80% CI — 190–242% 200–256% 482–754%
Blind test 20% 33% 35% 37%
Blind test 95% CI 12–32% 23–46% 24–48% 26–49%
Blind test 80% CI 14–27% 26–41% 28–43% 29–45%

Resolving power is relative to version 0.1 (= 100%); its intervals come from a bootstrap resampling the same pictures in pairs (10,000 draws, seed 20261002), the 95% interval being the 2.5 · 97.5 percentiles and the 80% interval the 10 · 90 percentiles (version 0.1 is the reference and has no interval). The blind test is the share of pictures with “no major loss” when the results of the four versions were mixed and graded without knowing which version made them, on 60 AI-generated pixiv pictures, with Wilson intervals. The four versions were graded again from scratch together, so the rates differ from the table of the 0.42 entry (11).

0.42 (2026-10-10) Sending fewer black legs · clothes to the background

  Version 0.1 Version 0.40 Version 0.41 Version 0.42
Resolving power 100% 214% 214% 225%
Resolving power 95% CI — 179–261% 179–260% 189–275%
Resolving power 80% CI — 190–243% 190–242% 200–256%
Blind test 32% 45% 48% 48%
Blind test 95% CI 21–44% 33–58% 36–61% 36–61%
Blind test 80% CI 25–40% 37–53% 40–57% 40–57%

Resolving power is relative to version 0.1 (= 100%); its intervals come from a bootstrap resampling the same pictures in pairs (10,000 draws, seed 20261002), the 95% interval being the 2.5 · 97.5 percentiles and the 80% interval the 10 · 90 percentiles (version 0.1 is the reference and has no interval). The blind test is the share of pictures with “no major loss” when the results of the four versions were mixed and graded without knowing which version made them, on 60 AI-generated pixiv pictures, with Wilson intervals. The four versions were graded again from scratch together, so every version’s rate is lower than in the table of the 0.41 entry (11).

0.41 (2026-10-04) Returning hair tips · sleeves cut off by the frame

  Version 0.1 Version 0.39 Version 0.40 Version 0.41
Resolving power 100% 178% 214% 214%
Resolving power 95% CI — 150–214% 179–261% 179–260%
Resolving power 80% CI — 159–200% 190–243% 190–242%
Blind test 35% 58% 58% 60%
Blind test 95% CI 24–48% 46–70% 46–70% 47–71%
Blind test 80% CI 28–43% 50–66% 50–66% 52–68%

Resolving power is relative to version 0.1 (= 100%); its intervals come from a bootstrap resampling the same pictures in pairs (10,000 draws, seed 20261002), the 95% interval being the 2.5 · 97.5 percentiles and the 80% interval the 10 · 90 percentiles (version 0.1 is the reference and has no interval). The blind test is the share of pictures with “no major loss” when the results of the four versions were mixed and graded without knowing which version made them, on 60 AI-generated pixiv pictures, with Wilson intervals. Versions 0.39 · 0.40 have byte-identical background maps on the 60 pictures and were graded as one panel (11).

0.40 (2026-10-03) The floor of line-drawn rooms

  Version 0.1 Version 0.38 Version 0.39 Version 0.40
Resolving power 100% 178% 178% 214%
Resolving power 95% CI — 150–214% 150–214% 179–261%
Resolving power 80% CI — 159–200% 159–200% 190–243%
Blind test 42% 58% 58% 58%
Blind test 95% CI 30–54% 46–70% 46–70% 46–70%
Blind test 80% CI 34–50% 50–66% 50–66% 50–66%

Resolving power is relative to version 0.1 (= 100%); its intervals come from a bootstrap resampling the same pictures in pairs (10,000 draws, seed 20261002), the 95% interval being the 2.5 · 97.5 percentiles and the 80% interval the 10 · 90 percentiles (version 0.1 is the reference and has no interval). The blind test is the share of pictures with “no major loss” when the results of the four versions were mixed and graded without knowing which version made them, on 60 AI-generated pixiv pictures, with Wilson intervals. Versions 0.39 · 0.40 have background maps byte-identical to 0.38 on the 60 pictures, so 0.38’s grades were used as they are (11).

0.39 (2026-10-02) Base colors: colors buried in white · small colored areas · shadow base colors

  Version 0.1 Version 0.37 Version 0.38 Version 0.39
Resolving power 100% 153% 178% 178%
Resolving power 95% CI — 129–184% 150–214% 150–214%
Resolving power 80% CI — 136–173% 159–200% 159–200%
Blind test 42% 52% 58% 58%
Blind test 95% CI 30–54% 39–64% 46–70% 46–70%
Blind test 80% CI 34–50% 43–60% 50–66% 50–66%

Resolving power is relative to version 0.1 (= 100%); its intervals come from a bootstrap resampling the same pictures in pairs (10,000 draws, seed 20261002), the 95% interval being the 2.5 · 97.5 percentiles and the 80% interval the 10 · 90 percentiles (version 0.1 is the reference and has no interval). The blind test is the share of pictures with “no major loss” when the results of the four versions were mixed and graded without knowing which version made them, on 60 AI-generated pixiv pictures, with Wilson intervals (11).

0.38 (2026-10-02) Returning lineless clothes · legs that went into the scene background

  Version 0.1 Version 0.36 Version 0.37 Version 0.38
Resolving power 100% 133% 153% 178%
Resolving power 95% CI — 111–161% 129–184% 150–214%
Resolving power 80% CI — 118–151% 136–173% 159–200%
Blind test 42% 50% 52% 58%
Blind test 95% CI 30–54% 38–62% 39–64% 46–70%
Blind test 80% CI 34–50% 42–58% 43–60% 50–66%

Resolving power is relative to version 0.1 (= 100%); its intervals come from a bootstrap resampling the same pictures in pairs (10,000 draws, seed 20261002), the 95% interval being the 2.5 · 97.5 percentiles and the 80% interval the 10 · 90 percentiles (version 0.1 is the reference and has no interval). The blind test is the share of pictures with “no major loss” when the results of the four versions were mixed and graded without knowing which version made them, on 60 AI-generated pixiv pictures, with Wilson intervals (11).

0.37 (2026-10-01) Tilted pictures, keeping black clothes from leaking into the background

0.36 (2026-09-30) Fixing layer names of old PSDs inside the program

0.35 (2026-09-30) Layer name “색 트레이스”, a tool to rename layers in old PSDs

0.34 (2026-09-30) Tackling limitations again: narrow gaps on white backgrounds, mirror-agreed faces, returning black hair

0.33 (2026-09-30) Verifying the character layer, background seen between character parts (gaps)

0.32 (2026-09-30) Fewer pictures with no background found

0.31 (2026-09-30) Not taking places enclosed by lines into the background

0.30 (2026-09-30) Splitting large pictures at a reduced size (setting)

0.29 (2026-09-30) The color step threshold of large pictures in proportion to picture size

0.28 (2026-09-29) Removing names from separated hair pieces

0.27 (2026-09-29) Skipping face-based widening on flat backgrounds, results by detailed condition

0.26 (2026-09-29) Verification on 342 new pictures, empty background layer in pictures without background, the relation between faces and background results

0.25 (2026-09-29) Removing the “skin” color name in pictures without faces

0.24 (2026-09-29) Folders of two-person pictures, names for pale skin

0.23 (2026-09-29) Faster re-splitting after corrections

0.22 (2026-09-29) Fewer names · folders from fake faces

0.21 (2026-09-29) White clothes on white backgrounds

0.20 (2026-09-28) Verification with 300 unseen pictures

0.19 (2026-09-28) Re-verifying background · faces · characters · glow · brush painting cleanup

0.18 (2026-09-28) Re-verifying naming

0.17 (2026-09-28) Cleaning up base colors of brush paintings

0.16 (2026-09-28) Outer glow layer

0.15 (2026-09-28) Per-character folders

0.14 (2026-09-28) Eye · skin · hair names

0.13 (2026-09-28) Filtering fake faces

0.12 (2026-09-28) Finding faces to widen the background

0.11 (2026-09-28) Line width set by measuring the picture

0.10 (2026-09-28) Returning attached character parts, full re-verification

0.9 (2026-09-27) A rough without breaks

0.8 (2026-09-27) Turning all layers off

0.7 (2026-09-27) Automatic separation of backgrounds drawn with lines

0.6 (2026-09-27) Automatic decision for cut-off parts, loop, maximum number of parts

0.5 (2026-09-27) Correction tools

0.4 (2026-09-27) Scene backgrounds and exact lines

0.3 (2026-09-27) Refining with AI-generated pictures, work-file layers

0.2 (2026-09-27) Illustrator-style layer structure, running without internet

0.1 (2026-09-27) First version


13. References

These are the works cited by number under References in the formula notes. “This program’s experiments (section)” marks values and rules set by this program on its test pictures without a published source; the evidence is in the section given. “A rule set by this program” marks conventions such as notation or rounding that need no evidence.