Loading modules/__init__.py +1 −1 Original line number Diff line number Diff line Loading @@ -2,7 +2,7 @@ from .ocr import OCR, OCRBase, OCRMIT32px, OCRMIT48pxCTC, MangaOCR from .textdetector import TEXTDETECTORS, TextDetectorBase, ComicTextDetector from .translators import TRANSLATORS, BaseTranslator from .inpaint import INPAINTERS, InpainterBase, PatchmatchInpainter, AOTInpainter, LamaInpainterMPE from .base import DEFAULT_DEVICE from .base import DEFAULT_DEVICE, GPUINTENSIVE_SET GET_VALID_TEXTDETECTORS = lambda : list(TEXTDETECTORS.module_dict.keys()) GET_VALID_TRANSLATORS = lambda : list(TRANSLATORS.module_dict.keys()) Loading modules/translators/trans_chatgpt.py +10 −3 Original line number Diff line number Diff line Loading @@ -142,8 +142,15 @@ class GPTTranslator(BaseTranslator): else: return None def _assemble_prompts(self, from_lang: str, to_lang: str, queries: List[str]) -> List[str]: def _assemble_prompts(self, queries: List[str], from_lang: str = None, to_lang: str = None, max_tokens = None) -> List[str]: if from_lang is None: from_lang = self.lang_map[self.lang_source] if to_lang is None: to_lang = self.lang_map[self.lang_target] prompt = '' if max_tokens is None: max_tokens = self.max_tokens # return_prompt = self.params['return prompt'] prompt_template = self.params['prompt template']['content'].format(to_lang=to_lang).rstrip() Loading Loading @@ -200,7 +207,7 @@ class GPTTranslator(BaseTranslator): queries = src_list # return_prompt = self.params['return prompt'] chat_sample = self.chat_sample for prompt, num_src in self._assemble_prompts(from_lang, to_lang, queries): for prompt, num_src in self._assemble_prompts(queries, from_lang, to_lang): ratelimit_attempt = 0 retry_attempt = 0 while True: Loading ui/dlconfig_parse_widgets.py +2 −2 Original line number Diff line number Diff line from typing import List, Callable from modules import GET_VALID_INPAINTERS, GET_VALID_TEXTDETECTORS, GET_VALID_TRANSLATORS, GET_VALID_OCR, \ BaseTranslator, DEFAULT_DEVICE BaseTranslator, DEFAULT_DEVICE, GPUINTENSIVE_SET from utils.logger import logger as LOGGER from .stylewidgets import ConfigComboBox, NoBorderPushBtn, CustomComboBox from .constants import CONFIG_FONTSIZE_CONTENT, CONFIG_COMBOBOX_MIDEAN, CONFIG_COMBOBOX_LONG, CONFIG_COMBOBOX_SHORT, CONFIG_COMBOBOX_HEIGHT Loading Loading @@ -162,7 +162,7 @@ class ParamWidget(QWidget): if param_key == 'device' and DEFAULT_DEVICE == 'cpu': param_dict['select'] = 'cpu' for ii, device in enumerate(param_dict['options']): if device == 'cuda': if device in GPUINTENSIVE_SET: model = param_widget.model() item = model.item(ii, 0) item.setEnabled(False) Loading ui/keywordsubwidget.py +4 −4 Original line number Diff line number Diff line import re, traceback from qtpy.QtWidgets import QHeaderView, QTableView, QAbstractItemView, QListWidget, QHBoxLayout, QListWidgetItem, QWidget, QGridLayout, QPushButton, QVBoxLayout from qtpy.QtCore import Qt, Signal, QModelIndex from qtpy.QtGui import QContextMenuEvent, QShowEvent, QHideEvent, QStandardItem, QStandardItemModel from typing import List, Union, Dict from qtpy.QtWidgets import QHeaderView, QTableView, QWidget, QVBoxLayout from qtpy.QtCore import Qt, Signal from qtpy.QtGui import QStandardItem, QStandardItemModel from typing import List, Dict from utils.logger import logger as LOGGER from .misc import FontFormat Loading ui/mainwindow.py +40 −5 Original line number Diff line number Diff line Loading @@ -4,13 +4,13 @@ from typing import List from qtpy.QtWidgets import QHBoxLayout, QVBoxLayout, QApplication, QStackedWidget, QSplitter, QListWidget, QShortcut, QListWidgetItem, QMessageBox, QTextEdit, QPlainTextEdit from qtpy.QtCore import Qt, QPoint, QSize, QEvent, Signal from qtpy.QtGui import QTextCursor, QGuiApplication, QIcon, QCloseEvent, QKeySequence, QImage, QPainter from qtpy.QtGui import QTextCursor, QGuiApplication, QIcon, QCloseEvent, QKeySequence, QImage, QPainter, QClipboard from utils.logger import logger as LOGGER from utils.io_utils import json_dump_nested_obj from utils.text_processing import is_cjk, full_len, half_len from modules.textdetector.textblock import TextBlock from modules.translators.trans_chatgpt import GPTTranslator from .misc import pt2px, parse_stylesheet from .config import ProgramConfig, pcfg from .imgtrans_proj import ProjImgTrans Loading @@ -20,7 +20,7 @@ from .module_manager import ModuleManager from .pagesources import SourceDownload from .textedit_area import SourceTextEdit, SelectTextMiniMenu from .drawingpanel import DrawingPanel from .scenetext_manager import SceneTextManager, TextPanel from .scenetext_manager import SceneTextManager, TextPanel, PasteSrcItemsCommand from .mainwindowbars import TitleBar, LeftBar, BottomBar from .io_thread import ImgSaveThread, ImportDocThread, ExportDocThread from .stylewidgets import FrameLessMessageBox, ImgtransProgressMessageBox, SourceDownloadProgressMessageBox Loading Loading @@ -156,7 +156,8 @@ class MainWindow(FramelessWindow): self.canvas.drop_open_folder.connect(self.dropOpenDir) self.canvas.originallayer_trans_slider = self.bottomBar.originalSlider self.canvas.textlayer_trans_slider = self.bottomBar.textlayerSlider # self.canvas.masklayer_trans_slider = self.bottomBar.mask self.canvas.copy_src_signal.connect(self.on_copy_src) self.canvas.paste_src_signal.connect(self.on_paste_src) self.bottomBar.originalSlider.valueChanged.connect(self.canvas.setOriginalTransparencyBySlider) self.bottomBar.textlayerSlider.valueChanged.connect(self.canvas.setTextLayerTransparencyBySlider) Loading Loading @@ -1126,3 +1127,37 @@ class MainWindow(FramelessWindow): for ii, tr in enumerate(translations): translations[ii] = self.mtSubWidget.sub_text(tr) def on_copy_src(self): blks = self.canvas.selected_text_items() if len(blks) == 0: return if isinstance(self.module_manager.translator, GPTTranslator): src_list = [self.st_manager.pairwidget_list[blk.idx].e_source.toPlainText() for blk in blks] src_txt = '' for (prompt, num_src) in self.module_manager.translator._assemble_prompts(src_list, max_tokens=4294967295): src_txt += prompt src_txt = src_txt.strip() else: src_list = [self.st_manager.pairwidget_list[blk.idx].e_source.toPlainText().strip().replace('\n', ' ') for blk in blks] src_txt = '\n'.join(src_list) self.st_manager.app_clipborad.setText(src_txt, QClipboard.Mode.Clipboard) def on_paste_src(self): blks = self.canvas.selected_text_items() if len(blks) == 0: return src_widget_list = [self.st_manager.pairwidget_list[blk.idx].e_source for blk in blks] text_list = self.st_manager.app_clipborad.text().split('\n') n_paragraph = min(len(src_widget_list), len(text_list)) if n_paragraph < 1: return src_widget_list = src_widget_list[:n_paragraph] text_list = text_list[:n_paragraph] self.canvas.push_undo_command(PasteSrcItemsCommand(src_widget_list, text_list)) No newline at end of file Loading
modules/__init__.py +1 −1 Original line number Diff line number Diff line Loading @@ -2,7 +2,7 @@ from .ocr import OCR, OCRBase, OCRMIT32px, OCRMIT48pxCTC, MangaOCR from .textdetector import TEXTDETECTORS, TextDetectorBase, ComicTextDetector from .translators import TRANSLATORS, BaseTranslator from .inpaint import INPAINTERS, InpainterBase, PatchmatchInpainter, AOTInpainter, LamaInpainterMPE from .base import DEFAULT_DEVICE from .base import DEFAULT_DEVICE, GPUINTENSIVE_SET GET_VALID_TEXTDETECTORS = lambda : list(TEXTDETECTORS.module_dict.keys()) GET_VALID_TRANSLATORS = lambda : list(TRANSLATORS.module_dict.keys()) Loading
modules/translators/trans_chatgpt.py +10 −3 Original line number Diff line number Diff line Loading @@ -142,8 +142,15 @@ class GPTTranslator(BaseTranslator): else: return None def _assemble_prompts(self, from_lang: str, to_lang: str, queries: List[str]) -> List[str]: def _assemble_prompts(self, queries: List[str], from_lang: str = None, to_lang: str = None, max_tokens = None) -> List[str]: if from_lang is None: from_lang = self.lang_map[self.lang_source] if to_lang is None: to_lang = self.lang_map[self.lang_target] prompt = '' if max_tokens is None: max_tokens = self.max_tokens # return_prompt = self.params['return prompt'] prompt_template = self.params['prompt template']['content'].format(to_lang=to_lang).rstrip() Loading Loading @@ -200,7 +207,7 @@ class GPTTranslator(BaseTranslator): queries = src_list # return_prompt = self.params['return prompt'] chat_sample = self.chat_sample for prompt, num_src in self._assemble_prompts(from_lang, to_lang, queries): for prompt, num_src in self._assemble_prompts(queries, from_lang, to_lang): ratelimit_attempt = 0 retry_attempt = 0 while True: Loading
ui/dlconfig_parse_widgets.py +2 −2 Original line number Diff line number Diff line from typing import List, Callable from modules import GET_VALID_INPAINTERS, GET_VALID_TEXTDETECTORS, GET_VALID_TRANSLATORS, GET_VALID_OCR, \ BaseTranslator, DEFAULT_DEVICE BaseTranslator, DEFAULT_DEVICE, GPUINTENSIVE_SET from utils.logger import logger as LOGGER from .stylewidgets import ConfigComboBox, NoBorderPushBtn, CustomComboBox from .constants import CONFIG_FONTSIZE_CONTENT, CONFIG_COMBOBOX_MIDEAN, CONFIG_COMBOBOX_LONG, CONFIG_COMBOBOX_SHORT, CONFIG_COMBOBOX_HEIGHT Loading Loading @@ -162,7 +162,7 @@ class ParamWidget(QWidget): if param_key == 'device' and DEFAULT_DEVICE == 'cpu': param_dict['select'] = 'cpu' for ii, device in enumerate(param_dict['options']): if device == 'cuda': if device in GPUINTENSIVE_SET: model = param_widget.model() item = model.item(ii, 0) item.setEnabled(False) Loading
ui/keywordsubwidget.py +4 −4 Original line number Diff line number Diff line import re, traceback from qtpy.QtWidgets import QHeaderView, QTableView, QAbstractItemView, QListWidget, QHBoxLayout, QListWidgetItem, QWidget, QGridLayout, QPushButton, QVBoxLayout from qtpy.QtCore import Qt, Signal, QModelIndex from qtpy.QtGui import QContextMenuEvent, QShowEvent, QHideEvent, QStandardItem, QStandardItemModel from typing import List, Union, Dict from qtpy.QtWidgets import QHeaderView, QTableView, QWidget, QVBoxLayout from qtpy.QtCore import Qt, Signal from qtpy.QtGui import QStandardItem, QStandardItemModel from typing import List, Dict from utils.logger import logger as LOGGER from .misc import FontFormat Loading
ui/mainwindow.py +40 −5 Original line number Diff line number Diff line Loading @@ -4,13 +4,13 @@ from typing import List from qtpy.QtWidgets import QHBoxLayout, QVBoxLayout, QApplication, QStackedWidget, QSplitter, QListWidget, QShortcut, QListWidgetItem, QMessageBox, QTextEdit, QPlainTextEdit from qtpy.QtCore import Qt, QPoint, QSize, QEvent, Signal from qtpy.QtGui import QTextCursor, QGuiApplication, QIcon, QCloseEvent, QKeySequence, QImage, QPainter from qtpy.QtGui import QTextCursor, QGuiApplication, QIcon, QCloseEvent, QKeySequence, QImage, QPainter, QClipboard from utils.logger import logger as LOGGER from utils.io_utils import json_dump_nested_obj from utils.text_processing import is_cjk, full_len, half_len from modules.textdetector.textblock import TextBlock from modules.translators.trans_chatgpt import GPTTranslator from .misc import pt2px, parse_stylesheet from .config import ProgramConfig, pcfg from .imgtrans_proj import ProjImgTrans Loading @@ -20,7 +20,7 @@ from .module_manager import ModuleManager from .pagesources import SourceDownload from .textedit_area import SourceTextEdit, SelectTextMiniMenu from .drawingpanel import DrawingPanel from .scenetext_manager import SceneTextManager, TextPanel from .scenetext_manager import SceneTextManager, TextPanel, PasteSrcItemsCommand from .mainwindowbars import TitleBar, LeftBar, BottomBar from .io_thread import ImgSaveThread, ImportDocThread, ExportDocThread from .stylewidgets import FrameLessMessageBox, ImgtransProgressMessageBox, SourceDownloadProgressMessageBox Loading Loading @@ -156,7 +156,8 @@ class MainWindow(FramelessWindow): self.canvas.drop_open_folder.connect(self.dropOpenDir) self.canvas.originallayer_trans_slider = self.bottomBar.originalSlider self.canvas.textlayer_trans_slider = self.bottomBar.textlayerSlider # self.canvas.masklayer_trans_slider = self.bottomBar.mask self.canvas.copy_src_signal.connect(self.on_copy_src) self.canvas.paste_src_signal.connect(self.on_paste_src) self.bottomBar.originalSlider.valueChanged.connect(self.canvas.setOriginalTransparencyBySlider) self.bottomBar.textlayerSlider.valueChanged.connect(self.canvas.setTextLayerTransparencyBySlider) Loading Loading @@ -1126,3 +1127,37 @@ class MainWindow(FramelessWindow): for ii, tr in enumerate(translations): translations[ii] = self.mtSubWidget.sub_text(tr) def on_copy_src(self): blks = self.canvas.selected_text_items() if len(blks) == 0: return if isinstance(self.module_manager.translator, GPTTranslator): src_list = [self.st_manager.pairwidget_list[blk.idx].e_source.toPlainText() for blk in blks] src_txt = '' for (prompt, num_src) in self.module_manager.translator._assemble_prompts(src_list, max_tokens=4294967295): src_txt += prompt src_txt = src_txt.strip() else: src_list = [self.st_manager.pairwidget_list[blk.idx].e_source.toPlainText().strip().replace('\n', ' ') for blk in blks] src_txt = '\n'.join(src_list) self.st_manager.app_clipborad.setText(src_txt, QClipboard.Mode.Clipboard) def on_paste_src(self): blks = self.canvas.selected_text_items() if len(blks) == 0: return src_widget_list = [self.st_manager.pairwidget_list[blk.idx].e_source for blk in blks] text_list = self.st_manager.app_clipborad.text().split('\n') n_paragraph = min(len(src_widget_list), len(text_list)) if n_paragraph < 1: return src_widget_list = src_widget_list[:n_paragraph] text_list = text_list[:n_paragraph] self.canvas.push_undo_command(PasteSrcItemsCommand(src_widget_list, text_list)) No newline at end of file