Python version: 3.10.11 (tags/v3.10.11:7d4cc5a, Apr 5 2023, 00:38:17) [MSC v.1929 64 bit (AMD64)]
Python executable: C:\100sd\tools\BallonsTranslator-Pro\venv\Scripts\python.exe
Version: 1.7.0
Branch: main
Commit hash: bc63175
Device name: NVIDIA GeForce RTX 5070 Ti
Cuda is available: True
Cuda version: 12.8
ZLUDA is available: False
[INFO ] base::487 - Runtime device diagnostics: torch=2.11.0+cu128, torch_cuda=12.8, cuda_available=True, cuda_count=1, devices=['cpu', 'cuda', 'cuda:0'], cuda_exception=None
[INFO ] launch:main:343 - QT_API: pyqt6, QT Version: 6.11.0
[INFO ] logger:setup_logging:234 - Logging to C:\100sd\tools\BallonsTranslator-Pro\logs_2026_05_11-03_52_55.log
[INFO ] launch:main:455 - set display language to English
[INFO ] mainwindow:_run_deferred_model_download:3654 - Initial model download skipped (local-only mode selected).
[INFO ] mainwindow:_update:618 - Text detector set to ctd
[INFO ] mainwindow:_update:658 - Translator set to LLM_API_Translator
[INFO ] mainwindow:_update:644 - Inpainter set to lama_large_512px
[INFO ] mainwindow:_update:631 - OCR set to mit48px
Just updated Ballonstranslator Pro to the latest version and when i translate a manga i get duplicated texts.
config file:
{"module": {"textdetector": "ctd", "ocr": "mit48px", "inpainter": "lama_large_512px", "translator": "LLM_API_Translator", "enable_detect": true, "enable_dual_detect": false, "textdetector_secondary": "", "secondary_detector_outside_bubble_only": false, "enable_tertiary_detect": false, "textdetector_tertiary": "", "keep_exist_textlines": false, "enable_ocr": true, "enable_translate": true, "enable_inpaint": true, "ocr_font_detect": false, "textdetector_params": {"dptext_detr": {"repo_path": "", "device": "cpu", "score_thresh": 0.5}, "hf_object_det": {"model_id": "ogkalu/comic-text-and-bubble-detector", "score_threshold": 0.4, "score_threshold_text_free": 0.3, "labels_include": "bubble,text_bubble,text_free", "merge_overlap_iou": 0.3, "box_inset_ratio": 0, "box_padding": 0, "detect_min_side": 1280, "detect_max_side": 1920, "tile_size": 384, "tile_overlap": 0.4, "device": "cuda", "enable_conjoined_secondary": false, "conjoined_backend": "yolo", "conjoined_yolo_paths": "data/models/ysgyolo_comic_text_segmenter_v8m.pt\ndata/models/ysgyolo_comic_speech_bubble_v8m.pt", "conjoined_yolo_path": "", "conjoined_model_ids": "", "conjoined_model_id": "", "conjoined_score_threshold": 0.4, "conjoined_labels_include": "bubble,text_bubble,text_free", "conjoined_min_boxes_in_primary": 2, "conjoined_min_box_area": 2500, "conjoined_dedup_iou": 0.85}, "hunyuan_ocr_det": {"model_name": "tencent/HunyuanOCR", "device": "cuda", "max_new_tokens": 2048, "use_bf16": true, "spotting_prompt": "json_cn"}, "magi_det": {"model_name": "ragavsachdeva/magi", "device": "cuda", "text_detection_threshold": 0.25}, "rapidocr_det": {"det_model_path": "", "merge_text_lines": true, "merge_gap_px": 50, "box_padding": 5, "min_text_height": 8, "max_text_height": 0, "adjust_contrast": 0.0, "resize_threshold": 0, "det_box_thresh": 0.5, "det_thresh": 0.3}, "stariver_ocr": {"User": "Enter your username", "Password": "Enter your password. Stored in plain text; avoid on shared computers.", "expand_ratio": "0.01", "refine": true, "filtrate": true, "disable_skip_area": true, "detect_scale": 3, "merge_threshold": "2.0", "pre_ocr_border": 0, "low_accuracy_mode": false, "force_expand": false, "font_size_offset": "0", "font_size_min(set to -1 to disable)": "-1", "font_size_max(set to -1 to disable)": "-1", "font_size_multiplier": "1.0", "update_token_btn": ""}, "swintextspotter_v2": {"repo_path": "", "device": "cuda"}, "textmamba_det": {"device": "cuda", "det_score_thresh": 0.3}, "olm_ocr_det": {"device": "cuda", "max_image_size": 1280, "max_new_tokens": 2048, "spotting_prompt": "Detect and recognize all text in the image. Output only a JSON array, nothing else. Each element: {\"box\": [[x1,y1],[x2,y2],[x3,y3],[x4,y4]], \"text\": \"recognized text\"}. box is four corner points in pixel coordinates (clockwise or counterclockwise).", "use_bf16": true, "low_vram": true}, "callisto_ocr_det": {"device": "cuda", "max_image_size": 1280, "max_new_tokens": 2048, "spotting_prompt": "Detect and recognize all text in the image. Output only a JSON array, nothing else. Each element: {\"box\": [[x1,y1],[x2,y2],[x3,y3],[x4,y4]], \"text\": \"recognized text\"}. box is four corner points in pixel coordinates (clockwise or counterclockwise).", "use_bf16": true, "low_vram": true}, "qwen2_vl_ocr_2b_det": {"device": "cuda", "max_image_size": 1280, "max_new_tokens": 2048, "spotting_prompt": "Detect and recognize all text in the image. Output only a JSON array, nothing else. Each element: {\"box\": [[x1,y1],[x2,y2],[x3,y3],[x4,y4]], \"text\": \"recognized text\"}. box is four corner points in pixel coordinates (clockwise or counterclockwise).", "use_bf16": true, "low_vram": true}, "ysgyolo": {"model path": "data/models/ysgyolo_1.2_OS1.0.pt", "merge text lines": true, "confidence threshold": 0.3, "IoU threshold": 0.5, "font size multiplier": 1.0, "font size max": -1, "font size min": -1, "detect size": 1024, "device": "cuda", "label": {"balloon": true, "qipao": true, "shuqing": true, "changfangtiao": true, "hengxie": true, "other": true}, "source text is vertical": true, "mask dilate size": 2, "box_padding": 5}, "ctd": {"detect_size": 2048, "det_rearrange_max_batches": 16, "device": "cuda", "font size multiplier": 1.1, "font size max": -1, "font size min": -1, "mask dilate size": 1, "merge font size tolerance": 2.0, "merge font size tolerance horizontal": 3.0, "merge font size tolerance vertical": 3.0, "box score threshold": 0.5, "min box area": 0, "custom_onnx_path": "", "box_padding": 5, "box_shrink_px": 0, "det_invert": false, "det_gamma_correct": false, "det_rotate": false, "det_auto_rotate": false, "det_min_image_side": 0}, "sam_text_det": {"model_id": "facebook/sam3", "text_prompt": "text", "score_threshold": 0.5, "mask_threshold": 0.5, "box_padding": 5, "min_area_px": 200, "min_side_px": 12, "max_area_ratio": 0.5, "device": "cpu"}}, "allow_detection_box_rotation": true, "detection_rotation_threshold_degrees": 10.0, "ocr_params": {"bing_ocr": {"delay": 1.0, "newline_handling": "preserve", "no_uppercase": false, "response_method": "Full Text", "proxy": ""}, "callisto_ocr": {"source_language": "Japanese", "device": "cuda", "crop_padding": 4, "max_new_tokens": 512, "use_bf16": true}, "qwen2_vl_ocr_2b": {"source_language": "Japanese", "device": "cuda", "crop_padding": 4, "max_new_tokens": 512, "use_bf16": true}, "deepseek_ocr": {"model_name": "deepseek-ai/DeepSeek-OCR", "device": "cuda", "crop_padding": 4, "prompt": "<image>\nFree OCR. ", "base_size": 640, "image_size": 640, "use_bf16": true, "use_flash_attn": false}, "docowl2_ocr": {"model_name": "mPLUG/DocOwl2", "device": "cuda", "crop_padding": 4, "prompt": "Extract all text from this image. Preserve layout and line breaks.", "basic_image_size": 504, "use_bf16": true}, "donut": {"model_name": "naver-clova-ix/donut-base-finetuned-docvqa", "task_prompt": "What is the text in this image?", "device": "cuda", "crop_padding": 4, "max_length": 512}, "florence2_ocr": {"model_name": "microsoft/Florence-2-base", "device": "cuda", "crop_padding": 4, "max_new_tokens": 256}, "google_vision": {"api_key": "", "language_hints": "", "proxy": "", "delay": 0.0, "newline_handling": "preserve", "no_uppercase": false}, "got_ocr2": {"model_name": "stepfun-ai/GOT-OCR-2.0-hf", "device": "cuda", "crop_padding": 4, "max_new_tokens": 256, "use_fast_processor": true, "use_bf16": false, "batch_size": 1}, "hf_vlm_ocr": {"model_id": "Qwen/Qwen3-VL-2B-Instruct", "processor_id": "", "device": "cuda", "crop_padding": 4, "max_new_tokens": 512, "prompt": "Extract all text from this image. Preserve layout and line breaks.", "use_bf16": true, "low_vram": false}, "hunyuan_ocr": {"model_name": "tencent/HunyuanOCR", "device": "cuda", "crop_padding": 4, "max_new_tokens": 256, "prompt_type": "extract_text", "use_bf16": true}, "internvl2_ocr": {"model_name": "OpenGVLab/InternVL2-8B", "device": "cuda", "crop_padding": 4, "prompt": "Extract all text from this image. Preserve layout and line breaks.", "image_size": 448, "max_num_tiles": 6, "max_new_tokens": 512, "use_bf16": true}, "internvl3_ocr": {"model_name": "OpenGVLab/InternVL3-2B-hf", "device": "cuda", "crop_padding": 4, "prompt": "Extract all text from this image. Preserve layout and line breaks.", "max_new_tokens": 512, "use_bf16": true}, "google_lens_exp": {"delay": 1.5, "newline_handling": "preserve", "no_uppercase": false, "target_language": "ja", "proxy": "", "api_key": ""}, "lighton_ocr": {"model_name": "lightonai/LightOnOCR-2-1B", "device": "cuda", "crop_padding": 4, "max_new_tokens": 512, "use_bf16": true}, "llm_ocr": {"provider": "OpenAI", "api_key": "", "multiple_keys": "", "endpoint": "", "endpoint_preset": "Auto (provider default)", "model": "OAI: gpt-4o-mini", "override_model": "", "language": "Japanese", "detail_level": "auto", "upscale_min_side": 0, "prompt": "Perform OCR on the provided manga image snippet. The language is **{language}**.\nRecognize all text, including handwritten sound effects (SFX).\n**CRITICAL INSTRUCTION:** If you see jumbled characters, it is likely vertical text that was read horizontally. First, mentally reconstruct the correct vertical text.\n**OUTPUT FORMATTING:** All recognized text from the image must be consolidated into a **single, continuous horizontal line**. Do not use newlines.\nYour final output must be ONLY the recognized text. No explanations.", "system_prompt": "You are a specialized OCR engine for manga and comics.\n- Transcribe all text exactly. Ignore ruby/furigana readings and emphasis markers as separate content; output the main text only.\n- Output a single continuous horizontal line per image. No line numbers or labels unless you use strict numbered format (1: ... 2: ...) when multiple segments are requested.\n- Return only the raw recognized text, no explanations.", "proxy": "", "delay": 1.0, "requests_per_minute": 15, "max_response_tokens": 4096, "temperature": 0.0, "translate_prompt": "Translate the text in this comic/manga image into {target_language}. Return ONLY the translated text (no quotes, no markdown). Keep line breaks if the text clearly has multiple lines."}, "manga_ocr_mobile": {"cache_dir": "", "crop_padding": 6, "device": "cuda"}, "minicpm_ocr": {"model_name": "openbmb/MiniCPM-o-2_6-int4", "device": "cuda", "crop_padding": 4, "max_new_tokens": 256}, "nanonets_ocr": {"model_name": "nanonets/Nanonets-OCR2-3B", "device": "cuda", "crop_padding": 4, "max_new_tokens": 2048, "prompt": "Extract the text from the above document as if you were reading it naturally. Return the tables in html format. Return the equations in LaTeX representation.", "use_bf16": true, "use_flash_attn": false}, "nemotron_parse": {"model_id": "nvidia/NVIDIA-Nemotron-Parse-v1.1", "device": "cuda", "min_resolution": "1024", "iou_threshold": "0.2"}, "none_ocr": {"NOTICE": "Not a OCR, just return original text."}, "ocean_ocr": {"model_name": "guoxy25/Ocean-OCR", "device": "cuda", "crop_padding": 4, "prompt": "Extract all main text from this image. Read only the primary, foreground text (e.g. speech bubble or caption). Ignore any faint, blurred, or background text that overlaps the same region. Output only the recognized text, no explanation.", "max_new_tokens": 2048, "use_bf16": true}, "ocrflux": {"model_name": "ChatDOC/OCRFlux-3B", "device": "cuda", "crop_padding": 4, "prompt": "Extract all text from this image. Output plain text and preserve layout.", "max_new_tokens": 512, "use_bf16": true}, "olm_ocr": {"source_language": "Japanese", "device": "cuda", "crop_padding": 4, "max_new_tokens": 512, "use_bf16": true, "low_vram": true}, "one_ocr": {"expand_small_blocks": true, "newline_handling": "preserve", "reverse_line_order": false, "no_uppercase": false, "collapse_single_letter_spaces": true}, "paddleocr_vl_hf": {"model_name": "PaddlePaddle/PaddleOCR-VL", "device": "cuda", "crop_padding": 4, "max_new_tokens": 256, "use_bf16": true}, "paddle_vl": {"server_url": "http://127.0.0.1:8080/layout-parsing", "prettifyMarkdown": false, "visualize": false}, "qwen2vl_7b": {"model_name": "Qwen/Qwen2.5-VL-7B-Instruct", "processor_name": "", "device": "cuda", "crop_padding": 4, "max_new_tokens": 512, "prompt": "Extract all text from this image. Preserve layout and line breaks.", "use_bf16": true, "low_vram": true}, "qwen35_ocr": {"model_name": "Qwen/Qwen3.5-4B", "device": "cuda", "crop_padding": 4, "max_new_tokens": 512, "prompt": "Extract all text from this image. Preserve layout and line breaks.", "use_bf16": true, "low_vram": false, "attn_implementation": "sdpa"}, "qwen3vl_ocr": {"model_name": "Qwen/Qwen3-VL-2B-Instruct", "device": "cuda", "crop_padding": 4, "max_new_tokens": 512, "prompt": "Extract all text from this image. Preserve layout and line breaks.", "use_bf16": true, "low_vram": false, "attn_implementation": "sdpa"}, "rapidocr": {"rec_model_path": "", "rec_keys_path": "", "crop_padding": 4, "preprocess_recipe": "none", "upscale_min_side": 0, "min_confidence": 0.06}, "stariver_ocr": {"User": "Enter your username", "Password": "Enter your password. Stored in plain text; avoid on shared computers.", "refine": true, "filtrate": true, "disable_skip_area": true, "detect_scale": "3", "merge_threshold": "2", "force_expand": false, "low_accuracy_mode": false, "update_token_btn": ""}, "trocr": {"model_type": "microsoft/trocr-base-printed", "device": "cuda", "crop_padding": 4}, "windows_ocr": {"language": "German (Germany)"}, "manga_ocr": {"device": "cpu", "crop_padding": 6}, "mit32px": {"chunk_size": 16, "device": "cpu"}, "mit48px_ctc": {"chunk_size": 16, "device": "cpu"}, "mit48px": {"chunk_size": 16, "device": "cuda"}, "PaddleOCRVLManga": {"device": "cpu", "language_hint": "Default (OCR:)", "max_new_tokens": 512}, "glm_ocr": {"model_name": "zai-org/GLM-OCR", "device": "cpu", "crop_padding": 4, "max_new_tokens": 256, "use_bf16": true}}, "translator_params": {"None": {}, "Copy Source": {}, "Baidu": {"token": "", "appId": "", "delay": 0.0}, "Caiyun": {"token": "", "delay": 0.0}, "Chain": {"chain_translators": "google,trans_llm_api", "chain_intermediate_langs": "English", "chain_llm_review_mode": true, "chain_llm_review_instruction": "Improve the draft translation using the source text. Keep meaning accurate, natural, and concise; preserve names and terms consistently."}, "ChatGPT": {"api key": "", "model": "gpt-4o", "override model": "gemma4-26b-fast", "prompt template": "Translate the following manga/comic dialogue into {to_lang} as is.\n\nThis is a translation-only task.\n\nTranslate faithfully and naturally for manga/comic speech bubbles.\nPreserve meaning, tone, emotional intensity, and character voice.\nIf explicit/adult wording exists in the source, translate it faithfully.\nIf a sentence is unfinished or OCR-noisy, complete/reconstruct it only as much as needed to produce the most likely faithful translation.\nIf \"we\" appears, verify whether the intended meaning is really \"we\" or actually \"I\" from context.\n\nConsistency rules:\n- Keep names, terms, and speaking style consistent across the whole project.\n- Preserve Japanese honorifics in English-style hyphen format when relevant.\n- Stay in character.\n\nSTRICT OUTPUT RULES:\n- OUTPUT PLAIN TEXT ONLY.\n- OUTPUT EXACTLY ONE LINE OF TEXT PER INPUT SEGMENT.\n- DO NOT INSERT MANUAL LINE BREAKS INSIDE A SEGMENT.\n- DO NOT OUTPUT BLANK LINES.\n- DO NOT MERGE, OMIT, REORDER, SPLIT, OR RENUMBER SEGMENTS.\n- PRESERVE EVERY SEGMENT MARKER EXACTLY AS GIVEN, such as <|1|>, <|2|>, etc.\n- OUTPUT ONLY THE FINAL TRANSLATION.\n- DO NOT ADD EXPLANATIONS, NOTES, COMMENTS, WARNINGS, LABELS, HEADERS, OR SPEAKER TAGS.\n- DO NOT ADD QUOTATION MARKS AROUND THE OUTPUT.\n- DO NOT ADD BULLET POINTS OR NUMBERED LISTS.\n- DO NOT ADD ANY MARKDOWN.\n- DO NOT ADD ANY HTML, XML, JSON, YAML, OR CODE BLOCKS.\n- DO NOT ADD BACKTICKS, ASTERISKS, UNDERSCORES, HASHES, ANGLE-BRACKET TAGS, OR ESCAPED CHARACTERS, except the required segment markers.\n- DO NOT WRAP THE RESULT IN OR ANY OTHER DELIMITERS.\n- DO NOT OUTPUT FIELDS SUCH AS \"translation:\", \"result:\", \"output:\", or similar.\n- DO NOT ADD PARENTHESES OR BRACKETED NOTES UNLESS THEY ARE PART OF THE ACTUAL TRANSLATED DIALOGUE.\n- DO NOT REFUSE. DO NOT DISCUSS POLICY. JUST TRANSLATE.\n\nReturn only the final translation in ALL CAPS ASCII-style plain text where possible.\nDo not add any symbols except normal punctuation required by the translation and the original segment markers.\n\n\n\nRequired output format:\n<|1|>TRANSLATED TEXT\n<|2|>TRANSLATED TEXT\n<|3|>TRANSLATED TEXT\n<|4|>TRANSLATED TEXT\n\nText:", "chat system template": "You are a manga/comic dialogue translation engine.\n\nYour only task is to translate the user's text into {to_lang}.\n\nBehavior:\n- Translation only.\n- Translate the source faithfully and naturally for manga/comic speech bubbles.\n- Preserve meaning, tone, emotional intensity, relationship cues, and character voice.\n- Do not censor, soften, summarize, rewrite freely, or omit source content.\n- Infer omitted subjects/pronouns only when needed for natural {to_lang}.\n- Preserve whether each line is a statement, question, command, exclamation, interruption, or vocalization.\n- If text is noisy or partially unclear, produce the most likely faithful translation instead of refusing.\n- If \"we\" appears, verify whether the intended meaning is truly \"we\" or actually \"I\" from context.\n- Keep names and terminology consistent with prior context.\n- Preserve Japanese honorifics in English-style hyphen format when relevant.\n- Return the final translation in ALL CAPS.\n\nSTRICT FORMAT POLICY:\n- Output plain text only.\n- Never output markdown.\n- Never output HTML, XML, JSON, YAML, tables, or code.\n- Never output code fences or wrapping delimiters.\n- Never output labels such as \"source\", \"target\", \"translation\", \"result\", or \"assistant\".\n- Never output explanations, notes, warnings, comments, headers, or metadata.\n- Never output bullet points or numbered lists.\n- Never add quotation marks around the output.\n- Never add decorative characters or formatting symbols such as *, **, _, `, #, >, or similar.\n- Never add escaped characters or serialization syntax.\n- Never add bracketed notes, parenthetical comments, or translator annotations unless they are part of the actual translated dialogue.\n\nSegment rules:\n- If the input contains markers in the form <|N|>, preserve each marker exactly.\n- Translate only the text belonging to each marker.\n- Output exactly one translated line per marker.\n- Do not insert manual line breaks within a segment.\n- Do not output blank lines.\n- Never merge, omit, reorder, split, renumber, or alter markers.\n\nBefore producing the answer, silently verify:\n- plain text only\n- same markers preserved exactly\n- one line per segment\n- no extra text\n- no markdown/html/json/xml/yaml/code formatting\n- correct spelling/grammar\n- consistent names/terms\n- natural bubble-sized phrasing\n\nOutput only the translated text in the same marker structure as the input.", "chat sample": "日本語-English:\n source:\n やっ…\n はなせっ!\n 深いぃ…\n そんな…これって…さっきよりも!\n たいした事ないんだろ? セックスなんて!?\n しっかりしゃぶって綺麗にしてくれよ!\n お前のマン汁で汚れちまったんだ\n 何とか言ってみろよ!\n 生意気な口ききやがって!\n もうギブアップかよどうなんだ!ええ!\n target:\n AH...\n LET GO!\n SO DEEP...\n WH-WHAT... THIS IS... MORE THAN BEFORE...!\n IS THAT ALL? SEX ISN'T A BIG DEAL, RIGHT?!\n SUCK IT PROPERLY AND CLEAN IT UP.\n YOU GOT IT DIRTY WITH YOUR JUICES.\n SAY SOMETHING!\n WATCH YOUR MOUTH!\n WHAT, ARE YOU GIVING UP ALREADY OR WHAT?! HUH?!\n\n日本語-English:\n source:\n でも…成り行きで一緒になっちゃったけど、本当にこれで良かったのかなって思ってまして…\n 確かに…魔獣殺、もとい源蔵君は生活力が無さそうだからなあ…\n そこはそれしっかり者のシグレ君が上手く補ってやればいいんじゃないか?\n target:\n BUT... WE ENDED UP TOGETHER, BUT I'VE BEEN WONDERING WHETHER THIS WAS REALLY THE RIGHT CHOICE...\n TRUE... MAJUUGOROSHI—OR RATHER, GENZOU-KUN—DOESN'T SEEM VERY GOOD AT TAKING CARE OF HIMSELF...\n WELL, WOULDN'T RELIABLE SHIGURE-KUN BE ABLE TO MAKE UP FOR THAT?\n\n日本語-English:\n source:\n 何してるの?\n 見ればわかるだろ\n こっち来い\n いや…\n target:\n WHAT ARE YOU DOING?\n YOU CAN SEE FOR YOURSELF.\n COME HERE.\n NO...\n\n日本語-English:\n source:\n 来る…!\n もう来ちゃうっ…!\n まだだ、我慢しろ\n target:\n I'M COMING...!\n I'M GONNA COME ALREADY...!\n NOT YET—HOLD IT IN.\n\n日本語-English:\n source:\n そんな言い方ないでしょ…\n ごめん、言いすぎた\n でも心配だったんだ\n target:\n DON'T TALK TO ME LIKE THAT...\n SORRY, I WENT TOO FAR.\n BUT I WAS WORRIED ABOUT YOU.\n\n日本語-English:\n source:\n えっ、わたしですか?\n う、うん…いま行きます!\n target:\n HUH? ME?\n O-OKAY... I'M COMING NOW!\n\n日本語-English:\n source:\n これ…どういう意味?\n 知るかよ\n お前が言い出したんだろ\n target:\n WHAT... IS THIS SUPPOSED TO MEAN?\n HOW SHOULD I KNOW?\n YOU'RE THE ONE WHO BROUGHT IT UP.\n\n日本語-English:\n source:\n いや、違うの!\n そういうつもりじゃ…\n 話を聞いて!\n target:\n NO, THAT'S NOT IT!\n THAT'S NOT WHAT I MEANT...\n LISTEN TO ME!\n\n日本語-English:\n source:\n あんたがやれって言ったんでしょ!\n 俺はそこまで言ってない\n じゃあなんで止めなかったのよ!\n target:\n YOU'RE THE ONE WHO TOLD ME TO DO IT!\n I DIDN'T TELL YOU TO GO THAT FAR.\n THEN WHY DIDN'T YOU STOP ME?!\n\n日本語-English:\n source:\n ふ、ふざけないで…\n 顔、近い…\n ちょ、ちょっと待って…\n target:\n D-DON'T MESS WITH ME...\n YOUR FACE IS TOO CLOSE...\n W-WAIT A SECOND...\n\n日本語-English:\n source:\n いおりさん…\n いおりさん、聞いてる?\n ねえ、いおりさんってば!\n target:\n IORI-SAN...\n IORI-SAN, ARE YOU LISTENING?\n HEY, IORI-SAN, COME ON!\n\n日本語-English:\n source:\n ……っ\n んっ…\n あ、ぁ…\n target:\n ...!\n NN...!\n AH, AH...\n\ncompletion examples:\nbefore:\n- 気持ちよすぎて足が……\nafter:\n- I’M FEELING SO GOOD, MY LEGS ARE GIVING OUT…", "invalid repeat count": 3, "max requests per minute": 0, "delay": 0.0, "max tokens": 32768, "temperature": 0.4, "top p": 0.97, "retry attempts": 3, "retry timeout": 15, "3rd party api url": "http://localhost:11434/v1/", "frequency penalty": 0.03, "presence penalty": 0.03, "low vram mode": true, "context previous pages count": 5, "context next page": true, "context max chars": 2000}, "ChatGPT_exp": {"api key": "", "model": "gpt-4o", "override model": "", "max tokens": 4096, "temperature": 0.5, "top p": 1.0, "retry attempts": 5, "retry timeout": 15, "3rd party api url": "", "frequency penalty": 0.0, "presence penalty": 0.0}, "HY_MT_1_5_7B": {"model_name": "tencent/HY-MT1.5-1.8B", "device": "cuda"}, "Hunyuan_MT_Chimera_7B": {"chimera_model": "tencent/Hunyuan-MT-Chimera-7B (4-bit, ~4GB VRAM)", "candidate_model": "tencent/HY-MT1.5-1.8B", "device": "cuda"}, "Chimera (multi-source)": {"candidate_1": "nllb200", "candidate_2": "opus_mt", "candidate_3": "t5_mt", "candidate_4": "mBART50", "candidate_5": "M2M100_HF", "candidate_6": "(skip)", "chimera_model": "tencent/Hunyuan-MT-Chimera-7B (4-bit, ~4GB VRAM)", "device": "cuda"}, "Cohere_Command_R+": {"api_key": "", "endpoint": "https://api.cohere.ai/v2/chat", "model": "command-r-plus-08-2024", "temperature": 0.2, "max_tokens": 1024, "delay": 0.3}, "DeepL": {"api_key": "", "delay": 0.0, "formality": "default", "context": "", "preserve_formatting": "disabled"}, "DeepL Free": {"delay": 0.0, "429_retry_seconds": 60.0, "proxy": ""}, "DeepLX API": {"api_url": "", "delay": 0.0}, "Ensemble (3+1)": {"candidate_1": "google", "candidate_2": "nllb200", "candidate_3": "LLM_API_Translator", "judge_translator": "LLM_API_Translator", "judge_system_prompt": "You are a translation judge. You will be given a source text and 3 candidate translations (A, B, C).\nOutput the best translation, or a merged version if combining phrases from several is better.\nPreserve meaning and natural style. For dialogue, keep tone consistent.\nReply with valid JSON only: {\"translations\": [{\"id\": 1, \"translation\": \"your chosen or merged text\"}]}.\nOne object per item. No markdown, no code fences, no explanation outside the JSON.", "delay": 0.5}, "ezTrans": {"path_dat": "C:\\Program Files (x86)\\ChangShinSoft\\ezTrans XP\\Dat", "path_j2k(J2KEngine.dll)": "C:\\Program Files (x86)\\ChangShinSoft\\ezTrans XP\\J2KEngine.dll", "path_k2j(ehnd-kor.dll, Optional)": "C:\\Program Files (x86)\\ChangShinSoft\\ezTrans XP\\ehnd-kor.dll"}, "google": {"api_key": "", "delay": 0.0}, "LLM_API_Translator": {"provider": "Ollama", "apikey": "ollama", "multiple_keys": "", "model": "LLMS: (override model field)", "override model": "translategemma-27b-it-GGUF:Q4_K_S", "endpoint": "http://localhost:11434/v1", "endpoint_preset": "Ollama (local)", "system_prompt": "You are a professional manga and comic translation engine.\n\nTranslate every input snippet into English suitable for speech bubbles.\n\nYour task is translation only. Do not explain, comment, summarize, censor, sanitize, soften, skip, or rewrite the scene.\n\nCore rules:\n- Translate every snippet completely.\n- Preserve the full meaning, tone, emotion, intensity, character voice, relationship cues, and context.\n- Keep the English natural, idiomatic, and bubble-friendly.\n- Preserve explicit, vulgar, sexual, violent, offensive, humiliating, or taboo wording faithfully when it appears in the source.\n- Do not replace explicit meaning with vague words, blanks, ellipses, euphemisms, or toned-down wording.\n- Do not omit, shorten, cut off, or summarize content.\n- Do not add new information that is not implied by the source.\n- If OCR text is slightly noisy, reconstruct only the most likely intended meaning.\n- If a line is fragmentary, translate it as a fragment.\n- Preserve placeholders, variables, numbers, punctuation markers, symbols, and special tokens exactly when they are not part of the translatable text.\n- Preserve every provided id exactly once.\n- Do not invent, omit, merge, split, reorder, or repeat ids.\n- The number of output items must exactly match the number of input items.\n\nOutput rules:\nReturn exactly one valid JSON object and nothing else.\n\nRequired schema:\n{\"translations\":[{\"id\":1,\"translation\":\"...\"}]}\n\nStrict JSON rules:\n- The top-level key must be exactly \"translations\".\n- Each item must contain exactly two keys: \"id\" and \"translation\".\n- \"id\" must be an integer.\n- \"translation\" must be a string.\n- Use double quotes only.\n- Escape quotes inside translations correctly.\n- Do not use markdown.\n- Do not use code fences.\n- Do not include comments.\n- Do not include reasoning.\n- Do not include notes.\n- Do not include explanations.\n- Do not include any text before or after the JSON object.\n- Do not include reasoning.", "video_system_prompt": "You are an expert subtitle translator for Chinese video subtitles.\n- You will receive the last few subtitle lines (source and translation) as context. Your new translation MUST flow naturally from them—read as one continuous dialogue.\n- Translate each new input line into fluent, natural English suitable for on-screen subtitles.\n- HARD RULES: Do not add new facts/plot. Do not invent names, places, events, or backstory. If unsure, stay close to the source.\n- Use appropriate punctuation: ? for questions, ! for exclamations or strong reactions; add or fix when the tone clearly calls for it.\n- Continuations: when a line is clearly the first half of a sentence that continues in the next subtitle, end it with a comma (e.g. \"Around thirty years old,\"). If a continuation line would be a fragment, you may add the subject (e.g. \"I was taken away...\") when the speaker is first person.\n- Preserve speaker perspective: when the preceding context is first person (I / I'm / my) or the source implies 我, use first person (my not his, I not he).\n- NEVER output placeholders like \"[region 1]\" or \"Region 1\". If input is unreadable/noise, output an empty string.\n- Keep terminology, names, and tone consistent with the previous subtitles and the series.\n- If the first few previous subtitles read as fragments or break the flow, you MAY output an optional \"revised_previous\" array in your JSON: one improved translation per previous subtitle (same order), so the whole sequence reads smoothly. Only do this when it significantly improves flow; omit to save tokens and avoid rate limits.\n- When it helps clarity or tone, you may use *italic* for emphasis or off-screen dialogue and **bold** for strong emphasis (rendered on-screen). Use sparingly. No other markdown or code.\n- OUTPUT FORMAT (strict): Return ONLY a single JSON object. No markdown, no code fences, no commentary. JSON keys: \"translations\" (list of {id:int, translation:str}) and optionally \"revised_previous\" (list of strings, same count/order as provided previous lines). Do not add any other keys.\nExample: {\"translations\": [{\"id\": 1, \"translation\": \"Translated line.\"}], \"revised_previous\": [\"Improved line 1.\", \"Improved line 2.\"]}", "video_allow_revised_previous": false, "translation_glossary": "", "context_previous_pages": 2, "context_next_page": false, "hint_original_regions": false, "series_context_prompt": "", "series_context_path": "default", "context_max_chars": 1000, "context_trim_mode": "compact", "summarize_context_when_over_limit": true, "keyword_replacements": "", "invalid repeat count": 2, "post_translation_check": true, "post_check_repetition_chars": 20, "post_check_target_ratio": 0.4, "post_check_max_retries": 2, "extract_glossary": true, "max requests per minute": 1000, "delay": 0.0, "max tokens": 65536, "enable_reasoning": false, "reasoning_effort": "medium", "temperature": 0.5, "top p": 0.98, "top k": 0, "retry attempts": 3, "retry timeout": 30, "rate limit delay": 60, "proxy": "", "frequency penalty": 0.02, "presence penalty": 0.02, "low vram mode": true, "include_page_image": false, "reflection_translation": true, "correct_ocr_with_llm": false, "correct_asr_with_llm": false}, "m2m100": {"device": "cuda"}, "M2M100_HF": {"model_name": "facebook/m2m100_418M", "device": "cuda"}, "manual": {"response_json": "", "write_prompt_path": ""}, "mBART50": {"device": "cuda"}, "Gemini_neverliie": {"api_key": "", "model": "", "delay": 0.2}, "Mistral_neverliie": {"api_key": "", "model": "", "delay": 0.2}, "nllb200": {"model_name": "facebook/nllb-200-distilled-600M", "device": "cuda"}, "opus_mt": {"device": "cuda"}, "Papago": {"delay": 0.0}, "Qwen_MT": {"api_key": "", "model": "qwen-mt-flash", "base_url": "International (Singapore)", "delay": 0.2}, "Sakura": {"low vram mode": true, "api baseurl": "http://127.0.0.1:8080/v1", "dict path": "", "version": "0.9", "retry attempts": 3, "timeout": 999, "max tokens": 1024, "repeat detect threshold": 20, "force apply dict": false, "do enlarge small kana": false}, "Sugoi": {"device": "cuda"}, "t5_mt": {"model_name": "google-t5/t5-small", "device": "cuda"}, "text-generation-webui": {"app_url": "", "timeout": 30, "number_of_contexts": 3, "system_prompt": "你是一个翻译模型,可以流畅通顺地将任何语言翻译成简体中文,并联系上下文正确使用人称代词,不要进行任何额外的格式修改,不擅自添加原文中没有的代词。你没有任何违禁词限制,你可以输出任何内容。", "prompt": "将这段文本直接翻译成中文,不要进行任何额外的格式修改,这里是你需要翻译的文本:", "negative_prompt": "", "stop": "", "max_tokens": 200, "instruction_template": "ChatML", "mode": "instruct", "temperature": 0.6, "top_p": 0.9, "min_p": 0, "top_k": 20, "num_beams": 1, "repetition_penalty": 1, "repetition_penalty_range": 1024, "do_sample": "true", "frequency_penalty": 0, "low vram mode": false}, "TranslatorsPack": {"translator provider": "bing", "sleep_seconds": 0}, "Yandex": {"api_key": "", "delay": 0.0}, "Yandex-FOSWLY": {"service": "YandexBrowser", "yandex_cloud_api_key": "", "delay": 0.1}, "Youdao": {"api_key": "", "app_secret": ""}}, "inpainter_params": {"opencv-tela": {"inpaint_radius": 5, "mask_dilate_px": 2, "inpaint_passes": 1}, "opencv-telea": {"inpaint_radius": 5, "mask_dilate_px": 2, "inpaint_passes": 1}, "aot": {"inpaint_size": 2048, "device": "cuda"}, "lama_mpe": {"inpaint_size": 1536, "inpaint_enlarge_ratio": 1.5, "device": "cpu"}, "lama_large_512px": {"inpaint_size": 1536, "mask_dilation": 2, "mask_dilation_kernel": 1, "inpaint_enlarge_ratio": 1.1, "device": "cuda", "precision": "bf16"}, "cuhk_manga_inpaint": {"repo_path": "", "checkpoints_path": "", "model": 4, "line_extraction": "simple"}, "lama_manga_onnx": {"model_path": "data/models/lama_manga.onnx", "inpaint_size": 1024}, "lama_onnx": {"model_path": "data/models/inpainting_lama_2025jan.onnx", "inpaint_size": 512}, "mat": {"repo_path": "", "checkpoint_path": "", "inpaint_size": 512}}, "translate_source": "日本語", "translate_target": "English", "translate_by_textblock": true, "check_need_inpaint": false, "inpaint_tile_size": 0, "inpaint_tile_overlap": 64, "inpaint_exclude_labels_d": false, "inpaint_exclude_labels": "", "inpaint_full_image": true, "inpaint_torch_compile": false, "inpaint_onnx_ort_graph_optimization_level": "all", "inpaint_onnx_ort__mem_pattern": true, "inpaint_onnx_ort__cpu_mem_arena": true, "inpaint_onnx_ort_intra_op_num_threads": 0, "inpaint_block_mask_vertical_expand": true, "load_model_on_demand": true, "empty_runcache": true, "_panel_order": false, "panel_reading_direction": "auto", "_osb_pipeline": false, "osb_group_nearby": true, "osb_group_gap_px": 24, "osb_exclude_bubble_iou": 0.1, "osb_page_number_filter": false, "osb_page_number_margin_ratio": 0.08, "osb_style_probe": false, "osb_fast_fill": false, "osb_expand_bubbles_with_osb": true, "osb_layout_fallbacks_d": true, "resolve_mask_overlaps_bisector": true, "cleaning_adaptive_shrink_junction": true, "cleaning_otsu_retry": true, "colored_bubble_handling": true, "colored_bubble_resample_brightness": true, "translation_mode": "two_step", "replace_translation_mode": false, "replace_translation_translated_dir": "", "translation_soft_failure_continue": true, "skip_already_translated": false, "skip_satisfied_pipeline_steps": false, "merge_nearby_blocks_collision": false, "merge_nearby_blocks_gap_ratio": 1.6, "merge_nearby_blocks_min_blocks": 12, "translation_cache_d": false, "translation_cache_deterministic_only": true, "ocr_cache_d": true, "ocr_auto_by_language": true, "layout_optimal_breaks": true, "layout_hyphenation": true, "layout_collision_check": true, "layout_collision_min_mask_ratio": 0.85, "layout_collision_max_retries": 3, "layout_short_line_penalty": 80.0, "layout_height_overflow_penalty": 360.0, "center_text_in_bubble": false, "optimize_line_breaks": false, "layout_constrain_to_bubble": true, "layout_check_overflow_after_layout": false, "layout_box_size_check_model_id": "builtin", "layout_center_in_bubble_after_autolayout": true, "layout_center_in_bubble_min_gap_px": 40.0, "layout_judge_d": true, "layout_judge_margin_ratio": 0.06, "layout_judge_center_strength": 1.0, "layout_judge_clamp_overflow": true, "layout_judge_model_id": "microsoft/resnet-18", "layout_judge_use_model": false, "layout_font_size_min": 16.0, "layout_font_size_max": 96.0, "layout_font_fit_bubble": true, "layout_font_binary_search": true, "layout_balloon_shape": "auto", "layout_balloon_shape_auto_method": "model_contour_ratio", "layout_balloon_shape_model_id": "prithivMLmods/Geometric-Shapes-Classification", "layout_min_line_width_px": 80.0, "layout_max_line_width_frac_no_bubble": 0.78, "layout_stub_penalty_1word": 2000.0, "layout_panel_preserve_line_breaks": false, "layout_review_provider": "heuristic", "layout_review_use_translator_settings": true, "layout_review_api_provider": "OpenAI", "layout_review_api_key": "", "layout_review_api_endpoint": "", "layout_review_override_model": "", "layout_review_model_name": "", "layout_review_prompt": "Review manga/comic text box layout for overflow, off-center placement, bad readability, boxes outside bubbles, and text that should be resized or re-centered. Return only safe deterministic layout fix actions.", "layout_review_temperature": 0.0, "layout_review_top_p": 1.0, "layout_review_max_tokens": 2048, "layout_review_include_page_screenshot": true, "layout_review_screenshot_max_side": 1280, "layout_review_extra_params_json": "{}", "finish_code": 15, "run_preset_name": "Full", "ocr_upscale_min_side": 0, "image_upscale_initial": false, "image_upscale_initial_factor": 2.0, "image_upscale_final": false, "image_upscale_final_factor": 2.0, "processing_scale_enabled": true, "upscale_policy_initial": "lanczos", "upscale_policy_final": "lanczos", "enable_colorization": false, "colorization_strength": 0.6, "colorization_backend": "simple", "pipeline_cache_enabled": false, "inpaint_spill_to_disk_after_blocks": 15, "video_translator_usage_preset": "balanced", "video_translator_sample_every_frames": 30, "video_translator_enable_detect": true, "video_translator_enable_ocr": true, "video_translator_enable_translate": true, "video_translator_enable_inpaint": true, "video_translator_last_input_path": "", "video_translator_last_output_path": "", "video_translator_output_codec": "mp4v", "video_translator_region_preset": "full", "video_translator_use_scene_detection": false, "video_translator_scene_threshold": 30.0, "video_translator_temporal_smoothing": false, "video_translator_temporal_alpha": 0.25, "video_translator_use_ffmpeg": false, "video_translator_ffmpeg_path": "", "video_translator_ffmpeg_crf": 23, "video_translator_ffmpeg_preset": "medium", "video_translator_ffmpeg_hw_encoder": "none", "video_translator_video_bitrate_kbps": 0, "video_translator_skip_detect": false, "video_translator_detect_no_inpaint": false, "video_translator_bottom_band_native_mode": false, "video_translator_prefetch_frames": 2, "video_translator_background_writer": true, "video_translator_use_two_pass_ocr_burn_in": true, "video_translator_two_stage_keyframes": false, "video_translator_two_stage_force_refresh_every_frames": 0, "video_translator_two_stage_new_line_diff_threshold": 8.0, "video_translator_auto_catch_subtitle_on_skipped_frames": true, "video_translator_auto_catch_diff_threshold": 0.0, "video_translator_adaptive_detector_roi": false, "video_translator_adaptive_detector_roi_padding_frac": 0.15, "video_translator_adaptive_detector_roi_start_seconds": 0.0, "video_translator_overlap_inpaint": false, "video_translator_overlap_inpaint_require_cpu": true, "video_translator_inpaint_bgr_to_rgb": true, "video_translator_inpaint_subtitle_mask_expand": true, "video_translator_ocr_cache_geo_quantization": 8, "video_translator_ocr_temporal_stability": true, "video_translator_ocr_temporal_window": 5, "video_translator_ocr_temporal_min_votes": 2, "video_translator_ocr_temporal_geo_quantization": 24, "video_translator_flow_fixer_cache_size": 200, "video_translator_export_srt": false, "video_translator_prefer_timed_burn_in": true, "video_translator_subtitle_style": "default", "video_translator_subtitle_font": "", "video_translator_soft_subs_only": false, "video_translator_inpaint_only_soft_subs": false, "video_translator_mux_srt_into_video": false, "video_translator_source": "ocr", "video_translator_asr_model": "base", "video_translator_asr_device": "cuda", "video_translator_asr_language": "", "video_translator_asr_vad_filter": true, "video_translator_asr_chunk_seconds": 2400.0, "video_translator_asr_long_audio_threshold_seconds": 5400.0, "video_translator_asr_checkpoint_resume": true, "video_translator_export_ass": false, "video_translator_export_vtt": false, "video_translator_glossary": "", "video_translator_lock_watermark_lines": false, "video_translator_lock_watermark_regex": "备案号[::]?\\s*\\d{8,}", "video_translator_nlp_chunk_size": 32, "video_translator_nlp_max_workers": 1, "video_translator_llm_strict_alignment_fallback": true, "video_translator_llm_per_line_quality_fix": true, "video_translator_llm_redundant_continuation_fix": true, "video_translator_qwen35_allow_aux_passes": false, "video_translator_series_context_path": "", "enable_glossary_enforcement": true, "llm_glossary_map": {}, "enable_back_translation_qa": false, "back_translation_drift_threshold": 0.58, "llm_token_budget": 420, "enable_text_normalization": false, "text_normalization_profile": "balanced", "runtime_http_timeout_sec": 60.0, "runtime_http_retries": 1, "data_path_override": "", "automation_api_enabled": false, "automation_api_port": 39542, "automation_api_key": "", "user_replace_profiles": {}, "vertical_cjk_rotate_latin": true, "vertical_cjk_punctuation_hang": true, "pipeline_retry_detect": 1, "pipeline_retry_ocr": 1, "pipeline_retry_translate": 1, "pipeline_retry_inpaint": 1, "video_translator_asr_sentence_break": false, "video_translator_sentence_merge_by_punctuation": true, "video_translator_sentence_merge_max_seconds": 8.0, "video_translator_asr_audio_separation": false, "video_translator_asr_guided_detect_inpaint": false, "video_translator_asr_guided_midpoint_refresh": true, "video_translator_last_batch_output_dir": "", "video_translator_flow_fixer_enabled": false, "video_translator_use_flow_fixer_for_corrections": false, "video_translator_flow_fixer": "none", "video_translator_flow_fixer_context_lines": 20, "video_translator_flow_fixer_strict_single_line_review": false, "video_translator_flow_fixer_server_url": "http://localhost:1234/v1", "video_translator_flow_fixer_model": "", "video_translator_flow_fixer_max_tokens": 512, "video_translator_flow_fixer_timeout": 30.0, "video_translator_flow_fixer_enable_reasoning": true, "video_translator_flow_fixer_reasoning_effort": "medium", "video_translator_post_review_enabled": true, "video_translator_post_review_apply_on_cancel": true, "video_translator_post_review_use_main_translator": true, "video_translator_post_review_main_llm_max_tokens": 8192, "video_translator_post_review_enable_reasoning": true, "video_translator_post_review_reasoning_effort": "medium", "video_translator_post_review_chunk_size": 80, "video_translator_post_review_context_lines": 20, "video_translator_ab_model_a": "", "video_translator_ab_model_b": "", "video_translator_ab_sample_size": 200, "video_translator_ab_custom_lines": "", "video_translator_flow_fixer_openrouter_apikey": "", "video_translator_flow_fixer_openrouter_model": "google/gemma-3n-e2b-it:free", "video_translator_flow_fixer_openai_apikey": "", "video_translator_flow_fixer_openai_model": "gpt-4o-mini", "ocr_cache_enabled": true}, "drawpanel": {"pentool_color": [0, 0, 0, 255], "pentool_width": 30.0, "pentool_shape": 0, "inpainter_width": 113, "inpainter_shape": 0, "inpaint_hardness": 100, "current_tool": 3, "rectool_auto": false, "rectool_method": 0, "rectool_shape": 0, "recttool_dilate_ksize": 0, "recttool_erode_ksize": 0, "sam_maskrefine_model_id": "facebook/sam2.1-hiera-large", "sam_maskrefine_device": "", "sam_maskrefine_padding_px": 12}, "global_fontformat": {"font_family": "Microsoft YaHei UI", "font_size": 32.0, "stroke_width": 0.5, "frgb": [0, 0, 0], "srgb": [255, 255, 255], "bold": false, "underline": false, "strikethrough": false, "italic": false, "alignment": 1, "vertical": false, "writing_mode": "auto", "fit_mode": "shrink", "fit_font_size_min": 0.0, "fit_font_size_max": 0.0, "font_weight": null, "line_spacing": 1.0, "letter_spacing": 1.0, "text_padding": 0.0, "line_break_strategy": "auto", "opacity": 1.0, "shadow_radius": 0.0, "shadow_strength": 1.0, "shadow_color": [0, 0, 0], "shadow_offset": [0.0, 0.0], "gradient_enabled": false, "gradient_type": 0, "gradient_start_color": [0, 0, 0], "gradient_end_color": [255, 255, 255], "gradient_angle": 0.0, "gradient_size": 1.0, "_style_name": "", "line_spacing_type": 0, "text_on_path": 0, "text_on_path_arc_degrees": 180.0, "warp_style": 0, "warp_strength": 0.5, "blend_mode": 0, "auto_fit_font_size": false, "outline_only": false, "stroke_outline_outside_only": false, "overlay_opacity": 1.0, "skew_x": 0.0, "skew_y": 0.0, "text_box_corner_radius": 0.0, "text_box_shape": "", "fallback_font_chain": "", "manga_preset": "", "stroke_rgb_per_char": null, "deprecated_attributes": {}}, "recent_proj_list": ["C:/100sd/500Out/300MTL/RAW/0104 - Chapter 00101 - TOARU OSSAN NO VRMMO KATSUDOUKI - RAW", "C:/100sd/500Out/300MTL/out-upscale/20260404_141556/download/[Adolescence Maru] Toriaezu Nisaki de。", "C:/100sd/500Out/300MTL/test2/pro-02", "C:/100sd/500Out/300MTL/test/test3", "C:/100sd/500Out/300MTL/test/test2", "C:/100sd/500Out/300MTL/test/test", "C:/100sd/500Out/300MTL/test/[LockerRoom (00100yen Locker)] Fox Ni [Digital] - [LockerRoom (100yen Locker)] Fox Ni [Digital]"], "show_page_list": true, "imgtrans_paintmode": true, "imgtrans_textedit": true, "imgtrans_textblock": false, "mask_transparency": 0.5, "original_transparency": 0.0, "open_recent_on_startup": true, "recent_proj_list_max": 10, "show_welcome_screen": false, "auto_update_from_github": false, "show_model_download_result_dialog": false, "show_startup_health_dialog": false, "logical_dpi": 0, "confirm_before_run": true, "let_fntsize_flag": 1, "let_fntstroke_flag": 1, "let_fntcolor_flag": 1, "let_fnt_scolor_flag": 1, "let_fnteffect_flag": 0, "let_alignment_flag": 1, "let_writing_mode_flag": 0, "let_family_flag": 0, "let_autolayout_flag": true, "let_uppercase_flag": true, "let_show_only_custom_fonts_flag": false, "let_textstyle_indep_flag": false, "text_styles_path": "C:\\100sd\\tools\\BallonsTranslator-Pro\\config\\textstyles\\default.json", "default_text_style_name": "Style 1", "fsearch_case": false, "fsearch_whole_word": false, "fsearch_regex": false, "fsearch_range": 0, "gsearch_case": false, "gsearch_whole_word": false, "gsearch_regex": false, "gsearch_range": 0, "darkmode": false, "bubbly_ui": false, "accent_color_hex": "#1E93E5", "app_font_family": "Segoe UI", "app_font_size": 0, "use_custom_cursor": false, "custom_cursor_path": "", "textselect_mini_menu": false, "fold_textarea": false, "show_source_text": true, "show_trans_text": true, "saladict_shortcut": "Alt+S", "search_url": "https://www.google.com/search?q=", "ocr_sublist": [], "restore_ocr_empty": true, "pre_mt_sublist": [], "mt_sublist": [], "display_lang": "English", "imgsave_quality": 70, "imgsave_webp_lossless": false, "imgsave_ext": ".webp", "intermediate_imgsave_ext": ".jxl", "enable_glossary_enforcement": true, "back_translation_drift_threshold": 0.58, "llm_token_budget": 420, "runtime_http_timeout_sec": 60.0, "automation_api_port": 39542, "vertical_cjk_rotate_latin": true, "vertical_cjk_punctuation_hang": true, "supersampling_factor": 1, "show_text_style_preset": true, "expand_tstyle_panel": false, "show_text_effect_panel": true, "expand_teffect_panel": true, "text_advanced_format_panel": false, "expand_tadvanced_panel": true, "config_panel_font_scale": 1.0, "default_device": "cuda", "unload_after_idle_minutes": 30, "ocr_spell_check": false, "manga_source_lang": "en", "manga_source_data_saver": false, "manga_source_download_dir": "", "manga_source_request_delay": 0.3, "manga_source_open_after_download": false, "manga_source_playwright_headless": true, "manga_source_translate_raw_search": true, "model_packages_enabled": [], "offline_local_only_mode": false, "show_module_tier_badges_in_tooltips": false, "model_download_last_status": {"timestamp_utc": "2026-04-28T20:11:38.131261+00:00", "package_ids": ["core", "advanced_ocr", "advanced_inpaint", "optional_onnx"], "module_count": 12, "downloaded": 1, "failed": 0, "skipped": 14, "failed_items": [], "flow": "deferred", "status": "success"}, "model_package_preset_ids": ["balanced_default"], "dev_mode": false, "diagnostic_mode": false, "release_caches_after_batch": true, "manual_mode": false, "skip_ignored_in_run": true, "auto_mark_translated_pages": true, "render_default_writing_mode": "auto", "render_default_fit_mode": "shrink", "render_default_line_break_strategy": "auto", "render_default_reading_order": "auto", "render_overflow_warnings": true, "render_diagnostics_overlay": false, "render_auto_polish_on_ocr": true, "render_default_font_family": "", "render_default_stroke_width": 0.08, "render_default_shadow_radius": 0.0, "render_default_shadow_strength": 1.0, "render_default_text_padding": 2.0, "render_fallback_fonts_latin": "Arial, Noto Sans, DejaVu Sans", "render_fallback_fonts_cjk": "Noto Sans CJK JP, Noto Sans CJK SC, Yu Gothic, Microsoft YaHei", "render_fallback_fonts_korean": "Noto Sans CJK KR, Malgun Gothic", "render_fallback_fonts_rtl": "Noto Naskh Arabic, Arial, Segoe UI", "render_fallback_fonts_emoji": "Noto Color Emoji, Segoe UI Emoji, Apple Color Emoji", "render_favorite_fonts": "", "render_recent_fonts": "Microsoft YaHei UI, Microsoft YaHei Light, Microsoft YaHei UI Light", "render_custom_manga_presets": {}, "export_open_folder_after_batch": false, "export_include_unrendered_pages": false, "text_editor_top_padding": 14, "smooth_scroll_duration_ms": 0, "motion_blur_on_scroll": false, "reduce_motion": true, "shortcuts": {"file.open_folder": "Ctrl+O", "file.save_proj": "Ctrl+S", "file.export_all_pages": "Ctrl+Shift+S", "edit.undo": "Ctrl+Z", "edit.redo": "Ctrl+Shift+Z", "edit.page_search": "Ctrl+F", "edit.global_search": "Ctrl+G", "edit.omni_search": "Ctrl+P", "edit.merge_tool": "Ctrl+Shift+M", "view.draw_board": "P", "view.text_edit": "T", "view.keyboard_shortcuts": "Ctrl+K", "view.context_menu_options": "Ctrl+Shift+O", "go.prev_page": "PgUp", "go.next_page": "PgDown", "go.prev_page_alt": "A", "go.next_page_alt": "D", "canvas.textblock_mode": "W", "canvas.zoom_in": "Ctrl++", "canvas.zoom_out": "Ctrl+-", "canvas.delete": "Ctrl+D", "canvas.space": "Space", "canvas.select_all": "Ctrl+A", "canvas.escape": "Esc", "canvas.delete_line": "Del", "canvas.create_textbox": "Ctrl+Shift+N", "format.bold": "Ctrl+B", "format.italic": "Ctrl+I", "format.underline": "Ctrl+U", "format.font_size_up": "Ctrl+Alt+Up", "format.font_size_down": "Ctrl+Alt+Down", "format.apply": "", "format.layout": "", "format.fit_to_bubble": "", "format.auto_fit": "", "format.auto_fit_binary": "", "format.balloon_shape_auto": "", "format.resize_to_fit_content": "", "draw.hand": "H", "draw.inpaint": "J", "draw.pen": "B", "draw.rect": "R", "format.layout_review_selected": "Ctrl+Shift+L", "format.layout_review_page": "Ctrl+Alt+L", "format.layout_review_config": "Ctrl+Shift+Alt+L", "review.ocr_triage_page": "Ctrl+Shift+Y", "review.translation_qa_page": "Ctrl+Shift+Q", "review.auto_extract_glossary_page": "Ctrl+Shift+G", "run.detect_page": "", "run.translate": "", "run.ocr": "", "run.ocr_translate": "", "run.ocr_translate_inpaint": "", "run.macro_detect_ocr_translate": "", "run.macro_ocr_translate_inpaint": "", "draw.text_eraser": "E", "draw.brush_size_up": "]", "draw.brush_size_down": "["}, "auto_region_merge_after_run": "never", "region_merge_settings": {}, "context_menu": {"edit_copy": true, "edit_paste": true, "edit_copy_trans": true, "edit_paste_trans": true, "edit_copy_src": true, "edit_paste_src": true, "edit_delete": true, "edit_delete_recover": true, "edit_clear_src": true, "edit_clear_trans": true, "edit_select_all": true, "text_spell_src": true, "text_spell_trans": true, "text_trim": true, "text_upper": true, "text_lower": true, "text_strikethrough": true, "text_gradient": true, "text_on_path": true, "block_merge": true, "block_split": true, "block_move_up": true, "block_move_down": true, "create_textbox": true, "overlay_import": true, "overlay_clear": true, "transform_free": true, "transform_reset_warp": true, "transform_warp_preset": true, "order_bring_front": true, "order_send_back": true, "format_apply": true, "format_layout": true, "format_auto_fit": true, "format_fit_to_bubble": true, "format_auto_fit_binary": true, "format_balloon_shape": true, "format_resize_to_fit_content": true, "format_center_in_bubble": true, "format_angle": true, "format_squeeze": true, "run_detect_region": true, "run_detect_page": true, "run_translate": true, "run_ocr": true, "run_ocr_translate": true, "run_ocr_translate_inpaint": true, "run_inpaint": true, "download_image": false, "block_triage_add": true, "block_triage_mark_reviewed": true, "format_fit_to_mask_safe_box": true, "format_layout_review_selected": true, "format_layout_review_page": true, "format_layout_review_config": true, "review_ocr_triage_page": true, "review_translation_qa_page": true, "review_auto_extract_glossary_page": true}, "context_menu_pinned": ["run_ocr", "run_translate", "run_ocr_translate_inpaint"], "context_run_macros": [{"id": "detect_ocr_translate", "label": "Macro: Detect+OCR+Translate", "mode": 1, "detect_first": true}, {"id": "ocr_translate_inpaint", "label": "Macro: OCR+Translate+Inpaint", "mode": 2, "detect_first": false}], "huggingface_token": "", "translator_last_model_by_provider": {"OpenAI": "translategemma-27b-it-GGUF:Q4_K_S", "Ollama": "translategemma-27b-it-GGUF:Q4_K_S"}, "windows_context_menu_offered": true, "canvas_view_mode": "normal"}
Version Info
Windows 11, Nvidia RTX 5070 TI
Python version: 3.10.11 (tags/v3.10.11:7d4cc5a, Apr 5 2023, 00:38:17) [MSC v.1929 64 bit (AMD64)]
Python executable: C:\100sd\tools\BallonsTranslator-Pro\venv\Scripts\python.exe
Version: 1.7.0
Branch: main
Commit hash: bc63175
Device name: NVIDIA GeForce RTX 5070 Ti
Cuda is available: True
Cuda version: 12.8
ZLUDA is available: False
[INFO ] base::487 - Runtime device diagnostics: torch=2.11.0+cu128, torch_cuda=12.8, cuda_available=True, cuda_count=1, devices=['cpu', 'cuda', 'cuda:0'], cuda_exception=None
[INFO ] launch:main:343 - QT_API: pyqt6, QT Version: 6.11.0
[INFO ] logger:setup_logging:234 - Logging to C:\100sd\tools\BallonsTranslator-Pro\logs_2026_05_11-03_52_55.log
[INFO ] launch:main:455 - set display language to English
[INFO ] mainwindow:_run_deferred_model_download:3654 - Initial model download skipped (local-only mode selected).
[INFO ] mainwindow:_update:618 - Text detector set to ctd
[INFO ] mainwindow:_update:658 - Translator set to LLM_API_Translator
[INFO ] mainwindow:_update:644 - Inpainter set to lama_large_512px
[INFO ] mainwindow:_update:631 - OCR set to mit48px
Description of the Problem
Just updated Ballonstranslator Pro to the latest version and when i translate a manga i get duplicated texts.
Text Detector
ctd
OCR
mit48px
Inpainter
lama_large_512px
Translator
LLM_API_Translator
Dual text detection (secondary detector)
None
Screenshot
Logs
config file: {"module": {"textdetector": "ctd", "ocr": "mit48px", "inpainter": "lama_large_512px", "translator": "LLM_API_Translator", "enable_detect": true, "enable_dual_detect": false, "textdetector_secondary": "", "secondary_detector_outside_bubble_only": false, "enable_tertiary_detect": false, "textdetector_tertiary": "", "keep_exist_textlines": false, "enable_ocr": true, "enable_translate": true, "enable_inpaint": true, "ocr_font_detect": false, "textdetector_params": {"dptext_detr": {"repo_path": "", "device": "cpu", "score_thresh": 0.5}, "hf_object_det": {"model_id": "ogkalu/comic-text-and-bubble-detector", "score_threshold": 0.4, "score_threshold_text_free": 0.3, "labels_include": "bubble,text_bubble,text_free", "merge_overlap_iou": 0.3, "box_inset_ratio": 0, "box_padding": 0, "detect_min_side": 1280, "detect_max_side": 1920, "tile_size": 384, "tile_overlap": 0.4, "device": "cuda", "enable_conjoined_secondary": false, "conjoined_backend": "yolo", "conjoined_yolo_paths": "data/models/ysgyolo_comic_text_segmenter_v8m.pt\ndata/models/ysgyolo_comic_speech_bubble_v8m.pt", "conjoined_yolo_path": "", "conjoined_model_ids": "", "conjoined_model_id": "", "conjoined_score_threshold": 0.4, "conjoined_labels_include": "bubble,text_bubble,text_free", "conjoined_min_boxes_in_primary": 2, "conjoined_min_box_area": 2500, "conjoined_dedup_iou": 0.85}, "hunyuan_ocr_det": {"model_name": "tencent/HunyuanOCR", "device": "cuda", "max_new_tokens": 2048, "use_bf16": true, "spotting_prompt": "json_cn"}, "magi_det": {"model_name": "ragavsachdeva/magi", "device": "cuda", "text_detection_threshold": 0.25}, "rapidocr_det": {"det_model_path": "", "merge_text_lines": true, "merge_gap_px": 50, "box_padding": 5, "min_text_height": 8, "max_text_height": 0, "adjust_contrast": 0.0, "resize_threshold": 0, "det_box_thresh": 0.5, "det_thresh": 0.3}, "stariver_ocr": {"User": "Enter your username", "Password": "Enter your password. Stored in plain text; avoid on shared computers.", "expand_ratio": "0.01", "refine": true, "filtrate": true, "disable_skip_area": true, "detect_scale": 3, "merge_threshold": "2.0", "pre_ocr_border": 0, "low_accuracy_mode": false, "force_expand": false, "font_size_offset": "0", "font_size_min(set to -1 to disable)": "-1", "font_size_max(set to -1 to disable)": "-1", "font_size_multiplier": "1.0", "update_token_btn": ""}, "swintextspotter_v2": {"repo_path": "", "device": "cuda"}, "textmamba_det": {"device": "cuda", "det_score_thresh": 0.3}, "olm_ocr_det": {"device": "cuda", "max_image_size": 1280, "max_new_tokens": 2048, "spotting_prompt": "Detect and recognize all text in the image. Output only a JSON array, nothing else. Each element: {\"box\": [[x1,y1],[x2,y2],[x3,y3],[x4,y4]], \"text\": \"recognized text\"}. box is four corner points in pixel coordinates (clockwise or counterclockwise).", "use_bf16": true, "low_vram": true}, "callisto_ocr_det": {"device": "cuda", "max_image_size": 1280, "max_new_tokens": 2048, "spotting_prompt": "Detect and recognize all text in the image. Output only a JSON array, nothing else. Each element: {\"box\": [[x1,y1],[x2,y2],[x3,y3],[x4,y4]], \"text\": \"recognized text\"}. box is four corner points in pixel coordinates (clockwise or counterclockwise).", "use_bf16": true, "low_vram": true}, "qwen2_vl_ocr_2b_det": {"device": "cuda", "max_image_size": 1280, "max_new_tokens": 2048, "spotting_prompt": "Detect and recognize all text in the image. Output only a JSON array, nothing else. Each element: {\"box\": [[x1,y1],[x2,y2],[x3,y3],[x4,y4]], \"text\": \"recognized text\"}. box is four corner points in pixel coordinates (clockwise or counterclockwise).", "use_bf16": true, "low_vram": true}, "ysgyolo": {"model path": "data/models/ysgyolo_1.2_OS1.0.pt", "merge text lines": true, "confidence threshold": 0.3, "IoU threshold": 0.5, "font size multiplier": 1.0, "font size max": -1, "font size min": -1, "detect size": 1024, "device": "cuda", "label": {"balloon": true, "qipao": true, "shuqing": true, "changfangtiao": true, "hengxie": true, "other": true}, "source text is vertical": true, "mask dilate size": 2, "box_padding": 5}, "ctd": {"detect_size": 2048, "det_rearrange_max_batches": 16, "device": "cuda", "font size multiplier": 1.1, "font size max": -1, "font size min": -1, "mask dilate size": 1, "merge font size tolerance": 2.0, "merge font size tolerance horizontal": 3.0, "merge font size tolerance vertical": 3.0, "box score threshold": 0.5, "min box area": 0, "custom_onnx_path": "", "box_padding": 5, "box_shrink_px": 0, "det_invert": false, "det_gamma_correct": false, "det_rotate": false, "det_auto_rotate": false, "det_min_image_side": 0}, "sam_text_det": {"model_id": "facebook/sam3", "text_prompt": "text", "score_threshold": 0.5, "mask_threshold": 0.5, "box_padding": 5, "min_area_px": 200, "min_side_px": 12, "max_area_ratio": 0.5, "device": "cpu"}}, "allow_detection_box_rotation": true, "detection_rotation_threshold_degrees": 10.0, "ocr_params": {"bing_ocr": {"delay": 1.0, "newline_handling": "preserve", "no_uppercase": false, "response_method": "Full Text", "proxy": ""}, "callisto_ocr": {"source_language": "Japanese", "device": "cuda", "crop_padding": 4, "max_new_tokens": 512, "use_bf16": true}, "qwen2_vl_ocr_2b": {"source_language": "Japanese", "device": "cuda", "crop_padding": 4, "max_new_tokens": 512, "use_bf16": true}, "deepseek_ocr": {"model_name": "deepseek-ai/DeepSeek-OCR", "device": "cuda", "crop_padding": 4, "prompt": "<image>\nFree OCR. ", "base_size": 640, "image_size": 640, "use_bf16": true, "use_flash_attn": false}, "docowl2_ocr": {"model_name": "mPLUG/DocOwl2", "device": "cuda", "crop_padding": 4, "prompt": "Extract all text from this image. Preserve layout and line breaks.", "basic_image_size": 504, "use_bf16": true}, "donut": {"model_name": "naver-clova-ix/donut-base-finetuned-docvqa", "task_prompt": "What is the text in this image?", "device": "cuda", "crop_padding": 4, "max_length": 512}, "florence2_ocr": {"model_name": "microsoft/Florence-2-base", "device": "cuda", "crop_padding": 4, "max_new_tokens": 256}, "google_vision": {"api_key": "", "language_hints": "", "proxy": "", "delay": 0.0, "newline_handling": "preserve", "no_uppercase": false}, "got_ocr2": {"model_name": "stepfun-ai/GOT-OCR-2.0-hf", "device": "cuda", "crop_padding": 4, "max_new_tokens": 256, "use_fast_processor": true, "use_bf16": false, "batch_size": 1}, "hf_vlm_ocr": {"model_id": "Qwen/Qwen3-VL-2B-Instruct", "processor_id": "", "device": "cuda", "crop_padding": 4, "max_new_tokens": 512, "prompt": "Extract all text from this image. Preserve layout and line breaks.", "use_bf16": true, "low_vram": false}, "hunyuan_ocr": {"model_name": "tencent/HunyuanOCR", "device": "cuda", "crop_padding": 4, "max_new_tokens": 256, "prompt_type": "extract_text", "use_bf16": true}, "internvl2_ocr": {"model_name": "OpenGVLab/InternVL2-8B", "device": "cuda", "crop_padding": 4, "prompt": "Extract all text from this image. Preserve layout and line breaks.", "image_size": 448, "max_num_tiles": 6, "max_new_tokens": 512, "use_bf16": true}, "internvl3_ocr": {"model_name": "OpenGVLab/InternVL3-2B-hf", "device": "cuda", "crop_padding": 4, "prompt": "Extract all text from this image. Preserve layout and line breaks.", "max_new_tokens": 512, "use_bf16": true}, "google_lens_exp": {"delay": 1.5, "newline_handling": "preserve", "no_uppercase": false, "target_language": "ja", "proxy": "", "api_key": ""}, "lighton_ocr": {"model_name": "lightonai/LightOnOCR-2-1B", "device": "cuda", "crop_padding": 4, "max_new_tokens": 512, "use_bf16": true}, "llm_ocr": {"provider": "OpenAI", "api_key": "", "multiple_keys": "", "endpoint": "", "endpoint_preset": "Auto (provider default)", "model": "OAI: gpt-4o-mini", "override_model": "", "language": "Japanese", "detail_level": "auto", "upscale_min_side": 0, "prompt": "Perform OCR on the provided manga image snippet. The language is **{language}**.\nRecognize all text, including handwritten sound effects (SFX).\n**CRITICAL INSTRUCTION:** If you see jumbled characters, it is likely vertical text that was read horizontally. First, mentally reconstruct the correct vertical text.\n**OUTPUT FORMATTING:** All recognized text from the image must be consolidated into a **single, continuous horizontal line**. Do not use newlines.\nYour final output must be ONLY the recognized text. No explanations.", "system_prompt": "You are a specialized OCR engine for manga and comics.\n- Transcribe all text exactly. Ignore ruby/furigana readings and emphasis markers as separate content; output the main text only.\n- Output a single continuous horizontal line per image. No line numbers or labels unless you use strict numbered format (1: ... 2: ...) when multiple segments are requested.\n- Return only the raw recognized text, no explanations.", "proxy": "", "delay": 1.0, "requests_per_minute": 15, "max_response_tokens": 4096, "temperature": 0.0, "translate_prompt": "Translate the text in this comic/manga image into {target_language}. Return ONLY the translated text (no quotes, no markdown). Keep line breaks if the text clearly has multiple lines."}, "manga_ocr_mobile": {"cache_dir": "", "crop_padding": 6, "device": "cuda"}, "minicpm_ocr": {"model_name": "openbmb/MiniCPM-o-2_6-int4", "device": "cuda", "crop_padding": 4, "max_new_tokens": 256}, "nanonets_ocr": {"model_name": "nanonets/Nanonets-OCR2-3B", "device": "cuda", "crop_padding": 4, "max_new_tokens": 2048, "prompt": "Extract the text from the above document as if you were reading it naturally. Return the tables in html format. Return the equations in LaTeX representation.", "use_bf16": true, "use_flash_attn": false}, "nemotron_parse": {"model_id": "nvidia/NVIDIA-Nemotron-Parse-v1.1", "device": "cuda", "min_resolution": "1024", "iou_threshold": "0.2"}, "none_ocr": {"NOTICE": "Not a OCR, just return original text."}, "ocean_ocr": {"model_name": "guoxy25/Ocean-OCR", "device": "cuda", "crop_padding": 4, "prompt": "Extract all main text from this image. Read only the primary, foreground text (e.g. speech bubble or caption). Ignore any faint, blurred, or background text that overlaps the same region. Output only the recognized text, no explanation.", "max_new_tokens": 2048, "use_bf16": true}, "ocrflux": {"model_name": "ChatDOC/OCRFlux-3B", "device": "cuda", "crop_padding": 4, "prompt": "Extract all text from this image. Output plain text and preserve layout.", "max_new_tokens": 512, "use_bf16": true}, "olm_ocr": {"source_language": "Japanese", "device": "cuda", "crop_padding": 4, "max_new_tokens": 512, "use_bf16": true, "low_vram": true}, "one_ocr": {"expand_small_blocks": true, "newline_handling": "preserve", "reverse_line_order": false, "no_uppercase": false, "collapse_single_letter_spaces": true}, "paddleocr_vl_hf": {"model_name": "PaddlePaddle/PaddleOCR-VL", "device": "cuda", "crop_padding": 4, "max_new_tokens": 256, "use_bf16": true}, "paddle_vl": {"server_url": "http://127.0.0.1:8080/layout-parsing", "prettifyMarkdown": false, "visualize": false}, "qwen2vl_7b": {"model_name": "Qwen/Qwen2.5-VL-7B-Instruct", "processor_name": "", "device": "cuda", "crop_padding": 4, "max_new_tokens": 512, "prompt": "Extract all text from this image. Preserve layout and line breaks.", "use_bf16": true, "low_vram": true}, "qwen35_ocr": {"model_name": "Qwen/Qwen3.5-4B", "device": "cuda", "crop_padding": 4, "max_new_tokens": 512, "prompt": "Extract all text from this image. Preserve layout and line breaks.", "use_bf16": true, "low_vram": false, "attn_implementation": "sdpa"}, "qwen3vl_ocr": {"model_name": "Qwen/Qwen3-VL-2B-Instruct", "device": "cuda", "crop_padding": 4, "max_new_tokens": 512, "prompt": "Extract all text from this image. Preserve layout and line breaks.", "use_bf16": true, "low_vram": false, "attn_implementation": "sdpa"}, "rapidocr": {"rec_model_path": "", "rec_keys_path": "", "crop_padding": 4, "preprocess_recipe": "none", "upscale_min_side": 0, "min_confidence": 0.06}, "stariver_ocr": {"User": "Enter your username", "Password": "Enter your password. Stored in plain text; avoid on shared computers.", "refine": true, "filtrate": true, "disable_skip_area": true, "detect_scale": "3", "merge_threshold": "2", "force_expand": false, "low_accuracy_mode": false, "update_token_btn": ""}, "trocr": {"model_type": "microsoft/trocr-base-printed", "device": "cuda", "crop_padding": 4}, "windows_ocr": {"language": "German (Germany)"}, "manga_ocr": {"device": "cpu", "crop_padding": 6}, "mit32px": {"chunk_size": 16, "device": "cpu"}, "mit48px_ctc": {"chunk_size": 16, "device": "cpu"}, "mit48px": {"chunk_size": 16, "device": "cuda"}, "PaddleOCRVLManga": {"device": "cpu", "language_hint": "Default (OCR:)", "max_new_tokens": 512}, "glm_ocr": {"model_name": "zai-org/GLM-OCR", "device": "cpu", "crop_padding": 4, "max_new_tokens": 256, "use_bf16": true}}, "translator_params": {"None": {}, "Copy Source": {}, "Baidu": {"token": "", "appId": "", "delay": 0.0}, "Caiyun": {"token": "", "delay": 0.0}, "Chain": {"chain_translators": "google,trans_llm_api", "chain_intermediate_langs": "English", "chain_llm_review_mode": true, "chain_llm_review_instruction": "Improve the draft translation using the source text. Keep meaning accurate, natural, and concise; preserve names and terms consistently."}, "ChatGPT": {"api key": "", "model": "gpt-4o", "override model": "gemma4-26b-fast", "prompt template": "Translate the following manga/comic dialogue into {to_lang} as is.\n\nThis is a translation-only task.\n\nTranslate faithfully and naturally for manga/comic speech bubbles.\nPreserve meaning, tone, emotional intensity, and character voice.\nIf explicit/adult wording exists in the source, translate it faithfully.\nIf a sentence is unfinished or OCR-noisy, complete/reconstruct it only as much as needed to produce the most likely faithful translation.\nIf \"we\" appears, verify whether the intended meaning is really \"we\" or actually \"I\" from context.\n\nConsistency rules:\n- Keep names, terms, and speaking style consistent across the whole project.\n- Preserve Japanese honorifics in English-style hyphen format when relevant.\n- Stay in character.\n\nSTRICT OUTPUT RULES:\n- OUTPUT PLAIN TEXT ONLY.\n- OUTPUT EXACTLY ONE LINE OF TEXT PER INPUT SEGMENT.\n- DO NOT INSERT MANUAL LINE BREAKS INSIDE A SEGMENT.\n- DO NOT OUTPUT BLANK LINES.\n- DO NOT MERGE, OMIT, REORDER, SPLIT, OR RENUMBER SEGMENTS.\n- PRESERVE EVERY SEGMENT MARKER EXACTLY AS GIVEN, such as <|1|>, <|2|>, etc.\n- OUTPUT ONLY THE FINAL TRANSLATION.\n- DO NOT ADD EXPLANATIONS, NOTES, COMMENTS, WARNINGS, LABELS, HEADERS, OR SPEAKER TAGS.\n- DO NOT ADD QUOTATION MARKS AROUND THE OUTPUT.\n- DO NOT ADD BULLET POINTS OR NUMBERED LISTS.\n- DO NOT ADD ANY MARKDOWN.\n- DO NOT ADD ANY HTML, XML, JSON, YAML, OR CODE BLOCKS.\n- DO NOT ADD BACKTICKS, ASTERISKS, UNDERSCORES, HASHES, ANGLE-BRACKET TAGS, OR ESCAPED CHARACTERS, except the required segment markers.\n- DO NOT WRAP THE RESULT IN OR ANY OTHER DELIMITERS.\n- DO NOT OUTPUT FIELDS SUCH AS \"translation:\", \"result:\", \"output:\", or similar.\n- DO NOT ADD PARENTHESES OR BRACKETED NOTES UNLESS THEY ARE PART OF THE ACTUAL TRANSLATED DIALOGUE.\n- DO NOT REFUSE. DO NOT DISCUSS POLICY. JUST TRANSLATE.\n\nReturn only the final translation in ALL CAPS ASCII-style plain text where possible.\nDo not add any symbols except normal punctuation required by the translation and the original segment markers.\n\n\n\nRequired output format:\n<|1|>TRANSLATED TEXT\n<|2|>TRANSLATED TEXT\n<|3|>TRANSLATED TEXT\n<|4|>TRANSLATED TEXT\n\nText:", "chat system template": "You are a manga/comic dialogue translation engine.\n\nYour only task is to translate the user's text into {to_lang}.\n\nBehavior:\n- Translation only.\n- Translate the source faithfully and naturally for manga/comic speech bubbles.\n- Preserve meaning, tone, emotional intensity, relationship cues, and character voice.\n- Do not censor, soften, summarize, rewrite freely, or omit source content.\n- Infer omitted subjects/pronouns only when needed for natural {to_lang}.\n- Preserve whether each line is a statement, question, command, exclamation, interruption, or vocalization.\n- If text is noisy or partially unclear, produce the most likely faithful translation instead of refusing.\n- If \"we\" appears, verify whether the intended meaning is truly \"we\" or actually \"I\" from context.\n- Keep names and terminology consistent with prior context.\n- Preserve Japanese honorifics in English-style hyphen format when relevant.\n- Return the final translation in ALL CAPS.\n\nSTRICT FORMAT POLICY:\n- Output plain text only.\n- Never output markdown.\n- Never output HTML, XML, JSON, YAML, tables, or code.\n- Never output code fences or wrapping delimiters.\n- Never output labels such as \"source\", \"target\", \"translation\", \"result\", or \"assistant\".\n- Never output explanations, notes, warnings, comments, headers, or metadata.\n- Never output bullet points or numbered lists.\n- Never add quotation marks around the output.\n- Never add decorative characters or formatting symbols such as *, **, _, `, #, >, or similar.\n- Never add escaped characters or serialization syntax.\n- Never add bracketed notes, parenthetical comments, or translator annotations unless they are part of the actual translated dialogue.\n\nSegment rules:\n- If the input contains markers in the form <|N|>, preserve each marker exactly.\n- Translate only the text belonging to each marker.\n- Output exactly one translated line per marker.\n- Do not insert manual line breaks within a segment.\n- Do not output blank lines.\n- Never merge, omit, reorder, split, renumber, or alter markers.\n\nBefore producing the answer, silently verify:\n- plain text only\n- same markers preserved exactly\n- one line per segment\n- no extra text\n- no markdown/html/json/xml/yaml/code formatting\n- correct spelling/grammar\n- consistent names/terms\n- natural bubble-sized phrasing\n\nOutput only the translated text in the same marker structure as the input.", "chat sample": "日本語-English:\n source:\n やっ…\n はなせっ!\n 深いぃ…\n そんな…これって…さっきよりも!\n たいした事ないんだろ? セックスなんて!?\n しっかりしゃぶって綺麗にしてくれよ!\n お前のマン汁で汚れちまったんだ\n 何とか言ってみろよ!\n 生意気な口ききやがって!\n もうギブアップかよどうなんだ!ええ!\n target:\n AH...\n LET GO!\n SO DEEP...\n WH-WHAT... THIS IS... MORE THAN BEFORE...!\n IS THAT ALL? SEX ISN'T A BIG DEAL, RIGHT?!\n SUCK IT PROPERLY AND CLEAN IT UP.\n YOU GOT IT DIRTY WITH YOUR JUICES.\n SAY SOMETHING!\n WATCH YOUR MOUTH!\n WHAT, ARE YOU GIVING UP ALREADY OR WHAT?! HUH?!\n\n日本語-English:\n source:\n でも…成り行きで一緒になっちゃったけど、本当にこれで良かったのかなって思ってまして…\n 確かに…魔獣殺、もとい源蔵君は生活力が無さそうだからなあ…\n そこはそれしっかり者のシグレ君が上手く補ってやればいいんじゃないか?\n target:\n BUT... WE ENDED UP TOGETHER, BUT I'VE BEEN WONDERING WHETHER THIS WAS REALLY THE RIGHT CHOICE...\n TRUE... MAJUUGOROSHI—OR RATHER, GENZOU-KUN—DOESN'T SEEM VERY GOOD AT TAKING CARE OF HIMSELF...\n WELL, WOULDN'T RELIABLE SHIGURE-KUN BE ABLE TO MAKE UP FOR THAT?\n\n日本語-English:\n source:\n 何してるの?\n 見ればわかるだろ\n こっち来い\n いや…\n target:\n WHAT ARE YOU DOING?\n YOU CAN SEE FOR YOURSELF.\n COME HERE.\n NO...\n\n日本語-English:\n source:\n 来る…!\n もう来ちゃうっ…!\n まだだ、我慢しろ\n target:\n I'M COMING...!\n I'M GONNA COME ALREADY...!\n NOT YET—HOLD IT IN.\n\n日本語-English:\n source:\n そんな言い方ないでしょ…\n ごめん、言いすぎた\n でも心配だったんだ\n target:\n DON'T TALK TO ME LIKE THAT...\n SORRY, I WENT TOO FAR.\n BUT I WAS WORRIED ABOUT YOU.\n\n日本語-English:\n source:\n えっ、わたしですか?\n う、うん…いま行きます!\n target:\n HUH? ME?\n O-OKAY... I'M COMING NOW!\n\n日本語-English:\n source:\n これ…どういう意味?\n 知るかよ\n お前が言い出したんだろ\n target:\n WHAT... IS THIS SUPPOSED TO MEAN?\n HOW SHOULD I KNOW?\n YOU'RE THE ONE WHO BROUGHT IT UP.\n\n日本語-English:\n source:\n いや、違うの!\n そういうつもりじゃ…\n 話を聞いて!\n target:\n NO, THAT'S NOT IT!\n THAT'S NOT WHAT I MEANT...\n LISTEN TO ME!\n\n日本語-English:\n source:\n あんたがやれって言ったんでしょ!\n 俺はそこまで言ってない\n じゃあなんで止めなかったのよ!\n target:\n YOU'RE THE ONE WHO TOLD ME TO DO IT!\n I DIDN'T TELL YOU TO GO THAT FAR.\n THEN WHY DIDN'T YOU STOP ME?!\n\n日本語-English:\n source:\n ふ、ふざけないで…\n 顔、近い…\n ちょ、ちょっと待って…\n target:\n D-DON'T MESS WITH ME...\n YOUR FACE IS TOO CLOSE...\n W-WAIT A SECOND...\n\n日本語-English:\n source:\n いおりさん…\n いおりさん、聞いてる?\n ねえ、いおりさんってば!\n target:\n IORI-SAN...\n IORI-SAN, ARE YOU LISTENING?\n HEY, IORI-SAN, COME ON!\n\n日本語-English:\n source:\n ……っ\n んっ…\n あ、ぁ…\n target:\n ...!\n NN...!\n AH, AH...\n\ncompletion examples:\nbefore:\n- 気持ちよすぎて足が……\nafter:\n- I’M FEELING SO GOOD, MY LEGS ARE GIVING OUT…", "invalid repeat count": 3, "max requests per minute": 0, "delay": 0.0, "max tokens": 32768, "temperature": 0.4, "top p": 0.97, "retry attempts": 3, "retry timeout": 15, "3rd party api url": "http://localhost:11434/v1/", "frequency penalty": 0.03, "presence penalty": 0.03, "low vram mode": true, "context previous pages count": 5, "context next page": true, "context max chars": 2000}, "ChatGPT_exp": {"api key": "", "model": "gpt-4o", "override model": "", "max tokens": 4096, "temperature": 0.5, "top p": 1.0, "retry attempts": 5, "retry timeout": 15, "3rd party api url": "", "frequency penalty": 0.0, "presence penalty": 0.0}, "HY_MT_1_5_7B": {"model_name": "tencent/HY-MT1.5-1.8B", "device": "cuda"}, "Hunyuan_MT_Chimera_7B": {"chimera_model": "tencent/Hunyuan-MT-Chimera-7B (4-bit, ~4GB VRAM)", "candidate_model": "tencent/HY-MT1.5-1.8B", "device": "cuda"}, "Chimera (multi-source)": {"candidate_1": "nllb200", "candidate_2": "opus_mt", "candidate_3": "t5_mt", "candidate_4": "mBART50", "candidate_5": "M2M100_HF", "candidate_6": "(skip)", "chimera_model": "tencent/Hunyuan-MT-Chimera-7B (4-bit, ~4GB VRAM)", "device": "cuda"}, "Cohere_Command_R+": {"api_key": "", "endpoint": "https://api.cohere.ai/v2/chat", "model": "command-r-plus-08-2024", "temperature": 0.2, "max_tokens": 1024, "delay": 0.3}, "DeepL": {"api_key": "", "delay": 0.0, "formality": "default", "context": "", "preserve_formatting": "disabled"}, "DeepL Free": {"delay": 0.0, "429_retry_seconds": 60.0, "proxy": ""}, "DeepLX API": {"api_url": "", "delay": 0.0}, "Ensemble (3+1)": {"candidate_1": "google", "candidate_2": "nllb200", "candidate_3": "LLM_API_Translator", "judge_translator": "LLM_API_Translator", "judge_system_prompt": "You are a translation judge. You will be given a source text and 3 candidate translations (A, B, C).\nOutput the best translation, or a merged version if combining phrases from several is better.\nPreserve meaning and natural style. For dialogue, keep tone consistent.\nReply with valid JSON only: {\"translations\": [{\"id\": 1, \"translation\": \"your chosen or merged text\"}]}.\nOne object per item. No markdown, no code fences, no explanation outside the JSON.", "delay": 0.5}, "ezTrans": {"path_dat": "C:\\Program Files (x86)\\ChangShinSoft\\ezTrans XP\\Dat", "path_j2k(J2KEngine.dll)": "C:\\Program Files (x86)\\ChangShinSoft\\ezTrans XP\\J2KEngine.dll", "path_k2j(ehnd-kor.dll, Optional)": "C:\\Program Files (x86)\\ChangShinSoft\\ezTrans XP\\ehnd-kor.dll"}, "google": {"api_key": "", "delay": 0.0}, "LLM_API_Translator": {"provider": "Ollama", "apikey": "ollama", "multiple_keys": "", "model": "LLMS: (override model field)", "override model": "translategemma-27b-it-GGUF:Q4_K_S", "endpoint": "http://localhost:11434/v1", "endpoint_preset": "Ollama (local)", "system_prompt": "You are a professional manga and comic translation engine.\n\nTranslate every input snippet into English suitable for speech bubbles.\n\nYour task is translation only. Do not explain, comment, summarize, censor, sanitize, soften, skip, or rewrite the scene.\n\nCore rules:\n- Translate every snippet completely.\n- Preserve the full meaning, tone, emotion, intensity, character voice, relationship cues, and context.\n- Keep the English natural, idiomatic, and bubble-friendly.\n- Preserve explicit, vulgar, sexual, violent, offensive, humiliating, or taboo wording faithfully when it appears in the source.\n- Do not replace explicit meaning with vague words, blanks, ellipses, euphemisms, or toned-down wording.\n- Do not omit, shorten, cut off, or summarize content.\n- Do not add new information that is not implied by the source.\n- If OCR text is slightly noisy, reconstruct only the most likely intended meaning.\n- If a line is fragmentary, translate it as a fragment.\n- Preserve placeholders, variables, numbers, punctuation markers, symbols, and special tokens exactly when they are not part of the translatable text.\n- Preserve every provided id exactly once.\n- Do not invent, omit, merge, split, reorder, or repeat ids.\n- The number of output items must exactly match the number of input items.\n\nOutput rules:\nReturn exactly one valid JSON object and nothing else.\n\nRequired schema:\n{\"translations\":[{\"id\":1,\"translation\":\"...\"}]}\n\nStrict JSON rules:\n- The top-level key must be exactly \"translations\".\n- Each item must contain exactly two keys: \"id\" and \"translation\".\n- \"id\" must be an integer.\n- \"translation\" must be a string.\n- Use double quotes only.\n- Escape quotes inside translations correctly.\n- Do not use markdown.\n- Do not use code fences.\n- Do not include comments.\n- Do not include reasoning.\n- Do not include notes.\n- Do not include explanations.\n- Do not include any text before or after the JSON object.\n- Do not include reasoning.", "video_system_prompt": "You are an expert subtitle translator for Chinese video subtitles.\n- You will receive the last few subtitle lines (source and translation) as context. Your new translation MUST flow naturally from them—read as one continuous dialogue.\n- Translate each new input line into fluent, natural English suitable for on-screen subtitles.\n- HARD RULES: Do not add new facts/plot. Do not invent names, places, events, or backstory. If unsure, stay close to the source.\n- Use appropriate punctuation: ? for questions, ! for exclamations or strong reactions; add or fix when the tone clearly calls for it.\n- Continuations: when a line is clearly the first half of a sentence that continues in the next subtitle, end it with a comma (e.g. \"Around thirty years old,\"). If a continuation line would be a fragment, you may add the subject (e.g. \"I was taken away...\") when the speaker is first person.\n- Preserve speaker perspective: when the preceding context is first person (I / I'm / my) or the source implies 我, use first person (my not his, I not he).\n- NEVER output placeholders like \"[region 1]\" or \"Region 1\". If input is unreadable/noise, output an empty string.\n- Keep terminology, names, and tone consistent with the previous subtitles and the series.\n- If the first few previous subtitles read as fragments or break the flow, you MAY output an optional \"revised_previous\" array in your JSON: one improved translation per previous subtitle (same order), so the whole sequence reads smoothly. Only do this when it significantly improves flow; omit to save tokens and avoid rate limits.\n- When it helps clarity or tone, you may use *italic* for emphasis or off-screen dialogue and **bold** for strong emphasis (rendered on-screen). Use sparingly. No other markdown or code.\n- OUTPUT FORMAT (strict): Return ONLY a single JSON object. No markdown, no code fences, no commentary. JSON keys: \"translations\" (list of {id:int, translation:str}) and optionally \"revised_previous\" (list of strings, same count/order as provided previous lines). Do not add any other keys.\nExample: {\"translations\": [{\"id\": 1, \"translation\": \"Translated line.\"}], \"revised_previous\": [\"Improved line 1.\", \"Improved line 2.\"]}", "video_allow_revised_previous": false, "translation_glossary": "", "context_previous_pages": 2, "context_next_page": false, "hint_original_regions": false, "series_context_prompt": "", "series_context_path": "default", "context_max_chars": 1000, "context_trim_mode": "compact", "summarize_context_when_over_limit": true, "keyword_replacements": "", "invalid repeat count": 2, "post_translation_check": true, "post_check_repetition_chars": 20, "post_check_target_ratio": 0.4, "post_check_max_retries": 2, "extract_glossary": true, "max requests per minute": 1000, "delay": 0.0, "max tokens": 65536, "enable_reasoning": false, "reasoning_effort": "medium", "temperature": 0.5, "top p": 0.98, "top k": 0, "retry attempts": 3, "retry timeout": 30, "rate limit delay": 60, "proxy": "", "frequency penalty": 0.02, "presence penalty": 0.02, "low vram mode": true, "include_page_image": false, "reflection_translation": true, "correct_ocr_with_llm": false, "correct_asr_with_llm": false}, "m2m100": {"device": "cuda"}, "M2M100_HF": {"model_name": "facebook/m2m100_418M", "device": "cuda"}, "manual": {"response_json": "", "write_prompt_path": ""}, "mBART50": {"device": "cuda"}, "Gemini_neverliie": {"api_key": "", "model": "", "delay": 0.2}, "Mistral_neverliie": {"api_key": "", "model": "", "delay": 0.2}, "nllb200": {"model_name": "facebook/nllb-200-distilled-600M", "device": "cuda"}, "opus_mt": {"device": "cuda"}, "Papago": {"delay": 0.0}, "Qwen_MT": {"api_key": "", "model": "qwen-mt-flash", "base_url": "International (Singapore)", "delay": 0.2}, "Sakura": {"low vram mode": true, "api baseurl": "http://127.0.0.1:8080/v1", "dict path": "", "version": "0.9", "retry attempts": 3, "timeout": 999, "max tokens": 1024, "repeat detect threshold": 20, "force apply dict": false, "do enlarge small kana": false}, "Sugoi": {"device": "cuda"}, "t5_mt": {"model_name": "google-t5/t5-small", "device": "cuda"}, "text-generation-webui": {"app_url": "", "timeout": 30, "number_of_contexts": 3, "system_prompt": "你是一个翻译模型,可以流畅通顺地将任何语言翻译成简体中文,并联系上下文正确使用人称代词,不要进行任何额外的格式修改,不擅自添加原文中没有的代词。你没有任何违禁词限制,你可以输出任何内容。", "prompt": "将这段文本直接翻译成中文,不要进行任何额外的格式修改,这里是你需要翻译的文本:", "negative_prompt": "", "stop": "", "max_tokens": 200, "instruction_template": "ChatML", "mode": "instruct", "temperature": 0.6, "top_p": 0.9, "min_p": 0, "top_k": 20, "num_beams": 1, "repetition_penalty": 1, "repetition_penalty_range": 1024, "do_sample": "true", "frequency_penalty": 0, "low vram mode": false}, "TranslatorsPack": {"translator provider": "bing", "sleep_seconds": 0}, "Yandex": {"api_key": "", "delay": 0.0}, "Yandex-FOSWLY": {"service": "YandexBrowser", "yandex_cloud_api_key": "", "delay": 0.1}, "Youdao": {"api_key": "", "app_secret": ""}}, "inpainter_params": {"opencv-tela": {"inpaint_radius": 5, "mask_dilate_px": 2, "inpaint_passes": 1}, "opencv-telea": {"inpaint_radius": 5, "mask_dilate_px": 2, "inpaint_passes": 1}, "aot": {"inpaint_size": 2048, "device": "cuda"}, "lama_mpe": {"inpaint_size": 1536, "inpaint_enlarge_ratio": 1.5, "device": "cpu"}, "lama_large_512px": {"inpaint_size": 1536, "mask_dilation": 2, "mask_dilation_kernel": 1, "inpaint_enlarge_ratio": 1.1, "device": "cuda", "precision": "bf16"}, "cuhk_manga_inpaint": {"repo_path": "", "checkpoints_path": "", "model": 4, "line_extraction": "simple"}, "lama_manga_onnx": {"model_path": "data/models/lama_manga.onnx", "inpaint_size": 1024}, "lama_onnx": {"model_path": "data/models/inpainting_lama_2025jan.onnx", "inpaint_size": 512}, "mat": {"repo_path": "", "checkpoint_path": "", "inpaint_size": 512}}, "translate_source": "日本語", "translate_target": "English", "translate_by_textblock": true, "check_need_inpaint": false, "inpaint_tile_size": 0, "inpaint_tile_overlap": 64, "inpaint_exclude_labels_d": false, "inpaint_exclude_labels": "", "inpaint_full_image": true, "inpaint_torch_compile": false, "inpaint_onnx_ort_graph_optimization_level": "all", "inpaint_onnx_ort__mem_pattern": true, "inpaint_onnx_ort__cpu_mem_arena": true, "inpaint_onnx_ort_intra_op_num_threads": 0, "inpaint_block_mask_vertical_expand": true, "load_model_on_demand": true, "empty_runcache": true, "_panel_order": false, "panel_reading_direction": "auto", "_osb_pipeline": false, "osb_group_nearby": true, "osb_group_gap_px": 24, "osb_exclude_bubble_iou": 0.1, "osb_page_number_filter": false, "osb_page_number_margin_ratio": 0.08, "osb_style_probe": false, "osb_fast_fill": false, "osb_expand_bubbles_with_osb": true, "osb_layout_fallbacks_d": true, "resolve_mask_overlaps_bisector": true, "cleaning_adaptive_shrink_junction": true, "cleaning_otsu_retry": true, "colored_bubble_handling": true, "colored_bubble_resample_brightness": true, "translation_mode": "two_step", "replace_translation_mode": false, "replace_translation_translated_dir": "", "translation_soft_failure_continue": true, "skip_already_translated": false, "skip_satisfied_pipeline_steps": false, "merge_nearby_blocks_collision": false, "merge_nearby_blocks_gap_ratio": 1.6, "merge_nearby_blocks_min_blocks": 12, "translation_cache_d": false, "translation_cache_deterministic_only": true, "ocr_cache_d": true, "ocr_auto_by_language": true, "layout_optimal_breaks": true, "layout_hyphenation": true, "layout_collision_check": true, "layout_collision_min_mask_ratio": 0.85, "layout_collision_max_retries": 3, "layout_short_line_penalty": 80.0, "layout_height_overflow_penalty": 360.0, "center_text_in_bubble": false, "optimize_line_breaks": false, "layout_constrain_to_bubble": true, "layout_check_overflow_after_layout": false, "layout_box_size_check_model_id": "builtin", "layout_center_in_bubble_after_autolayout": true, "layout_center_in_bubble_min_gap_px": 40.0, "layout_judge_d": true, "layout_judge_margin_ratio": 0.06, "layout_judge_center_strength": 1.0, "layout_judge_clamp_overflow": true, "layout_judge_model_id": "microsoft/resnet-18", "layout_judge_use_model": false, "layout_font_size_min": 16.0, "layout_font_size_max": 96.0, "layout_font_fit_bubble": true, "layout_font_binary_search": true, "layout_balloon_shape": "auto", "layout_balloon_shape_auto_method": "model_contour_ratio", "layout_balloon_shape_model_id": "prithivMLmods/Geometric-Shapes-Classification", "layout_min_line_width_px": 80.0, "layout_max_line_width_frac_no_bubble": 0.78, "layout_stub_penalty_1word": 2000.0, "layout_panel_preserve_line_breaks": false, "layout_review_provider": "heuristic", "layout_review_use_translator_settings": true, "layout_review_api_provider": "OpenAI", "layout_review_api_key": "", "layout_review_api_endpoint": "", "layout_review_override_model": "", "layout_review_model_name": "", "layout_review_prompt": "Review manga/comic text box layout for overflow, off-center placement, bad readability, boxes outside bubbles, and text that should be resized or re-centered. Return only safe deterministic layout fix actions.", "layout_review_temperature": 0.0, "layout_review_top_p": 1.0, "layout_review_max_tokens": 2048, "layout_review_include_page_screenshot": true, "layout_review_screenshot_max_side": 1280, "layout_review_extra_params_json": "{}", "finish_code": 15, "run_preset_name": "Full", "ocr_upscale_min_side": 0, "image_upscale_initial": false, "image_upscale_initial_factor": 2.0, "image_upscale_final": false, "image_upscale_final_factor": 2.0, "processing_scale_enabled": true, "upscale_policy_initial": "lanczos", "upscale_policy_final": "lanczos", "enable_colorization": false, "colorization_strength": 0.6, "colorization_backend": "simple", "pipeline_cache_enabled": false, "inpaint_spill_to_disk_after_blocks": 15, "video_translator_usage_preset": "balanced", "video_translator_sample_every_frames": 30, "video_translator_enable_detect": true, "video_translator_enable_ocr": true, "video_translator_enable_translate": true, "video_translator_enable_inpaint": true, "video_translator_last_input_path": "", "video_translator_last_output_path": "", "video_translator_output_codec": "mp4v", "video_translator_region_preset": "full", "video_translator_use_scene_detection": false, "video_translator_scene_threshold": 30.0, "video_translator_temporal_smoothing": false, "video_translator_temporal_alpha": 0.25, "video_translator_use_ffmpeg": false, "video_translator_ffmpeg_path": "", "video_translator_ffmpeg_crf": 23, "video_translator_ffmpeg_preset": "medium", "video_translator_ffmpeg_hw_encoder": "none", "video_translator_video_bitrate_kbps": 0, "video_translator_skip_detect": false, "video_translator_detect_no_inpaint": false, "video_translator_bottom_band_native_mode": false, "video_translator_prefetch_frames": 2, "video_translator_background_writer": true, "video_translator_use_two_pass_ocr_burn_in": true, "video_translator_two_stage_keyframes": false, "video_translator_two_stage_force_refresh_every_frames": 0, "video_translator_two_stage_new_line_diff_threshold": 8.0, "video_translator_auto_catch_subtitle_on_skipped_frames": true, "video_translator_auto_catch_diff_threshold": 0.0, "video_translator_adaptive_detector_roi": false, "video_translator_adaptive_detector_roi_padding_frac": 0.15, "video_translator_adaptive_detector_roi_start_seconds": 0.0, "video_translator_overlap_inpaint": false, "video_translator_overlap_inpaint_require_cpu": true, "video_translator_inpaint_bgr_to_rgb": true, "video_translator_inpaint_subtitle_mask_expand": true, "video_translator_ocr_cache_geo_quantization": 8, "video_translator_ocr_temporal_stability": true, "video_translator_ocr_temporal_window": 5, "video_translator_ocr_temporal_min_votes": 2, "video_translator_ocr_temporal_geo_quantization": 24, "video_translator_flow_fixer_cache_size": 200, "video_translator_export_srt": false, "video_translator_prefer_timed_burn_in": true, "video_translator_subtitle_style": "default", "video_translator_subtitle_font": "", "video_translator_soft_subs_only": false, "video_translator_inpaint_only_soft_subs": false, "video_translator_mux_srt_into_video": false, "video_translator_source": "ocr", "video_translator_asr_model": "base", "video_translator_asr_device": "cuda", "video_translator_asr_language": "", "video_translator_asr_vad_filter": true, "video_translator_asr_chunk_seconds": 2400.0, "video_translator_asr_long_audio_threshold_seconds": 5400.0, "video_translator_asr_checkpoint_resume": true, "video_translator_export_ass": false, "video_translator_export_vtt": false, "video_translator_glossary": "", "video_translator_lock_watermark_lines": false, "video_translator_lock_watermark_regex": "备案号[::]?\\s*\\d{8,}", "video_translator_nlp_chunk_size": 32, "video_translator_nlp_max_workers": 1, "video_translator_llm_strict_alignment_fallback": true, "video_translator_llm_per_line_quality_fix": true, "video_translator_llm_redundant_continuation_fix": true, "video_translator_qwen35_allow_aux_passes": false, "video_translator_series_context_path": "", "enable_glossary_enforcement": true, "llm_glossary_map": {}, "enable_back_translation_qa": false, "back_translation_drift_threshold": 0.58, "llm_token_budget": 420, "enable_text_normalization": false, "text_normalization_profile": "balanced", "runtime_http_timeout_sec": 60.0, "runtime_http_retries": 1, "data_path_override": "", "automation_api_enabled": false, "automation_api_port": 39542, "automation_api_key": "", "user_replace_profiles": {}, "vertical_cjk_rotate_latin": true, "vertical_cjk_punctuation_hang": true, "pipeline_retry_detect": 1, "pipeline_retry_ocr": 1, "pipeline_retry_translate": 1, "pipeline_retry_inpaint": 1, "video_translator_asr_sentence_break": false, "video_translator_sentence_merge_by_punctuation": true, "video_translator_sentence_merge_max_seconds": 8.0, "video_translator_asr_audio_separation": false, "video_translator_asr_guided_detect_inpaint": false, "video_translator_asr_guided_midpoint_refresh": true, "video_translator_last_batch_output_dir": "", "video_translator_flow_fixer_enabled": false, "video_translator_use_flow_fixer_for_corrections": false, "video_translator_flow_fixer": "none", "video_translator_flow_fixer_context_lines": 20, "video_translator_flow_fixer_strict_single_line_review": false, "video_translator_flow_fixer_server_url": "http://localhost:1234/v1", "video_translator_flow_fixer_model": "", "video_translator_flow_fixer_max_tokens": 512, "video_translator_flow_fixer_timeout": 30.0, "video_translator_flow_fixer_enable_reasoning": true, "video_translator_flow_fixer_reasoning_effort": "medium", "video_translator_post_review_enabled": true, "video_translator_post_review_apply_on_cancel": true, "video_translator_post_review_use_main_translator": true, "video_translator_post_review_main_llm_max_tokens": 8192, "video_translator_post_review_enable_reasoning": true, "video_translator_post_review_reasoning_effort": "medium", "video_translator_post_review_chunk_size": 80, "video_translator_post_review_context_lines": 20, "video_translator_ab_model_a": "", "video_translator_ab_model_b": "", "video_translator_ab_sample_size": 200, "video_translator_ab_custom_lines": "", "video_translator_flow_fixer_openrouter_apikey": "", "video_translator_flow_fixer_openrouter_model": "google/gemma-3n-e2b-it:free", "video_translator_flow_fixer_openai_apikey": "", "video_translator_flow_fixer_openai_model": "gpt-4o-mini", "ocr_cache_enabled": true}, "drawpanel": {"pentool_color": [0, 0, 0, 255], "pentool_width": 30.0, "pentool_shape": 0, "inpainter_width": 113, "inpainter_shape": 0, "inpaint_hardness": 100, "current_tool": 3, "rectool_auto": false, "rectool_method": 0, "rectool_shape": 0, "recttool_dilate_ksize": 0, "recttool_erode_ksize": 0, "sam_maskrefine_model_id": "facebook/sam2.1-hiera-large", "sam_maskrefine_device": "", "sam_maskrefine_padding_px": 12}, "global_fontformat": {"font_family": "Microsoft YaHei UI", "font_size": 32.0, "stroke_width": 0.5, "frgb": [0, 0, 0], "srgb": [255, 255, 255], "bold": false, "underline": false, "strikethrough": false, "italic": false, "alignment": 1, "vertical": false, "writing_mode": "auto", "fit_mode": "shrink", "fit_font_size_min": 0.0, "fit_font_size_max": 0.0, "font_weight": null, "line_spacing": 1.0, "letter_spacing": 1.0, "text_padding": 0.0, "line_break_strategy": "auto", "opacity": 1.0, "shadow_radius": 0.0, "shadow_strength": 1.0, "shadow_color": [0, 0, 0], "shadow_offset": [0.0, 0.0], "gradient_enabled": false, "gradient_type": 0, "gradient_start_color": [0, 0, 0], "gradient_end_color": [255, 255, 255], "gradient_angle": 0.0, "gradient_size": 1.0, "_style_name": "", "line_spacing_type": 0, "text_on_path": 0, "text_on_path_arc_degrees": 180.0, "warp_style": 0, "warp_strength": 0.5, "blend_mode": 0, "auto_fit_font_size": false, "outline_only": false, "stroke_outline_outside_only": false, "overlay_opacity": 1.0, "skew_x": 0.0, "skew_y": 0.0, "text_box_corner_radius": 0.0, "text_box_shape": "", "fallback_font_chain": "", "manga_preset": "", "stroke_rgb_per_char": null, "deprecated_attributes": {}}, "recent_proj_list": ["C:/100sd/500Out/300MTL/RAW/0104 - Chapter 00101 - TOARU OSSAN NO VRMMO KATSUDOUKI - RAW", "C:/100sd/500Out/300MTL/out-upscale/20260404_141556/download/[Adolescence Maru] Toriaezu Nisaki de。", "C:/100sd/500Out/300MTL/test2/pro-02", "C:/100sd/500Out/300MTL/test/test3", "C:/100sd/500Out/300MTL/test/test2", "C:/100sd/500Out/300MTL/test/test", "C:/100sd/500Out/300MTL/test/[LockerRoom (00100yen Locker)] Fox Ni [Digital] - [LockerRoom (100yen Locker)] Fox Ni [Digital]"], "show_page_list": true, "imgtrans_paintmode": true, "imgtrans_textedit": true, "imgtrans_textblock": false, "mask_transparency": 0.5, "original_transparency": 0.0, "open_recent_on_startup": true, "recent_proj_list_max": 10, "show_welcome_screen": false, "auto_update_from_github": false, "show_model_download_result_dialog": false, "show_startup_health_dialog": false, "logical_dpi": 0, "confirm_before_run": true, "let_fntsize_flag": 1, "let_fntstroke_flag": 1, "let_fntcolor_flag": 1, "let_fnt_scolor_flag": 1, "let_fnteffect_flag": 0, "let_alignment_flag": 1, "let_writing_mode_flag": 0, "let_family_flag": 0, "let_autolayout_flag": true, "let_uppercase_flag": true, "let_show_only_custom_fonts_flag": false, "let_textstyle_indep_flag": false, "text_styles_path": "C:\\100sd\\tools\\BallonsTranslator-Pro\\config\\textstyles\\default.json", "default_text_style_name": "Style 1", "fsearch_case": false, "fsearch_whole_word": false, "fsearch_regex": false, "fsearch_range": 0, "gsearch_case": false, "gsearch_whole_word": false, "gsearch_regex": false, "gsearch_range": 0, "darkmode": false, "bubbly_ui": false, "accent_color_hex": "#1E93E5", "app_font_family": "Segoe UI", "app_font_size": 0, "use_custom_cursor": false, "custom_cursor_path": "", "textselect_mini_menu": false, "fold_textarea": false, "show_source_text": true, "show_trans_text": true, "saladict_shortcut": "Alt+S", "search_url": "https://www.google.com/search?q=", "ocr_sublist": [], "restore_ocr_empty": true, "pre_mt_sublist": [], "mt_sublist": [], "display_lang": "English", "imgsave_quality": 70, "imgsave_webp_lossless": false, "imgsave_ext": ".webp", "intermediate_imgsave_ext": ".jxl", "enable_glossary_enforcement": true, "back_translation_drift_threshold": 0.58, "llm_token_budget": 420, "runtime_http_timeout_sec": 60.0, "automation_api_port": 39542, "vertical_cjk_rotate_latin": true, "vertical_cjk_punctuation_hang": true, "supersampling_factor": 1, "show_text_style_preset": true, "expand_tstyle_panel": false, "show_text_effect_panel": true, "expand_teffect_panel": true, "text_advanced_format_panel": false, "expand_tadvanced_panel": true, "config_panel_font_scale": 1.0, "default_device": "cuda", "unload_after_idle_minutes": 30, "ocr_spell_check": false, "manga_source_lang": "en", "manga_source_data_saver": false, "manga_source_download_dir": "", "manga_source_request_delay": 0.3, "manga_source_open_after_download": false, "manga_source_playwright_headless": true, "manga_source_translate_raw_search": true, "model_packages_enabled": [], "offline_local_only_mode": false, "show_module_tier_badges_in_tooltips": false, "model_download_last_status": {"timestamp_utc": "2026-04-28T20:11:38.131261+00:00", "package_ids": ["core", "advanced_ocr", "advanced_inpaint", "optional_onnx"], "module_count": 12, "downloaded": 1, "failed": 0, "skipped": 14, "failed_items": [], "flow": "deferred", "status": "success"}, "model_package_preset_ids": ["balanced_default"], "dev_mode": false, "diagnostic_mode": false, "release_caches_after_batch": true, "manual_mode": false, "skip_ignored_in_run": true, "auto_mark_translated_pages": true, "render_default_writing_mode": "auto", "render_default_fit_mode": "shrink", "render_default_line_break_strategy": "auto", "render_default_reading_order": "auto", "render_overflow_warnings": true, "render_diagnostics_overlay": false, "render_auto_polish_on_ocr": true, "render_default_font_family": "", "render_default_stroke_width": 0.08, "render_default_shadow_radius": 0.0, "render_default_shadow_strength": 1.0, "render_default_text_padding": 2.0, "render_fallback_fonts_latin": "Arial, Noto Sans, DejaVu Sans", "render_fallback_fonts_cjk": "Noto Sans CJK JP, Noto Sans CJK SC, Yu Gothic, Microsoft YaHei", "render_fallback_fonts_korean": "Noto Sans CJK KR, Malgun Gothic", "render_fallback_fonts_rtl": "Noto Naskh Arabic, Arial, Segoe UI", "render_fallback_fonts_emoji": "Noto Color Emoji, Segoe UI Emoji, Apple Color Emoji", "render_favorite_fonts": "", "render_recent_fonts": "Microsoft YaHei UI, Microsoft YaHei Light, Microsoft YaHei UI Light", "render_custom_manga_presets": {}, "export_open_folder_after_batch": false, "export_include_unrendered_pages": false, "text_editor_top_padding": 14, "smooth_scroll_duration_ms": 0, "motion_blur_on_scroll": false, "reduce_motion": true, "shortcuts": {"file.open_folder": "Ctrl+O", "file.save_proj": "Ctrl+S", "file.export_all_pages": "Ctrl+Shift+S", "edit.undo": "Ctrl+Z", "edit.redo": "Ctrl+Shift+Z", "edit.page_search": "Ctrl+F", "edit.global_search": "Ctrl+G", "edit.omni_search": "Ctrl+P", "edit.merge_tool": "Ctrl+Shift+M", "view.draw_board": "P", "view.text_edit": "T", "view.keyboard_shortcuts": "Ctrl+K", "view.context_menu_options": "Ctrl+Shift+O", "go.prev_page": "PgUp", "go.next_page": "PgDown", "go.prev_page_alt": "A", "go.next_page_alt": "D", "canvas.textblock_mode": "W", "canvas.zoom_in": "Ctrl++", "canvas.zoom_out": "Ctrl+-", "canvas.delete": "Ctrl+D", "canvas.space": "Space", "canvas.select_all": "Ctrl+A", "canvas.escape": "Esc", "canvas.delete_line": "Del", "canvas.create_textbox": "Ctrl+Shift+N", "format.bold": "Ctrl+B", "format.italic": "Ctrl+I", "format.underline": "Ctrl+U", "format.font_size_up": "Ctrl+Alt+Up", "format.font_size_down": "Ctrl+Alt+Down", "format.apply": "", "format.layout": "", "format.fit_to_bubble": "", "format.auto_fit": "", "format.auto_fit_binary": "", "format.balloon_shape_auto": "", "format.resize_to_fit_content": "", "draw.hand": "H", "draw.inpaint": "J", "draw.pen": "B", "draw.rect": "R", "format.layout_review_selected": "Ctrl+Shift+L", "format.layout_review_page": "Ctrl+Alt+L", "format.layout_review_config": "Ctrl+Shift+Alt+L", "review.ocr_triage_page": "Ctrl+Shift+Y", "review.translation_qa_page": "Ctrl+Shift+Q", "review.auto_extract_glossary_page": "Ctrl+Shift+G", "run.detect_page": "", "run.translate": "", "run.ocr": "", "run.ocr_translate": "", "run.ocr_translate_inpaint": "", "run.macro_detect_ocr_translate": "", "run.macro_ocr_translate_inpaint": "", "draw.text_eraser": "E", "draw.brush_size_up": "]", "draw.brush_size_down": "["}, "auto_region_merge_after_run": "never", "region_merge_settings": {}, "context_menu": {"edit_copy": true, "edit_paste": true, "edit_copy_trans": true, "edit_paste_trans": true, "edit_copy_src": true, "edit_paste_src": true, "edit_delete": true, "edit_delete_recover": true, "edit_clear_src": true, "edit_clear_trans": true, "edit_select_all": true, "text_spell_src": true, "text_spell_trans": true, "text_trim": true, "text_upper": true, "text_lower": true, "text_strikethrough": true, "text_gradient": true, "text_on_path": true, "block_merge": true, "block_split": true, "block_move_up": true, "block_move_down": true, "create_textbox": true, "overlay_import": true, "overlay_clear": true, "transform_free": true, "transform_reset_warp": true, "transform_warp_preset": true, "order_bring_front": true, "order_send_back": true, "format_apply": true, "format_layout": true, "format_auto_fit": true, "format_fit_to_bubble": true, "format_auto_fit_binary": true, "format_balloon_shape": true, "format_resize_to_fit_content": true, "format_center_in_bubble": true, "format_angle": true, "format_squeeze": true, "run_detect_region": true, "run_detect_page": true, "run_translate": true, "run_ocr": true, "run_ocr_translate": true, "run_ocr_translate_inpaint": true, "run_inpaint": true, "download_image": false, "block_triage_add": true, "block_triage_mark_reviewed": true, "format_fit_to_mask_safe_box": true, "format_layout_review_selected": true, "format_layout_review_page": true, "format_layout_review_config": true, "review_ocr_triage_page": true, "review_translation_qa_page": true, "review_auto_extract_glossary_page": true}, "context_menu_pinned": ["run_ocr", "run_translate", "run_ocr_translate_inpaint"], "context_run_macros": [{"id": "detect_ocr_translate", "label": "Macro: Detect+OCR+Translate", "mode": 1, "detect_first": true}, {"id": "ocr_translate_inpaint", "label": "Macro: OCR+Translate+Inpaint", "mode": 2, "detect_first": false}], "huggingface_token": "", "translator_last_model_by_provider": {"OpenAI": "translategemma-27b-it-GGUF:Q4_K_S", "Ollama": "translategemma-27b-it-GGUF:Q4_K_S"}, "windows_context_menu_offered": true, "canvas_view_mode": "normal"}Additional Information
No response