Multiple tools all to get manga from mangadex.org (via API) and translate them in any languages
  • Python 98.3%
  • Nix 1.7%
Find a file
lonelyobserver0 df4504ed11 Version 4
2026-02-17 21:28:52 +01:00
.gitignore Best OCR 2026-02-13 23:24:44 +01:00
config.py Version 2 2026-02-16 23:04:01 +01:00
debug_heights.py Version 1 2026-02-16 22:18:11 +01:00
image_editor.py Version 1 2026-02-16 22:18:11 +01:00
mangadex_downloader.py Version 2 2026-02-16 23:04:01 +01:00
ocr.py Migliorata la traduzione 2026-02-14 13:45:16 +01:00
reader.py Version 3 2026-02-17 10:03:05 +01:00
README.md Version 2 2026-02-16 23:04:01 +01:00
requirements.txt Version 2 2026-02-16 23:04:01 +01:00
shell.nix Version 3 2026-02-17 10:03:05 +01:00
text_grouper.py Migliorata la traduzione 2026-02-14 13:45:16 +01:00
translate.py Version 4 2026-02-17 21:28:52 +01:00
translator.py Version 4 2026-02-17 21:28:52 +01:00

Manga Translator

Traduzione automatica del testo in immagini manga con inpainting neurale e OCR avanzato.

Struttura

transmanga/
├── config.py          # Configurazione globale
├── ocr.py             # Rilevamento testo (PaddleOCR)
├── text_grouper.py    # Raggruppamento testo (Union-Find)
├── translator.py      # Traduzione (Google/DeepL)
├── image_editor.py    # Editing immagini (LaMa inpainting + text rendering)
├── translate.py       # Script principale traduzione
├── mangadex_downloader.py  # Download capitoli da MangaDex
├── reader.py          # Lettore manga (Qt6/PySide6)
├── requirements.txt
└── README.md

Caratteristiche

  • OCR: PaddleOCR per rilevamento testo multi-lingua
  • Inpainting: LaMa (Large Mask) neural network per rimozione testo pulita
  • Speech Bubble Detection: Rilevamento automatico delle bolle di dialogo
  • Font Adattivo: Dimensione font variabile (riempie le bolle, proporzionale fuori)
  • Raggruppamento Intelligente: Union-Find per raggruppare righe di testo
  • Lettore Integrato: App Qt6 per leggere i manga tradotti con confronto sorgente

Installazione

Con Nix (consigliato)

cd transmanga
nix-shell

Con pip

cd transmanga
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

Nota: La prima esecuzione scarica i modelli OCR e LaMa (~2-3 GB).

Utilizzo

Struttura cartelle

I file vengono salvati automaticamente in ~/transmanga/:

~/transmanga/
├── <Nome Manga>/
│   ├── metadata.json           # Info manga (titolo, lingua, ecc.)
│   ├── sources/
│   │   └── <lingua sorgente>/  # es: pt, en, ja
│   │       ├── 1/              # Capitolo 1
│   │       │   ├── page1.jpg
│   │       │   └── ...
│   │       ├── 2/
│   │       └── ...
│   └── translated/
│       └── <lingua target>/    # es: it, en
│           ├── 1/
│           ├── 2/
│           └── ...
└── <Altro Manga>/
    └── ...

Download capitoli

python mangadex_downloader.py

Inserisci URL o ID del manga da MangaDex, seleziona lingua e capitoli.

Traduzione

Modalità interattiva

python translate.py

Seleziona manga, lingua target e capitoli da tradurre.

Linea di comando

# Lista manga disponibili
python translate.py --list

# Traduci tutti i capitoli di un manga
python translate.py "Nome Manga" --all

# Traduci un capitolo specifico
python translate.py "Nome Manga" 5

# Traduci range di capitoli
python translate.py "Nome Manga" 1 10

Lettore manga

python reader.py

