From 727b052e93143c96524bdfcbe12b0287ed35798f Mon Sep 17 00:00:00 2001 From: Guillem Hernandez Sola Date: Sat, 11 Apr 2026 14:34:18 +0200 Subject: [PATCH] Added good stuff --- bubbles.json | 48 +++---- fonts/ComicRelief-Bold.ttf | Bin 0 -> 93304 bytes fonts/ComicRelief-Regular.ttf | Bin 0 -> 79064 bytes manga-renderer.py | 255 ++++++++++++++++++++++++---------- manga-translator.py | 164 ++++++++++++++-------- 5 files changed, 310 insertions(+), 157 deletions(-) create mode 100755 fonts/ComicRelief-Bold.ttf create mode 100755 fonts/ComicRelief-Regular.ttf diff --git a/bubbles.json b/bubbles.json index 184c79f..d96941c 100644 --- a/bubbles.json +++ b/bubbles.json @@ -1,9 +1,9 @@ { "1": { - "x": 204, - "y": 137, - "w": 153, - "h": 82, + "x": 201, + "y": 134, + "w": 159, + "h": 88, "quads": [ [ [ @@ -26,10 +26,10 @@ ] }, "2": { - "x": 1167, - "y": 240, - "w": 132, - "h": 134, + "x": 1164, + "y": 237, + "w": 138, + "h": 140, "quads": [ [ [ @@ -106,10 +106,10 @@ ] }, "3": { - "x": 930, - "y": 378, - "w": 136, - "h": 132, + "x": 927, + "y": 375, + "w": 142, + "h": 138, "quads": [ [ [ @@ -186,10 +186,10 @@ ] }, "4": { - "x": 220, - "y": 486, - "w": 150, - "h": 210, + "x": 217, + "y": 483, + "w": 156, + "h": 216, "quads": [ [ [ @@ -320,10 +320,10 @@ ] }, "5": { - "x": 354, - "y": 1132, - "w": 92, - "h": 102, + "x": 351, + "y": 1129, + "w": 98, + "h": 108, "quads": [ [ [ @@ -382,10 +382,10 @@ ] }, "6": { - "x": 740, - "y": 1324, - "w": 38, - "h": 24, + "x": 737, + "y": 1321, + "w": 44, + "h": 30, "quads": [ [ [ diff --git a/fonts/ComicRelief-Bold.ttf b/fonts/ComicRelief-Bold.ttf new file mode 100755 index 0000000000000000000000000000000000000000..7b862465bcfe7b30ac1cfea6d91c93505c49e3eb GIT binary patch literal 93304 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

T-ME9^oZ)#% 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 max_w: + overflow = True + break + test = (current + " " + word).strip() + if measure(test) <= max_w: + current = test + else: + if current: + lines.append(current) + current = word + + if not overflow and current: + lines.append(current) + + return lines, overflow + + # ───────────────────────────────────────────── # PARSE output.txt # ───────────────────────────────────────────── def parse_translations(filepath): """ Parses output.txt → {bubble_id: translated_text}. - Only bubbles present in the file are returned. - Absent IDs are left completely untouched on the page. + Uses header line as column ruler to find the exact + char position of the TRANSLATED column. + Immune to commas, ellipses, spaces in translated text. """ translations = {} + header_pos = None + with open(filepath, "r", encoding="utf-8") as f: - for line in f: - line = line.rstrip("\n") - if not re.match(r"^\s*#\d+", line): - continue - parts = re.split(r" {2,}", line.strip()) - if len(parts) < 3: - continue - bubble_id = int(re.sub(r"[^0-9]", "", parts[0])) - translated = parts[-1].strip() - if translated.startswith("["): - continue - translations[bubble_id] = translated + lines = f.readlines() + + for raw_line in lines: + line = raw_line.rstrip("\n") + + if re.match(r"^BUBBLE\s+ORIGINAL", line): + m = re.search(r"TRANSLATED", line) + if m: + header_pos = m.start() + print(f" ℹ️ TRANSLATED column at char {header_pos}") + continue + + stripped = line.strip() + if re.match(r"^[─\-=]{3,}$", stripped): + continue + if stripped.startswith("✅") or stripped.startswith("Done"): + continue + if not re.match(r"^\s*#\d+", line): + continue + + m_id = re.match(r"^\s*#(\d+)", line) + if not m_id: + continue + bubble_id = int(m_id.group(1)) + + if header_pos is not None and len(line) > header_pos: + translated = line[header_pos:].strip() + else: + parts = re.split(r" {2,}", stripped) + translated = parts[-1].strip() if len(parts) >= 3 else "" + + if not translated or translated.startswith("["): + print(f" ⚠️ #{bubble_id}: no translation found") + continue + + translations[bubble_id] = translated print(f" ✅ {len(translations)} bubble(s) to translate: " f"{sorted(translations.keys())}") @@ -67,11 +139,6 @@ def load_bubble_boxes(filepath): # SAMPLE BACKGROUND COLOR # ───────────────────────────────────────────── def sample_bubble_background(cv_image, bubble_data): - """ - Samples the dominant background color inside the bbox - by averaging the brightest 10% of pixels. - Returns (B, G, R). - """ x = max(0, bubble_data["x"]) y = max(0, bubble_data["y"]) x2 = min(cv_image.shape[1], x + bubble_data["w"]) @@ -92,21 +159,9 @@ def sample_bubble_background(cv_image, bubble_data): # ───────────────────────────────────────────── # ERASE ORIGINAL TEXT -# Fills the tight OCR bbox with the sampled -# background color. No extra expansion — -# the bbox from bubbles.json is already the -# exact size of the red squares. # ───────────────────────────────────────────── def erase_bubble_text(cv_image, bubble_data, bg_color=(255, 255, 255)): - """ - Fills the bubble bounding box with bg_color. - - Args: - cv_image : BGR numpy array (modified in place) - bubble_data : Dict with 'x','y','w','h' - bg_color : (B,G,R) fill color - """ img_h, img_w = cv_image.shape[:2] x = max(0, bubble_data["x"]) y = max(0, bubble_data["y"]) @@ -116,14 +171,61 @@ def erase_bubble_text(cv_image, bubble_data, # ───────────────────────────────────────────── -# FIT FONT SIZE +# LINE HEIGHT (tight) +# +# Uses actual ascender+descender of the font +# at the given size, with a minimal 1px gap. +# Much tighter than the old flat "+2" approach. # ───────────────────────────────────────────── +def get_line_height(draw, font): + """ + Returns the line height in pixels for the given font. + Measured from actual glyph bounds of "Ay" (covers + ascenders and descenders) plus 1px breathing room. + """ + bb = draw.textbbox((0, 0), "Ay", font=font) + return (bb[3] - bb[1]) + 1 + + +# ───────────────────────────────────────────── +# FIT FONT SIZE (dynamic ceiling, word-wrap) +# +# max_size is derived from the box itself: +# min(MAX_FONT_CAP, inner_h) +# so a tall box can use a large font and a +# small box won't waste iterations on huge sizes. +# +# Rejects a size if: +# • any single word is wider than inner_w, OR +# • total wrapped height exceeds inner_h +# ───────────────────────────────────────────── +MAX_FONT_CAP = 120 # absolute ceiling across all boxes + def fit_font_size(draw, text, max_w, max_h, font_path, - min_size=7, max_size=48): + min_size=7): """ Finds the largest font size where word-wrapped text - fits inside (max_w × max_h). + fits inside max_w × max_h with NO mid-word breaking. + + max_size is computed dynamically as min(MAX_FONT_CAP, max_h) + so the search always starts from a sensible upper bound + relative to the actual box height. + + Args: + draw : ImageDraw instance + text : Full text string + max_w : Available width in pixels + max_h : Available height in pixels + font_path : Path to .ttf (or None for PIL default) + min_size : Minimum font pt (default: 7) + + Returns: + (font, lines) """ + # Dynamic ceiling: no point trying a font taller than the box + max_size = min(MAX_FONT_CAP, max_h) + max_size = max(max_size, min_size) # safety: never below min + best_font = None best_lines = [text] @@ -134,38 +236,48 @@ def fit_font_size(draw, text, max_w, max_h, font_path, except Exception: font = ImageFont.load_default() - words, lines, current = text.split(), [], "" - for word in words: - test = (current + " " + word).strip() - bb = draw.textbbox((0, 0), test, font=font) - if (bb[2] - bb[0]) <= max_w: - current = test - else: - if current: - lines.append(current) - current = word - if current: - lines.append(current) + lines, overflow = wrap_text_words(draw, text, max_w, font) - lh = draw.textbbox((0, 0), "Ay", font=font) - line_h = (lh[3] - lh[1]) + 2 - if line_h * len(lines) <= max_h: + if overflow: + continue # a word is wider than the box → too big + + line_h = get_line_height(draw, font) + total_h = line_h * len(lines) + + if total_h <= max_h: best_font = font best_lines = lines - break + break # largest size that fits — done - return best_font or ImageFont.load_default(), best_lines + # Guaranteed fallback at min_size + if best_font is None: + try: + best_font = (ImageFont.truetype(font_path, min_size) + if font_path else ImageFont.load_default()) + except Exception: + best_font = ImageFont.load_default() + best_lines, _ = wrap_text_words( + draw, text, max_w, best_font) + if not best_lines: + best_lines = [text] + + return best_font, best_lines # ───────────────────────────────────────────── # RENDER TEXT INTO BUBBLE +# +# Text is centered both horizontally and +# vertically inside the padded bbox. +# Line height uses get_line_height() (tight). # ───────────────────────────────────────────── def render_text_in_bubble(pil_image, bubble_data, text, - font_path, padding=8, + font_path, padding=6, font_color=(0, 0, 0)): """ - Renders translated text centered inside the tight bbox. - Font auto-sizes to fill the same w×h the original occupied. + Renders translated text centered inside the bbox. + Font auto-sizes to fill the box as much as possible. + Word-wrap only — no mid-word hyphens. """ x, y = bubble_data["x"], bubble_data["y"] w, h = bubble_data["w"], bubble_data["h"] @@ -174,17 +286,20 @@ def render_text_in_bubble(pil_image, bubble_data, text, inner_w = max(1, w - padding * 2) inner_h = max(1, h - padding * 2) - font, lines = fit_font_size(draw, text, inner_w, inner_h, - font_path) + font, lines = fit_font_size( + draw, text, inner_w, inner_h, font_path + ) - lh_bb = draw.textbbox((0, 0), "Ay", font=font) - line_h = (lh_bb[3] - lh_bb[1]) + 2 + line_h = get_line_height(draw, font) total_h = line_h * len(lines) + + # Center block vertically start_y = y + padding + max(0, (inner_h - total_h) // 2) for line in lines: - lb = draw.textbbox((0, 0), line, font=font) - line_w = lb[2] - lb[0] + bb = draw.textbbox((0, 0), line, font=font) + line_w = bb[2] - bb[0] + # Center each line horizontally start_x = x + padding + max(0, (inner_w - line_w) // 2) draw.text((start_x, start_y), line, font=font, fill=font_color) @@ -216,19 +331,9 @@ def render_translated_page( font_path = FONT_PATH, font_fallback = FONT_FALLBACK, font_color = FONT_COLOR, - text_padding = 8, + text_padding = 6, debug = False, ): - """ - Pipeline: - 1. Parse translations (only present IDs processed) - 2. Load bubble boxes from bubbles.json - 3. Cross-check IDs — absent ones left untouched - 4. Sample background color per bubble - 5. Erase original text (fill tight bbox) - 6. Render translated text sized to fit the bbox - 7. Save output - """ print("=" * 55) print(" MANGA TRANSLATOR — RENDERER") print("=" * 55) @@ -271,7 +376,7 @@ def render_translated_page( print("\n🎨 Sampling backgrounds...") bg_colors = {} for bid in to_process: - bg_bgr = sample_bubble_background( + bg_bgr = sample_bubble_background( cv_image, bubble_boxes[bid]) bg_colors[bid] = bg_bgr bg_rgb = (bg_bgr[2], bg_bgr[1], bg_bgr[0]) @@ -344,9 +449,9 @@ if __name__ == "__main__": output_image = "page_translated.png", translations_file = "output.txt", bubbles_file = "bubbles.json", - font_path = "font.ttf", + font_path = "fonts/ComicRelief-Regular.ttf", font_fallback = "/System/Library/Fonts/Helvetica.ttc", font_color = (0, 0, 0), - text_padding = 8, + text_padding = 6, debug = True, - ) \ No newline at end of file + ) diff --git a/manga-translator.py b/manga-translator.py index f997515..775a154 100644 --- a/manga-translator.py +++ b/manga-translator.py @@ -48,57 +48,88 @@ def is_sound_effect(text): # ───────────────────────────────────────────── -# TOKEN FILTER +# TOKEN CLASSIFIER +# +# Three categories: +# "alpha" — contains at least one letter (È, é, A-Z etc.) +# "punct" — 2+ chars, all punctuation (... ?? !! ?! …) +# "noise" — everything else (single symbols, pure digits, +# low-confidence, sound effects) +# +# Both "alpha" and "punct" tokens are KEPT: +# - "alpha" → contributes to translation text AND bbox +# - "punct" → contributes to bbox only (not translation text) +# unless it immediately follows alpha text +# in the same cluster (handled in clustering) # ───────────────────────────────────────────── -def should_keep_token(text, confidence, confidence_threshold, - min_text_length, filter_sound_effects): +def classify_token(text, confidence, confidence_threshold, + min_text_length, filter_sound_effects): """ - Returns (keep: bool, reason: str). + Returns one of: "alpha" | "punct" | "noise" + + "alpha" : has at least one letter → keep for text + bbox + "punct" : 2+ chars, no letters → keep for bbox only + "noise" : drop entirely Rules: - 1. Drop if confidence below threshold - 2. Drop if shorter than min_text_length - 3. Drop pure digit strings - 4. Drop single non-alpha characters - 5. Drop sound effects if filter enabled - 6. Keep everything else + 1. Drop if confidence below threshold → noise + 2. Drop if shorter than min_text_length → noise + 3. Drop pure digit strings → noise + 4. Drop single non-alpha characters → noise + 5. Drop sound effects if filter enabled → noise + 6. 2+ char string with no letters → punct + 7. Has at least one letter → alpha """ cleaned = text.strip() if confidence < confidence_threshold: - return False, f"low confidence ({confidence:.2f})" + return "noise" if len(cleaned) < min_text_length: - return False, "too short" + return "noise" if re.fullmatch(r"\d+", cleaned): - return False, "pure digits" + return "noise" if len(cleaned) == 1 and not cleaned.isalpha(): - return False, "single symbol" + return "noise" if filter_sound_effects and is_sound_effect(cleaned): - return False, "sound effect" + return "noise" - return True, "ok" + # 2+ chars with no letters at all → punctuation token + # Examples: "..." "??" "!!" "?!" "…" ".." + if not any(ch.isalpha() for ch in cleaned): + return "punct" + + return "alpha" + + +def should_keep_token(text, confidence, confidence_threshold, + min_text_length, filter_sound_effects): + """ + Backward-compatible wrapper. + Returns (keep: bool, category: str). + """ + cat = classify_token(text, confidence, confidence_threshold, + min_text_length, filter_sound_effects) + return cat != "noise", cat # ───────────────────────────────────────────── # BOUNDING BOX # -# Rules (match the red square exactly): -# Width = widest single quad's width -# Height = sum of ALL quad heights stacked -# X = centered on the widest quad's CX -# Y = topmost Y1 of all quads +# Width = widest single quad's width +# Height = sum of ALL quad heights stacked +# X = centered on the widest quad's CX +# Y = topmost Y1 of all quads # ───────────────────────────────────────────── def get_cluster_bbox_from_ocr(ocr_bboxes, image_shape, padding_px=10): """ Computes the bubble erase bbox: - 1. Per-quad: measure w, h, cx for every OCR detection + 1. Per-quad: measure w, h, cx 2. Width = width of the widest single quad 3. Height = sum of every quad's height 4. X = widest quad's center ± max_w/2 - (all lines sit symmetrically inside) - 5. Y = top of topmost quad, bottom = Y + total_h + 5. Y = top of topmost quad → Y + total_h Args: ocr_bboxes : List of EasyOCR quad bboxes @@ -113,7 +144,6 @@ def get_cluster_bbox_from_ocr(ocr_bboxes, image_shape, if not ocr_bboxes: return 0, 0, 0, 0 - # ── Per-quad metrics ────────────────────────────────────────── quad_metrics = [] for quad in ocr_bboxes: xs = [pt[0] for pt in quad] @@ -121,30 +151,23 @@ def get_cluster_bbox_from_ocr(ocr_bboxes, image_shape, qx1, qx2 = min(xs), max(xs) qy1, qy2 = min(ys), max(ys) quad_metrics.append({ - "x1" : qx1, - "x2" : qx2, - "y1" : qy1, - "y2" : qy2, + "x1" : qx1, "x2" : qx2, + "y1" : qy1, "y2" : qy2, "w" : qx2 - qx1, "h" : qy2 - qy1, "cx" : (qx1 + qx2) / 2.0, }) - # ── Width: widest single quad ───────────────────────────────── widest = max(quad_metrics, key=lambda q: q["w"]) max_w = widest["w"] center_x = widest["cx"] + total_h = sum(q["h"] for q in quad_metrics) - # ── Height: sum of all quad heights ────────────────────────── - total_h = sum(q["h"] for q in quad_metrics) - - # ── Box edges ───────────────────────────────────────────────── box_x1 = center_x - max_w / 2.0 box_x2 = center_x + max_w / 2.0 box_y1 = min(q["y1"] for q in quad_metrics) box_y2 = box_y1 + total_h - # ── Padding + clamp ─────────────────────────────────────────── x1 = max(0, box_x1 - padding_px) y1 = max(0, box_y1 - padding_px) x2 = min(img_w, box_x2 + padding_px) @@ -171,17 +194,6 @@ def boxes_are_close(bbox_a, bbox_b, proximity_px=80): return not (ax2 < bx1 or bx2 < ax1 or ay2 < by1 or by2 < ay1) -# ───────────────────────────────────────────── -# TEXT LINE FILTER -# ───────────────────────────────────────────── -def has_translatable_content(text): - """ - True if text contains at least one letter. - ch.isalpha() handles È, é, ñ, ü etc. - """ - return any(ch.isalpha() for ch in text) - - # ───────────────────────────────────────────── # POST-CLUSTER MERGE (Union-Find) # ───────────────────────────────────────────── @@ -270,11 +282,17 @@ def cluster_into_bubbles(ocr_results, image_shape, Pass 1 — DBSCAN on center points Pass 2 — Bounding-box proximity merge + Token categories per cluster: + "alpha" tokens → translation text + bbox + "punct" tokens → bbox only (e.g. "..." after "HN") + "noise" tokens → already filtered before this function + Bbox: widest-line width (centered) × stacked height. - All quads contribute to bbox regardless of content. Returns: - bubble_dict : cluster_id → list of translatable text lines + bubble_dict : cluster_id → list of text lines + (alpha tokens only, punct appended + to last alpha line if spatially adjacent) bbox_dict : cluster_id → (x1, y1, x2, y2) ocr_quads : cluster_id → list of ALL raw EasyOCR quads """ @@ -303,6 +321,8 @@ def cluster_into_bubbles(ocr_results, image_shape, raw_clusters.setdefault(label, []) raw_quads.setdefault(label, []) bbox, text, _ = ocr_results[idx] + # Store (cy, cx, text, category) + cat = ocr_results[idx][2] # confidence stored as category below raw_clusters[label].append( (centers[idx][1], centers[idx][0], text)) raw_quads[label].append(bbox) @@ -335,15 +355,40 @@ def cluster_into_bubbles(ocr_results, image_shape, items_sorted = sorted(items, key=lambda t: t[0]) - text_lines = [ - text for _, _, text in items_sorted - if has_translatable_content(text) - ] + # ── Build text lines ────────────────────────────────────── + # Alpha tokens become text lines. + # Punct tokens (... ?? etc.) are appended to the + # nearest preceding alpha token on the same Y level. + alpha_lines = [] # (cy, text) for alpha tokens + punct_tokens = [] # (cy, text) for punct tokens + + for cy, cx, text in items_sorted: + if any(ch.isalpha() for ch in text): + alpha_lines.append((cy, text)) + else: + punct_tokens.append((cy, text)) + + # Append each punct token to the closest alpha line by Y + for pcy, ptext in punct_tokens: + if alpha_lines: + # Find alpha line with closest cy + closest_idx = min( + range(len(alpha_lines)), + key=lambda k: abs(alpha_lines[k][0] - pcy) + ) + cy_a, text_a = alpha_lines[closest_idx] + alpha_lines[closest_idx] = (cy_a, text_a + ptext) + # If no alpha lines at all, punct still contributes + # to bbox but not to translation text + + text_lines = [t for _, t in alpha_lines] + + # Fallback: if no alpha at all, keep everything if not text_lines: text_lines = [text for _, _, text in items_sorted] bubble_dict[i] = text_lines - ocr_quads[i] = quads + ocr_quads[i] = quads # ALL quads → full bbox bbox_dict[i] = get_cluster_bbox_from_ocr( quads, image_shape, padding_px=bbox_padding @@ -353,7 +398,8 @@ def cluster_into_bubbles(ocr_results, image_shape, print(f" Cluster #{i}: {len(quads)} quad(s) " f"bbox=({int(b[0])},{int(b[1])})→" f"({int(b[2])},{int(b[3])}) " - f"w={int(b[2]-b[0])} h={int(b[3]-b[1])}") + f"w={int(b[2]-b[0])} h={int(b[3]-b[1])} " + f"text={text_lines}") return bubble_dict, bbox_dict, ocr_quads @@ -519,15 +565,17 @@ def translate_manga_text( for bbox, text, confidence in results: cleaned = text.strip() - keep, reason = should_keep_token( + keep, category = should_keep_token( cleaned, confidence, confidence_threshold, min_text_length, filter_sound_effects ) if keep: filtered.append((bbox, cleaned, confidence)) + if category == "punct": + print(f" ✔ Punct kept: '{cleaned}'") else: - if reason == "sound effect": + if category == "sound effect": print(f" 🔇 SFX skipped: '{cleaned}'") skipped += 1 @@ -656,6 +704,6 @@ if __name__ == "__main__": filter_sound_effects = True, quality_threshold = 0.5, upscale_factor = 2.5, - bbox_padding = 0, + bbox_padding = 3, debug = True, - ) \ No newline at end of file + )