muscgab/JMangaBench_Read

JMangaBench_Read: a Japanese manga OCR benchmark (accuracy and speed)

Python

3

4 commits

updated Oct 15, 2026

See the code

See what people are saying

SourceMessageScoreDate

I made a fast non-autoregressive OCR model for manga (r/computervision)

I made a small (54M) Japanese manga OCR model. It's non-autoregressive, so it reads the whole text box in one forward pass instead of one character at a time. That makes it fast, about 9 ms per crop on a 2080 Ti. On Manga109-s (not used in training) it gets 92.1% exact match. On my own web manga…

2

Oct 13, 2026

README

JMangaBench_Read v1.3 — a Japanese manga OCR benchmark

English | 中文 · Appendix · Interactive leaderboard · Dataset (images)

JMangaBench_Read evaluates the accuracy and speed of OCR models on text boxes cropped from Japanese manga pages. The main set contains the text a reader reads and a translation pipeline translates: speech, narration and asides. Sound effects are excluded.

  • 7,789 text boxes from 1,847 pages by 1,847 artists (one page per artist).
  • All pages first posted between 2025-10-01 and 2026-10-01.
  • Labels from three LLM readers and human review (1,266 boxes human-confirmed).
  • Speed measured per image, per page and at maximum throughput on one RTX 2080 Ti.

Found an error in a label, a score or the docs? Please open an issue. Corrections are welcome.

v1.3 changes. 4,660 new boxes from 1,116 new pages; 13 v1.2 boxes removed (rules in Box selection and labeling); scoring normalization renamed RIN v1 with two added symbol rules; all models re-measured on an RTX 2080 Ti in fp16. The authors used Read v1.2 and 1,021 of the new boxes during model development (see Development use); scores on the 4,660 new boxes are reported separately in the appendix. Full list: appendix A6.

Leaderboard

Ranked by composite score (defined in Scoring). 7,789 boxes, RTX 2080 Ti, fp16.

#ModelArchParamsComposite ↑CER % ↓EM % ↑EM NFKC % ↑Per-image ms ↓Per-page ms (p50) ↓Max img/s ↑
1MangaOCR-Nar-Small †NAR54M97.261.7391.0980.349.135.5299 (b48)
2Hayai v2.5 Nova p384AR157M96.622.4088.0075.5954.0252.0175 (b48)
3Hayai v2.5 Nova p256AR157M96.582.9786.9974.8453.0249.1194 (b40)
4Hayai v2.5 Nova p512AR157M96.562.3787.9175.2755.4264.4111 (b40)
5Preview †NAR196M95.812.9585.4078.5131.9103.091 (b16)
6Hayai v2.1AR156M95.442.7084.4977.99141.7300.687 (b128)
7PaddleOCR-VL-For-MangaAR (VLM)959M94.982.0387.5253.15366.61024.46.6 (b10)
8LoopNAR-α L2 † ‡NAR50M94.723.3383.6274.0935.670.8243 (b48)
9LoopNAR-α L3 † ‡NAR50M94.703.2383.6274.2142.776.9224 (b48)
10LoopNAR-α L1 † ‡NAR50M94.133.9581.9572.6429.063.2259 (b56)
11baberuOCR v1.1AR113M93.343.6681.6070.89123.6278.3105 (b256)
12mangaOCRAR111M90.234.8478.2567.9084.9242.442 (b56)
–GPT-6 Astra *LLM—99.470.2498.0493.40———
–GPT-6.1 Sol *LLM—99.350.2897.7597.71———
–Claude Opus 5.5 *LLM—98.050.5995.5888.33———
More models
#ModelArchParamsComposite ↑CER % ↓EM % ↑EM NFKC % ↑Per-image ms ↓Per-page ms (p50) ↓Max img/s ↑
–e4 L3 † §NAR54M97.291.7390.9780.0742.871.9227 (b32)
–e4 L2 † §NAR54M97.281.7590.9280.0635.564.3267 (b48)
–e4 L1 † §NAR54M97.141.9690.4079.6628.358.1282 (b24)
  • † Made by the authors of this benchmark (see Conflict of interest).
  • ‡ Experimental model, not released. L1/L2/L3 = number of decoder loops, same weights.
  • § e4: the authors' earlier mainline checkpoint (same architecture family as MangaOCR-Nar-Small, 3-loop training), to be released as a reference model. L1/L2/L3 = decoder loops at inference.
  • * LLM readers. The agreed reading of all three defines 7,005 of the labels (all boxes outside hard), so these rows are listed for reference and are not ranked (appendix A4).
  • Accuracy columns use batch-size-1 outputs. Under per-page batching, composite scores change by at most 0.02.
  • EM NFKC: exact match after Unicode NFKC only, for reference. The gap to EM comes mostly from spelling variants that RIN merges (see Scoring).
  • bN: batch size at maximum throughput.
  • Params from the published weight files; mangaOCR estimated from its fp32 file size.
  • Breakdowns by subset, length and role, the speed details and the NFKC results: appendix.