Funzionalità del lettore:

  • Selezione manga: Dropdown per scegliere tra i manga tradotti
  • Navigazione: Pulsanti < > o frecce tastiera per cambiare capitolo
  • Toggle SRC: Pulsante per confrontare traduzione con originale
  • Header auto-hide: L'header scompare durante lo scroll e riappare tornando su
  • Shortcut tastiera:
    • / : Capitolo precedente/successivo
    • Spazio : Scroll giù
    • S : Toggle sorgente/tradotto
    • Esc : Chiudi

Configurazione

Modifica config.py per personalizzare:

# OCR
DEFAULT_LANGUAGES = ['pt', 'en']  # Lingue sorgente
OCR_CONFIDENCE_THRESHOLD = 0.3

# Traduzione
TARGET_LANGUAGE = 'it'
DEEPL_API_KEY = ''  # Opzionale, usa Google se vuoto

# Inpainting
INPAINT_METHOD = 'lama'  # LaMa neural network
MASK_PADDING = 10
MASK_DILATION = 5

# Font
FONT_MIN_SIZE = 14
FONT_MAX_SIZE = 120

# Speech Bubble Detection
BUBBLE_DETECTION_ENABLED = True
BUBBLE_MIN_ASPECT_RATIO = 0.4  # Filtra bolle troppo larghe
BUBBLE_MAX_ASPECT_RATIO = 2.5  # Filtra bolle troppo alte

Come funziona

  1. OCR (PaddleOCR): Rileva testo e posizione nelle immagini
  2. Raggruppamento (Union-Find): Unisce righe di testo nella stessa bolla
  3. Traduzione (Google/DeepL): Traduce ogni blocco in italiano
  4. Bubble Detection: Rileva i contorni delle speech bubble
  5. Inpainting (LaMa): Rimuove il testo originale con rete neurale
  6. Rendering: Inserisce testo tradotto con font adattivo:
    • Bolle: Font grande che riempie lo spazio
    • Fuori bolle: Font proporzionale all'originale

Lingue supportate

Sorgente (OCR)

Codice Lingua
ja Giapponese
ko Coreano
zh Cinese (semplificato)
en Inglese
pt Portoghese
pl Polacco

Destinazione (Traduzione)

Qualsiasi lingua supportata da Google Translate o DeepL.

API Modules

ocr.py

from ocr import get_ocr_engine

ocr = get_ocr_engine(['pt', 'en'])
ocr.initialize()
results = ocr.detect(image_rgb)
# [{'bbox': [[x1,y1], [x2,y2], [x3,y3], [x4,y4]], 'text': '...', 'confidence': 0.95}, ...]

text_grouper.py

from text_grouper import group_ocr_results

grouped = group_ocr_results(ocr_results, ['pt', 'en'])
# [{'bbox': [...], 'text': '...', 'original_bboxes': [...], 'items': [...]}, ...]

translator.py

from translator import translate_text

result = translate_text("Hello world", 'it')
# "Ciao mondo"

image_editor.py

from image_editor import get_editor

editor = get_editor()
result = editor.process(image_bgr, text_items)
# text_items: [{'bbox': [...], 'translated': '...', 'original_bboxes': [...]}, ...]

Troubleshooting

Font non trovato

Il programma cerca automaticamente font nel sistema. Su NixOS cerca in /nix/store/.

# Ubuntu/Debian
sudo apt install fonts-dejavu

# Fedora
sudo dnf install dejavu-sans-fonts

Modelli lenti a scaricare

Normale alla prima esecuzione. I modelli sono salvati in:

  • PaddleOCR: ~/.paddlex/
  • LaMa: ~/.cache/torch/

Testo duplicato

Può accadere se l'OCR rileva lo stesso testo più volte. Prova ad aumentare MASK_DILATION in config.py.

Traduzioni mancanti

Google Translate ha limiti di rate. Attendi e riprova, oppure configura una chiave DeepL.

Licenza

MIT