Accuracy vs. speed

Click a chart to open the interactive version (subsets: all / new / printed / non-printed / gold / hard; e4 under "More models").

Composite score vs. per-page latency

Composite score vs. per-image latency

Reading one page at a time with no wait between pages, the median time per page is 37 ms for MangaOCR-Nar-Small, 245 ms for Hayai v2.5 Nova p384 and 345 ms for Hayai v2.1 (appendix A2).

Data

Source

Black-and-white Japanese comic pages posted publicly online by independent artists, collected for research use. Source type and license follow AnimeText.

RuleValue
Posting date2025-10-01 to 2026-10-01 (v1.2 pages up to 2026-03-10, new pages from 2026-03-10)
Artistsone page per artist, 1,847 artists
Colorblack-and-white
Content ratinggeneral (6,229 boxes), sensitive (1,560 boxes)
LanguageJapanese
Excluded artiststhose who publicly prohibit reposting or AI use

Overlap with AnimeText

All 1,847 pages were checked by image ID (dataset revisions of 2026-10-04).

  • AnimeText: 0 pages. Its 735,060 image IDs (train, valid, test) range up to 8,475,567, posted on 2024-11-23. The lowest page ID in this benchmark is 10,053,471.
  • animetext-ocr: 0 pages. Its 496,601 source image IDs range up to 8,475,560.

Box selection and labeling

Boxes come from one candidate pool. Pages were processed in a fixed order; v1.2 covers the pages up to a cut-off and v1.3 adds the pages after it.

1. Detection. AnimeText YOLO12x detector, confidence ≥ 0.425. For nested boxes the smaller box is kept. General pages keep all boxes; sensitive pages keep up to 8 random boxes. Result: about 21,500 candidate boxes on 2,524 pages.

2. LLM readers. Each reader worked independently and did not see the other readers' outputs. Prompts: appendix A3.

ReaderTaskBoxes read
GPT-6.1 SolOCR of the full pool; font class (printed / handwritten / artistic); text role; first screening21,305
GPT-6 AstraOCR; admission decision; text role; language labelabout 11,900
Claude Opus 5.5final review: OCR from the crop only; text role; flags for boxes cut by the frame, mixed with other text, or not body text9,083

3. Exclusions (Sol screening and Astra admission):

  • Scene text: shop names, station names, street signs, signboards, posters.
  • Non-story text: ads, watermarks, signatures and credits, large titles.
  • Large decorative sound effects (e.g. a giant ドドド).
  • Damaged text: occluded, smeared, faded, blacked out, or heavily cut off.
  • Non-Japanese text.

Hard-to-read, rare or deformed characters, long text, artistic lettering and low reader confidence are not exclusion criteria.

4. Main-set rules. Applied to all v1.3 boxes:

RuleRemoved
Sound effects and mimetic words drawn outside balloons (majority role label of the three readers; v1.2 page-checked overrides kept)not in the candidate set
Label contains a voicing mark on a character without a voiced form (e.g. あ゛, ん゛)16 (8 from v1.2, 8 new)
Moans or emphasis only, with no lexical content. Candidates: boxes without kanji that contain ♡, a small vowel, ゔ or a doubled character; each candidate judged by a human8 (5 from v1.2, 3 new)

5. Labels of the new boxes.

CaseLabelBoxes
Three readings identical after normalization, no Opus flagagreed reading (Sol's spelling)4,232
Readings differ (232 kept); readings agree but Opus flagged the box (151 kept); both (45 kept)human decision: choose a reading, enter a new one, or drop the box (63 dropped)428 (hard)
Uniform random sample of agreed boxes, re-checked by a human300/300 correct(included in the 4,232)

v1.2 labels are unchanged. The review interface showed the three LLM readings only, never an OCR model's output.

Label quality. 0 errors in 300 audited new agreed boxes gives a one-sided 95% upper bound of 0.99% on their error rate (Clopper–Pearson); v1.2's audit gave 0 errors in 200 (bound 1.49%). The 6,523 labels without per-box human confirmation are verified by sampling only.

Subsets

SubsetDefinitionBoxes
allall boxes7,789
newboxes added in v1.34,660
v1.2 keptboxes carried over from v1.23,129
hardreaders disagreed or Opus flagged the box; human-decided label784
goldall human-confirmed boxes (hard + random audits of v1.2 and v1.3)1,266
printedmajority font label of the three readers is printed5,877
non-printedhandwritten, artistic or mixed1,912

Development use

The authors used Read v1.2 (3,142 boxes) as a development set for MangaOCR-Nar-Small and its predecessors: model selection, comparisons and error analysis. A second development set, "Sol handwriting" (2,248 boxes from the same candidate pool that GPT-6.1 Sol classified as handwritten, with LLM-reading labels), was used from 2026-10-09 for training-time validation, data and architecture comparisons and error analysis. It shares 1,021 boxes with the v1.3 new boxes: 1,004 of the 1,110 new non-printed boxes and 17 printed boxes. Aggregate statistics measured on the candidate pool, minus the v1.2 pages, informed the design of synthetic training data; those pool pages include the pages of the 4,660 new boxes. The statistics are released in docs/pool_stats/. No image from the candidate pool or the benchmark was used for training. Scores on the new boxes are in appendix A1; their non-printed part largely overlaps the Sol handwriting set.

Scoring

Predictions and labels are normalized with the same rules, RIN v1 (reading-invariant normalization). RIN merges spelling variants that do not change what a reader reads.

RuleExample
width folding (full-width ASCII → half-width, half-width kana → full-width)! → !, テスト → テスト
remove whitespaceあ い → あい
pause-dot runs → …・・・, ..., …… → …
long dashes → ー; ー runs → one ー── → ー
wave marks → 〜; 〜 runs → one 〜~~ → 〜
quote forms → " / '〝 〟 → "
voicing marks unifiedう゛ → ゔ, あ゙ → あ゛
compatibility symbols (new in v1.3: ⁇, ⊠)⁉ → !?, ⁇ → ??, ⊠ → ☒

Characters, small kana, brackets 「」『』, 〇 / ○ and the presence of a voicing mark are kept. Labels use ♡; ♥ is not mapped. RIN v1 equals Read v1.2's r7 plus the two v1.3 symbol rules; no v1.3 label changes between the two.

Why RIN. The labels follow the readers' spelling, which varies for the same glyph: ~ in 326 boxes and 〜 in 112, … in 1,832 boxes and ・・ runs in 260, ! in 868 and ! in 560. A model that writes each symbol one way cannot match all labels without normalization. EM after NFKC alone is listed for reference.

Metrics

  • CER: total edit distance / total label characters.
  • EM: fraction of boxes with an exact match.
  • Composite (ranking metric), 1 − normalized edit distance as in ICDAR 2019 ReCTS, averaged equally over printed and non-printed boxes:

$$s_i = 1 - \frac{\mathrm{ED}(p_i, g_i)}{\max(|p_i|, |g_i|)}$$

$$\text{Composite} = 100 \times \tfrac{1}{2}\left(\overline{s}{\text{printed}} + \overline{s}{\text{non-printed}}\right)$$

Speed

One RTX 2080 Ti (11 GB) per model, all models in fp16 (the card has no fast bf16). Each run is pinned to 8–10 CPU cores of a 2× Xeon Gold 6148 host, with library threads capped at 8; up to four models run at the same time, one per GPU. Images are pre-decoded in memory. Timings include the model's preprocessing and decoding and are GPU-synchronized.

MeasureMethod
Per-image latencybatch size 1, single process; mean over all 7,789 crops after warm-up
Per-page latency896 batches with sizes drawn from the real per-page box counts (mean 8.7, max 45); single process, preprocessing included; p50 of batch time
Max throughput512 crops; preprocessing in 4 worker processes in parallel with the GPU (main process: 3 threads); batch size searched up to the memory limit; median of 3 runs at the best batch size
One page at a time, first cropappendix A2

Read v1.2 was timed on an RTX 3080 Ti with each model's default precision. Speeds of the two versions are not comparable.

After the GPU has been idle for several seconds, the driver lowers its clock and the next request is slower (for Hayai v2.5 Nova p384 51.5 → 81.7 ms on the first crop after 20 s idle). This applies to every model; see appendix A2.

Models

ModelWeightsSettings
MangaOCR-Nar-Small †to be releasedfp16; the inference code released with the model
e4 †to be releasedfp16; 1/2/3 decoder loops
LoopNAR-α †not releasedfp16; 1/2/3 decoder loops
Preview †muscgab/manga-ocr-nar-previewfp16
Hayai v2.1JustANormalTinkerer/hayai-ocr-v2 (main branch = v2.1)256 patches; greedy; fp16
Hayai v2.5 NovaJustANormalTinkerer/hayai-ocr-v2.5-nova256 / 384 / 512 patches; otherwise as above
PaddleOCR-VL-For-Mangajzhang533/PaddleOCR-VL-For-Mangafp16; greedy; prompt OCR:; batched with per-image vision attention, at most 16 crops per batch
baberuOCR v1.1genshiai-daichi/baberu-ocr (weights = tag v1.1)fp16; README generation defaults (up to 256 tokens)
mangaOCRkha-white/manga-ocr-basefp16; package defaults otherwise

fp16 against fp32 on the same inputs: identical outputs for Preview (260/260), PaddleOCR-VL-For-Manga (65/65) and MangaOCR-Nar-Small (7,788/7,789); LoopNAR-α L3 EM 83.61 (fp16) vs 83.62 (fp32). The other models were not compared.

Conflict of interest

MangaOCR-Nar-Small, e4, LoopNAR-α and Preview are made by the authors of this benchmark.

  • Labels come from three third-party LLMs and human review. The review interface showed LLM readings only, no OCR model outputs.
  • Read v1.2 was used during the development of the authors' models (Development use). 1,021 of the new boxes were in a development set before v1.3 was assembled. Box selection and labels do not use any OCR model output.
  • All model predictions, the scoring script and the speed scripts are released.

Limitations

  • 6,523 labels are agreed LLM readings verified by sampling only.
  • During human review the majority reading was pre-filled.
  • The hard subset is defined by LLM disagreement and flags.
  • Sound effects were excluded by LLM role labels; boxes labeled dialogue were not checked one by one.
  • Boxes were screened by LLMs; boxes judged unreadable are not included.
  • One source type (recent fan and original works), one GPU type.
  • At the max-throughput batch size, outputs match batch-size-1 outputs for 99.6–100% of boxes.

Usage

pip install regex
python eval/score.py --pred my_preds.jsonl --name my_model --out results/my_model.json

my_preds.jsonl: one line per box, {"key": "10053471_0", "pred": "作戦を続行する"}. Missing keys count as empty predictions.

LocationContent
data/gt.jsonllabels and metadata, 7,789 boxes
data/llm_readings.jsonlthree LLM readings per box
data/predictions/outputs of all listed models (batch size 1 and per-page)
data/gt_sfx.jsonlv1.2 SFX set (380 boxes), unchanged and not rescored in v1.3
eval/scoring script and RIN normalization code
speed/speed scripts
Hugging Facecrop images at original resolution: main/<key>.png (split test)

gt.jsonl fields: key, file, text, text_rin, n_chars, gold, gold_hard, gold_random_audit, printed, non_printed, font, role, orientation, crop_wh, page_id, box, rating, origin (v1.2 / new), review.

For evaluation only. Do not use for training.

Corrections

If you find any error (a wrong label, a box that should not be in the set, a scoring or speed problem), please open an issue. Fixes go into the next version and are listed in appendix A6.

License

CC BY-NC-SA 4.0 for data and code.

Citation

@misc{jmangabench_read,
  title  = {JMangaBench\_Read: A Japanese Manga OCR Benchmark},
  year   = {2026},
  url    = {https://github.com/muscgab/JMangaBench_Read}
}

muscgab/JMangaBench_Read

JMangaBench_Read: a Japanese manga OCR benchmark (accuracy and speed)

Python

3

4 commits

updated Oct 15, 2026

See the code

See what people are saying

SourceMessageScoreDate

I made a fast non-autoregressive OCR model for manga (r/computervision)

I made a small (54M) Japanese manga OCR model. It's non-autoregressive, so it reads the whole text box in one forward pass instead of one character at a time. That makes it fast, about 9 ms per crop on a 2080 Ti. On Manga109-s (not used in training) it gets 92.1% exact match. On my own web manga…

2

Oct 13, 2026

README

JMangaBench_Read v1.3 — a Japanese manga OCR benchmark

English | 中文 · Appendix · Interactive leaderboard · Dataset (images)

JMangaBench_Read evaluates the accuracy and speed of OCR models on text boxes cropped from Japanese manga pages. The main set contains the text a reader reads and a translation pipeline translates: speech, narration and asides. Sound effects are excluded.

  • 7,789 text boxes from 1,847 pages by 1,847 artists (one page per artist).
  • All pages first posted between 2025-10-01 and 2026-10-01.
  • Labels from three LLM readers and human review (1,266 boxes human-confirmed).
  • Speed measured per image, per page and at maximum throughput on one RTX 2080 Ti.

Found an error in a label, a score or the docs? Please open an issue. Corrections are welcome.

v1.3 changes. 4,660 new boxes from 1,116 new pages; 13 v1.2 boxes removed (rules in Box selection and labeling); scoring normalization renamed RIN v1 with two added symbol rules; all models re-measured on an RTX 2080 Ti in fp16. The authors used Read v1.2 and 1,021 of the new boxes during model development (see Development use); scores on the 4,660 new boxes are reported separately in the appendix. Full list: appendix A6.

Leaderboard

Ranked by composite score (defined in Scoring). 7,789 boxes, RTX 2080 Ti, fp16.

#ModelArchParamsComposite ↑CER % ↓EM % ↑EM NFKC % ↑Per-image ms ↓Per-page ms (p50) ↓Max img/s ↑
1MangaOCR-Nar-Small †NAR54M97.261.7391.0980.349.135.5299 (b48)
2Hayai v2.5 Nova p384AR157M96.622.4088.0075.5954.0252.0175 (b48)
3Hayai v2.5 Nova p256AR157M96.582.9786.9974.8453.0249.1194 (b40)
4Hayai v2.5 Nova p512AR157M96.562.3787.9175.2755.4264.4111 (b40)
5Preview †NAR196M95.812.9585.4078.5131.9103.091 (b16)
6Hayai v2.1AR156M95.442.7084.4977.99141.7300.687 (b128)
7PaddleOCR-VL-For-MangaAR (VLM)959M94.982.0387.5253.15366.61024.46.6 (b10)
8LoopNAR-α L2 † ‡NAR50M94.723.3383.6274.0935.670.8243 (b48)
9LoopNAR-α L3 † ‡NAR50M94.703.2383.6274.2142.776.9224 (b48)
10LoopNAR-α L1 † ‡NAR50M94.133.9581.9572.6429.063.2259 (b56)
11baberuOCR v1.1AR113M93.343.6681.6070.89123.6278.3105 (b256)
12mangaOCRAR111M90.234.8478.2567.9084.9242.442 (b56)
–GPT-6 Astra *LLM—99.470.2498.0493.40———
–GPT-6.1 Sol *LLM—99.350.2897.7597.71———
–Claude Opus 5.5 *LLM—98.050.5995.5888.33———
More models
#ModelArchParamsComposite ↑CER % ↓EM % ↑EM NFKC % ↑Per-image ms ↓Per-page ms (p50) ↓Max img/s ↑
–e4 L3 † §NAR54M97.291.7390.9780.0742.871.9227 (b32)
–e4 L2 † §NAR54M97.281.7590.9280.0635.564.3267 (b48)
–e4 L1 † §NAR54M97.141.9690.4079.6628.358.1282 (b24)
  • † Made by the authors of this benchmark (see Conflict of interest).
  • ‡ Experimental model, not released. L1/L2/L3 = number of decoder loops, same weights.
  • § e4: the authors' earlier mainline checkpoint (same architecture family as MangaOCR-Nar-Small, 3-loop training), to be released as a reference model. L1/L2/L3 = decoder loops at inference.
  • * LLM readers. The agreed reading of all three defines 7,005 of the labels (all boxes outside hard), so these rows are listed for reference and are not ranked (appendix A4).
  • Accuracy columns use batch-size-1 outputs. Under per-page batching, composite scores change by at most 0.02.
  • EM NFKC: exact match after Unicode NFKC only, for reference. The gap to EM comes mostly from spelling variants that RIN merges (see Scoring).
  • bN: batch size at maximum throughput.
  • Params from the published weight files; mangaOCR estimated from its fp32 file size.
  • Breakdowns by subset, length and role, the speed details and the NFKC results: appendix.

Accuracy vs. speed

Click a chart to open the interactive version (subsets: all / new / printed / non-printed / gold / hard; e4 under "More models").

Composite score vs. per-page latency

Composite score vs. per-image latency

Reading one page at a time with no wait between pages, the median time per page is 37 ms for MangaOCR-Nar-Small, 245 ms for Hayai v2.5 Nova p384 and 345 ms for Hayai v2.1 (appendix A2).

Data

Source

Black-and-white Japanese comic pages posted publicly online by independent artists, collected for research use. Source type and license follow AnimeText.

RuleValue
Posting date2025-10-01 to 2026-10-01 (v1.2 pages up to 2026-03-10, new pages from 2026-03-10)
Artistsone page per artist, 1,847 artists
Colorblack-and-white
Content ratinggeneral (6,229 boxes), sensitive (1,560 boxes)
LanguageJapanese
Excluded artiststhose who publicly prohibit reposting or AI use

Overlap with AnimeText

All 1,847 pages were checked by image ID (dataset revisions of 2026-10-04).

  • AnimeText: 0 pages. Its 735,060 image IDs (train, valid, test) range up to 8,475,567, posted on 2024-11-23. The lowest page ID in this benchmark is 10,053,471.
  • animetext-ocr: 0 pages. Its 496,601 source image IDs range up to 8,475,560.

Box selection and labeling

Boxes come from one candidate pool. Pages were processed in a fixed order; v1.2 covers the pages up to a cut-off and v1.3 adds the pages after it.

1. Detection. AnimeText YOLO12x detector, confidence ≥ 0.425. For nested boxes the smaller box is kept. General pages keep all boxes; sensitive pages keep up to 8 random boxes. Result: about 21,500 candidate boxes on 2,524 pages.

2. LLM readers. Each reader worked independently and did not see the other readers' outputs. Prompts: appendix A3.

ReaderTaskBoxes read
GPT-6.1 SolOCR of the full pool; font class (printed / handwritten / artistic); text role; first screening21,305
GPT-6 AstraOCR; admission decision; text role; language labelabout 11,900
Claude Opus 5.5final review: OCR from the crop only; text role; flags for boxes cut by the frame, mixed with other text, or not body text9,083

3. Exclusions (Sol screening and Astra admission):

  • Scene text: shop names, station names, street signs, signboards, posters.
  • Non-story text: ads, watermarks, signatures and credits, large titles.
  • Large decorative sound effects (e.g. a giant ドドド).
  • Damaged text: occluded, smeared, faded, blacked out, or heavily cut off.
  • Non-Japanese text.

Hard-to-read, rare or deformed characters, long text, artistic lettering and low reader confidence are not exclusion criteria.

4. Main-set rules. Applied to all v1.3 boxes:

RuleRemoved
Sound effects and mimetic words drawn outside balloons (majority role label of the three readers; v1.2 page-checked overrides kept)not in the candidate set
Label contains a voicing mark on a character without a voiced form (e.g. あ゛, ん゛)16 (8 from v1.2, 8 new)
Moans or emphasis only, with no lexical content. Candidates: boxes without kanji that contain ♡, a small vowel, ゔ or a doubled character; each candidate judged by a human8 (5 from v1.2, 3 new)

5. Labels of the new boxes.

CaseLabelBoxes
Three readings identical after normalization, no Opus flagagreed reading (Sol's spelling)4,232
Readings differ (232 kept); readings agree but Opus flagged the box (151 kept); both (45 kept)human decision: choose a reading, enter a new one, or drop the box (63 dropped)428 (hard)
Uniform random sample of agreed boxes, re-checked by a human300/300 correct(included in the 4,232)

v1.2 labels are unchanged. The review interface showed the three LLM readings only, never an OCR model's output.

Label quality. 0 errors in 300 audited new agreed boxes gives a one-sided 95% upper bound of 0.99% on their error rate (Clopper–Pearson); v1.2's audit gave 0 errors in 200 (bound 1.49%). The 6,523 labels without per-box human confirmation are verified by sampling only.

Subsets

SubsetDefinitionBoxes
allall boxes7,789
newboxes added in v1.34,660
v1.2 keptboxes carried over from v1.23,129
hardreaders disagreed or Opus flagged the box; human-decided label784
goldall human-confirmed boxes (hard + random audits of v1.2 and v1.3)1,266
printedmajority font label of the three readers is printed5,877
non-printedhandwritten, artistic or mixed1,912

Development use

The authors used Read v1.2 (3,142 boxes) as a development set for MangaOCR-Nar-Small and its predecessors: model selection, comparisons and error analysis. A second development set, "Sol handwriting" (2,248 boxes from the same candidate pool that GPT-6.1 Sol classified as handwritten, with LLM-reading labels), was used from 2026-10-09 for training-time validation, data and architecture comparisons and error analysis. It shares 1,021 boxes with the v1.3 new boxes: 1,004 of the 1,110 new non-printed boxes and 17 printed boxes. Aggregate statistics measured on the candidate pool, minus the v1.2 pages, informed the design of synthetic training data; those pool pages include the pages of the 4,660 new boxes. The statistics are released in docs/pool_stats/. No image from the candidate pool or the benchmark was used for training. Scores on the new boxes are in appendix A1; their non-printed part largely overlaps the Sol handwriting set.

Scoring

Predictions and labels are normalized with the same rules, RIN v1 (reading-invariant normalization). RIN merges spelling variants that do not change what a reader reads.

RuleExample
width folding (full-width ASCII → half-width, half-width kana → full-width)! → !, テスト → テスト
remove whitespaceあ い → あい
pause-dot runs → …・・・, ..., …… → …
long dashes → ー; ー runs → one ー── → ー
wave marks → 〜; 〜 runs → one 〜~~ → 〜
quote forms → " / '〝 〟 → "
voicing marks unifiedう゛ → ゔ, あ゙ → あ゛
compatibility symbols (new in v1.3: ⁇, ⊠)⁉ → !?, ⁇ → ??, ⊠ → ☒

Characters, small kana, brackets 「」『』, 〇 / ○ and the presence of a voicing mark are kept. Labels use ♡; ♥ is not mapped. RIN v1 equals Read v1.2's r7 plus the two v1.3 symbol rules; no v1.3 label changes between the two.

Why RIN. The labels follow the readers' spelling, which varies for the same glyph: ~ in 326 boxes and 〜 in 112, … in 1,832 boxes and ・・ runs in 260, ! in 868 and ! in 560. A model that writes each symbol one way cannot match all labels without normalization. EM after NFKC alone is listed for reference.

Metrics

  • CER: total edit distance / total label characters.
  • EM: fraction of boxes with an exact match.
  • Composite (ranking metric), 1 − normalized edit distance as in ICDAR 2019 ReCTS, averaged equally over printed and non-printed boxes:

$$s_i = 1 - \frac{\mathrm{ED}(p_i, g_i)}{\max(|p_i|, |g_i|)}$$

$$\text{Composite} = 100 \times \tfrac{1}{2}\left(\overline{s}{\text{printed}} + \overline{s}{\text{non-printed}}\right)$$

Speed

One RTX 2080 Ti (11 GB) per model, all models in fp16 (the card has no fast bf16). Each run is pinned to 8–10 CPU cores of a 2× Xeon Gold 6148 host, with library threads capped at 8; up to four models run at the same time, one per GPU. Images are pre-decoded in memory. Timings include the model's preprocessing and decoding and are GPU-synchronized.

MeasureMethod
Per-image latencybatch size 1, single process; mean over all 7,789 crops after warm-up
Per-page latency896 batches with sizes drawn from the real per-page box counts (mean 8.7, max 45); single process, preprocessing included; p50 of batch time
Max throughput512 crops; preprocessing in 4 worker processes in parallel with the GPU (main process: 3 threads); batch size searched up to the memory limit; median of 3 runs at the best batch size
One page at a time, first cropappendix A2

Read v1.2 was timed on an RTX 3080 Ti with each model's default precision. Speeds of the two versions are not comparable.

After the GPU has been idle for several seconds, the driver lowers its clock and the next request is slower (for Hayai v2.5 Nova p384 51.5 → 81.7 ms on the first crop after 20 s idle). This applies to every model; see appendix A2.

Models

ModelWeightsSettings
MangaOCR-Nar-Small †to be releasedfp16; the inference code released with the model
e4 †to be releasedfp16; 1/2/3 decoder loops
LoopNAR-α †not releasedfp16; 1/2/3 decoder loops
Preview †muscgab/manga-ocr-nar-previewfp16
Hayai v2.1JustANormalTinkerer/hayai-ocr-v2 (main branch = v2.1)256 patches; greedy; fp16
Hayai v2.5 NovaJustANormalTinkerer/hayai-ocr-v2.5-nova256 / 384 / 512 patches; otherwise as above
PaddleOCR-VL-For-Mangajzhang533/PaddleOCR-VL-For-Mangafp16; greedy; prompt OCR:; batched with per-image vision attention, at most 16 crops per batch
baberuOCR v1.1genshiai-daichi/baberu-ocr (weights = tag v1.1)fp16; README generation defaults (up to 256 tokens)
mangaOCRkha-white/manga-ocr-basefp16; package defaults otherwise

fp16 against fp32 on the same inputs: identical outputs for Preview (260/260), PaddleOCR-VL-For-Manga (65/65) and MangaOCR-Nar-Small (7,788/7,789); LoopNAR-α L3 EM 83.61 (fp16) vs 83.62 (fp32). The other models were not compared.

Conflict of interest

MangaOCR-Nar-Small, e4, LoopNAR-α and Preview are made by the authors of this benchmark.

  • Labels come from three third-party LLMs and human review. The review interface showed LLM readings only, no OCR model outputs.
  • Read v1.2 was used during the development of the authors' models (Development use). 1,021 of the new boxes were in a development set before v1.3 was assembled. Box selection and labels do not use any OCR model output.
  • All model predictions, the scoring script and the speed scripts are released.

Limitations

  • 6,523 labels are agreed LLM readings verified by sampling only.
  • During human review the majority reading was pre-filled.
  • The hard subset is defined by LLM disagreement and flags.
  • Sound effects were excluded by LLM role labels; boxes labeled dialogue were not checked one by one.
  • Boxes were screened by LLMs; boxes judged unreadable are not included.
  • One source type (recent fan and original works), one GPU type.
  • At the max-throughput batch size, outputs match batch-size-1 outputs for 99.6–100% of boxes.

Usage

pip install regex
python eval/score.py --pred my_preds.jsonl --name my_model --out results/my_model.json

my_preds.jsonl: one line per box, {"key": "10053471_0", "pred": "作戦を続行する"}. Missing keys count as empty predictions.

LocationContent
data/gt.jsonllabels and metadata, 7,789 boxes
data/llm_readings.jsonlthree LLM readings per box
data/predictions/outputs of all listed models (batch size 1 and per-page)
data/gt_sfx.jsonlv1.2 SFX set (380 boxes), unchanged and not rescored in v1.3
eval/scoring script and RIN normalization code
speed/speed scripts
Hugging Facecrop images at original resolution: main/<key>.png (split test)

gt.jsonl fields: key, file, text, text_rin, n_chars, gold, gold_hard, gold_random_audit, printed, non_printed, font, role, orientation, crop_wh, page_id, box, rating, origin (v1.2 / new), review.

For evaluation only. Do not use for training.

Corrections

If you find any error (a wrong label, a box that should not be in the set, a scoring or speed problem), please open an issue. Fixes go into the next version and are listed in appendix A6.

License

CC BY-NC-SA 4.0 for data and code.

Citation

@misc{jmangabench_read,
  title  = {JMangaBench\_Read: A Japanese Manga OCR Benchmark},
  year   = {2026},
  url    = {https://github.com/muscgab/JMangaBench_Read}
}