diff --git a/README.md b/README.md
index b80e16c..cee6b81 100644
--- a/README.md
+++ b/README.md
@@ -254,6 +254,7 @@ OUTPUT SETTINGS:
Split output into multiple files. 0: Don't split 1: Automatic mode 2: Consider every subdirectory as separate volume [Default=0]
--spreadshift Shift first page to opposite side in landscape for two page spread alignment
--norotate Do not rotate double page spreads in spread splitter option.
+ --rotatefirst Put rotated spread first in spread splitter option.
--reducerainbow Reduce rainbow effect on color eink by slightly blurring images
CUSTOM PROFILE:
diff --git a/gui/KCC.ui b/gui/KCC.ui
index 847738c..b1aafaa 100644
--- a/gui/KCC.ui
+++ b/gui/KCC.ui
@@ -453,13 +453,13 @@
0
- -
-
+
-
+
- <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Unchecked - Disabled</span></p><p>Disabled</p><p><span style=" font-weight:600; text-decoration: underline;">Indeterminate - Margins<br/></span>Margins</p><p><span style=" font-weight:600; text-decoration: underline;">Checked - Margins + page numbers<br/></span>Margins +page numbers</p></body></html>
+ <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Unchecked - Disabled<br/></span>Disabled</p><p><span style=" font-weight:600; text-decoration: underline;">Indeterminate - Horizontal<br/></span>Crop empty horizontal lines.</p><p><span style=" font-weight:600; text-decoration: underline;">Checked - Both<br/></span>Crop empty horizontal and vertical lines.</p></body></html>
- Cropping mode
+ Inter-panel crop
true
@@ -476,6 +476,41 @@
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Qt::FocusPolicy::ClickFocus
+
+
+ Default Author is KCC
+
+
+ Default Author
+
+
+ false
+
+
+
+ -
+
+
+ <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Unchecked - Disabled</span></p><p>Disabled</p><p><span style=" font-weight:600; text-decoration: underline;">Indeterminate - Margins<br/></span>Margins</p><p><span style=" font-weight:600; text-decoration: underline;">Checked - Margins + page numbers<br/></span>Margins +page numbers</p></body></html>
+
+
+ Cropping mode
+
+
+ true
+
+
+
-
@@ -486,6 +521,155 @@
+ -
+
+
+ <html><head/><body><p style='white-space:pre'>Disable conversion to grayscale.</p></body></html>
+
+
+ Color mode
+
+
+
+ -
+
+
+ Delete input file(s) or directory. It's not recoverable!
+
+
+ Delete input
+
+
+
+ -
+
+
+ Write Title from ComicInfo.xml
+
+
+ ComicInfo Title
+
+
+
+ -
+
+
+ <html><head/><body><p style='white-space:pre'><span style=" font-weight:600; text-decoration: underline;">Unchecked - 4 panels<br/></span>Zoom each corner separately.</p><p style='white-space:pre'><span style=" font-weight:600; text-decoration: underline;">Indeterminate - 2 panels<br/></span>Zoom only the top and bottom of the page.</p><p><span style=" font-weight:600; text-decoration: underline;">Checked - 4 high-quality panels<br/></span>Zoom each corner separately. Try to increase the quality of magnification. Check wiki for more details.</p></body></html>
+
+
+ Panel View 4/2/HQ
+
+
+ true
+
+
+
+ -
+
+
+ Reduce rainbow effect on color eink by slightly blurring images
+
+
+ Rainbow blur
+
+
+
+ -
+
+
+ Do not rotate double page spreads in spread splitter option.
+
+
+ No rotate
+
+
+
+ -
+
+
+ <html><head/><body><p>Combines all selected files into a single file. (Helpful for combining chapters into volumes.)</p></body></html>
+
+
+ File Fusion
+
+
+
+ -
+
+
+ <html><head/><body><p style='white-space:pre'>Disable automatic gamma correction.</p></body></html>
+
+
+ Custom gamma
+
+
+
+ -
+
+
+ <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Unchecked - JPEG<br/></span>Use JPEG files</p><p><span style=" font-weight:600; text-decoration: underline;">Indeterminate - force PNG<br/></span>Create PNG files instead JPEG</p><p><span style=" font-weight:600; text-decoration: underline;">Checked - mozJpeg<br/></span>10-20% smaller JPEG file, with the same image quality, but processing time multiplied by 2</p></body></html>
+
+
+ JPEG/PNG/mozJpeg
+
+
+ true
+
+
+
+ -
+
+
+ <html><head/><body><p style='white-space:pre'>Do not process any image, ignore profile and processing options.</p></body></html>
+
+
+ Disable processing
+
+
+
+ -
+
+
+ <html><head/><body><p><span style=" font-weight:700; text-decoration: underline;">Unchecked<br/></span>Maximal output file size is 100 MB for Webtoon, 400 MB for others before split occurs.</p><p><span style=" font-weight:700; text-decoration: underline;">Checked</span><br/>Output file size specified in "Chunk size MB" before split occurs.</p></body></html>
+
+
+ Chunk size
+
+
+
+ -
+
+
+ Shift first page to opposite side in landscape for two page spread alignment
+
+
+ Spread shift
+
+
+
+ -
+
+
+ <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Unchecked - Nothing<br/></span>Images smaller than device resolution will not be resized.</p><p><span style=" font-weight:600; text-decoration: underline;">Indeterminate - Stretching<br/></span>Images smaller than device resolution will be resized. Aspect ratio will be not preserved.</p><p><span style=" font-weight:600; text-decoration: underline;">Checked - Upscaling<br/></span>Images smaller than device resolution will be resized. Aspect ratio will be preserved.</p></body></html>
+
+
+ Stretch/Upscale
+
+
+ true
+
+
+
+ -
+
+
+ <html><head/><body><p style='white-space:pre'><span style=" font-weight:600; text-decoration: underline;">Unchecked - Automatic mode<br/></span>The output will be split automatically.</p><p style='white-space:pre'><span style=" font-weight:600; text-decoration: underline;">Checked - Volume mode<br/></span>Every subdirectory will be considered as a separate volume.</p></body></html>
+
+
+ Output split
+
+
+
-
@@ -512,62 +696,6 @@
- -
-
-
- <html><head/><body><p style='white-space:pre'>Disable automatic gamma correction.</p></body></html>
-
-
- Custom gamma
-
-
-
- -
-
-
- <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Unchecked - Disabled<br/></span>Disabled</p><p><span style=" font-weight:600; text-decoration: underline;">Indeterminate - Horizontal<br/></span>Crop empty horizontal lines.</p><p><span style=" font-weight:600; text-decoration: underline;">Checked - Both<br/></span>Crop empty horizontal and vertical lines.</p></body></html>
-
-
- Inter-panel crop
-
-
- true
-
-
-
- -
-
-
- <html><head/><body><p style='white-space:pre'>Disable conversion to grayscale.</p></body></html>
-
-
- Color mode
-
-
-
- -
-
-
- <html><head/><body><p style='white-space:pre'><span style=" font-weight:600; text-decoration: underline;">Unchecked - 4 panels<br/></span>Zoom each corner separately.</p><p style='white-space:pre'><span style=" font-weight:600; text-decoration: underline;">Indeterminate - 2 panels<br/></span>Zoom only the top and bottom of the page.</p><p><span style=" font-weight:600; text-decoration: underline;">Checked - 4 high-quality panels<br/></span>Zoom each corner separately. Try to increase the quality of magnification. Check wiki for more details.</p></body></html>
-
-
- Panel View 4/2/HQ
-
-
- true
-
-
-
- -
-
-
- <html><head/><body><p style='white-space:pre'>Do not process any image, ignore profile and processing options.</p></body></html>
-
-
- Disable processing
-
-
-
-
@@ -578,131 +706,13 @@
- -
-
-
-
- 0
- 0
-
-
-
- Qt::FocusPolicy::ClickFocus
-
+
-
+
- Default Author is KCC
-
-
- Default Author
-
-
- false
-
-
-
- -
-
-
- Delete input file(s) or directory. It's not recoverable!
+ <html><head/><body><p>When the spread splitter option is partially checked,</p><p><span style=" font-weight:600; text-decoration: underline;">Unchecked - Rotate Last<br/></span>Put the rotated 2 page spread after the split spreads.</p><p><span style=" font-weight:600; text-decoration: underline;">Checked - Rotate First<br/></span>Put the rotated 2 page spread before the split spreads.</p></body></html>
- Delete input
-
-
-
- -
-
-
- <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Unchecked - JPEG<br/></span>Use JPEG files</p><p><span style=" font-weight:600; text-decoration: underline;">Indeterminate - force PNG<br/></span>Create PNG files instead JPEG</p><p><span style=" font-weight:600; text-decoration: underline;">Checked - mozJpeg<br/></span>10-20% smaller JPEG file, with the same image quality, but processing time multiplied by 2</p></body></html>
-
-
- JPEG/PNG/mozJpeg
-
-
- true
-
-
-
- -
-
-
- Shift first page to opposite side in landscape for two page spread alignment
-
-
- Spread shift
-
-
-
- -
-
-
- <html><head/><body><p>Combines all selected files into a single file. (Helpful for combining chapters into volumes.)</p></body></html>
-
-
- File Fusion
-
-
-
- -
-
-
- <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Unchecked - Nothing<br/></span>Images smaller than device resolution will not be resized.</p><p><span style=" font-weight:600; text-decoration: underline;">Indeterminate - Stretching<br/></span>Images smaller than device resolution will be resized. Aspect ratio will be not preserved.</p><p><span style=" font-weight:600; text-decoration: underline;">Checked - Upscaling<br/></span>Images smaller than device resolution will be resized. Aspect ratio will be preserved.</p></body></html>
-
-
- Stretch/Upscale
-
-
- true
-
-
-
- -
-
-
- <html><head/><body><p style='white-space:pre'><span style=" font-weight:600; text-decoration: underline;">Unchecked - Automatic mode<br/></span>The output will be split automatically.</p><p style='white-space:pre'><span style=" font-weight:600; text-decoration: underline;">Checked - Volume mode<br/></span>Every subdirectory will be considered as a separate volume.</p></body></html>
-
-
- Output split
-
-
-
- -
-
-
- Do not rotate double page spreads in spread splitter option.
-
-
- No rotate
-
-
-
- -
-
-
- Reduce rainbow effect on color eink by slightly blurring images
-
-
- Rainbow blur
-
-
-
- -
-
-
- <html><head/><body><p><span style=" font-weight:700; text-decoration: underline;">Unchecked<br/></span>Maximal output file size is 100 MB for Webtoon, 400 MB for others before split occurs.</p><p><span style=" font-weight:700; text-decoration: underline;">Checked</span><br/>Output file size specified in "Chunk size MB" before split occurs.</p></body></html>
-
-
- Chunk size
-
-
-
- -
-
-
- Write Title from ComicInfo.xml
-
-
- ComicInfo Title
+ Rotate First
diff --git a/kindlecomicconverter/KCC_gui.py b/kindlecomicconverter/KCC_gui.py
index 2bff604..67c6d20 100644
--- a/kindlecomicconverter/KCC_gui.py
+++ b/kindlecomicconverter/KCC_gui.py
@@ -278,6 +278,8 @@ class WorkerThread(QThread):
options.filefusion = False
if GUI.noRotateBox.isChecked():
options.norotate = True
+ if GUI.rotateFirstBox.isChecked():
+ options.rotatefirst = True
if GUI.mozJpegBox.checkState() == Qt.CheckState.PartiallyChecked:
options.forcepng = True
elif GUI.mozJpegBox.checkState() == Qt.CheckState.Checked:
@@ -881,6 +883,7 @@ class KCCGUI(KCC_ui.Ui_mainWindow):
'fileFusionBox': GUI.fileFusionBox.checkState().value,
'defaultOutputFolderBox': GUI.defaultOutputFolderBox.checkState().value,
'noRotateBox': GUI.noRotateBox.checkState().value,
+ 'rotateFirstBox': GUI.rotateFirstBox.checkState().value,
'maximizeStrips': GUI.maximizeStrips.checkState().value,
'gammaSlider': float(self.gammaValue) * 100,
'chunkSizeCheckBox': GUI.chunkSizeCheckBox.checkState().value,
diff --git a/kindlecomicconverter/KCC_rc.py b/kindlecomicconverter/KCC_rc.py
index 125ba82..27229a7 100644
--- a/kindlecomicconverter/KCC_rc.py
+++ b/kindlecomicconverter/KCC_rc.py
@@ -12228,7 +12228,7 @@ qt_resource_struct = b"\
\x00\x00\x01\x1c\x00\x00\x00\x00\x00\x01\x00\x01P\xb1\
\x00\x00\x01\x88;p\xbcJ\
\x00\x00\x012\x00\x00\x00\x00\x00\x01\x00\x01yY\
-\x00\x00\x01\x97~\xfd]]\
+\x00\x00\x01\x97\xc9|\x88\xde\
\x00\x00\x01V\x00\x00\x00\x00\x00\x01\x00\x01\x9d\x9a\
\x00\x00\x01\x88;p\xbcI\
\x00\x00\x01\xb8\x00\x00\x00\x00\x00\x01\x00\x01\xf6n\
diff --git a/kindlecomicconverter/KCC_ui.py b/kindlecomicconverter/KCC_ui.py
index ae69830..69720d9 100644
--- a/kindlecomicconverter/KCC_ui.py
+++ b/kindlecomicconverter/KCC_ui.py
@@ -251,65 +251,16 @@ class Ui_mainWindow(object):
self.gridLayout_2 = QGridLayout(self.optionWidget)
self.gridLayout_2.setObjectName(u"gridLayout_2")
self.gridLayout_2.setContentsMargins(0, 0, 0, 0)
- self.croppingBox = QCheckBox(self.optionWidget)
- self.croppingBox.setObjectName(u"croppingBox")
- self.croppingBox.setTristate(True)
-
- self.gridLayout_2.addWidget(self.croppingBox, 4, 2, 1, 1)
-
- self.mangaBox = QCheckBox(self.optionWidget)
- self.mangaBox.setObjectName(u"mangaBox")
-
- self.gridLayout_2.addWidget(self.mangaBox, 1, 0, 1, 1)
-
- self.webtoonBox = QCheckBox(self.optionWidget)
- self.webtoonBox.setObjectName(u"webtoonBox")
-
- self.gridLayout_2.addWidget(self.webtoonBox, 2, 0, 1, 1)
-
- self.rotateBox = QCheckBox(self.optionWidget)
- self.rotateBox.setObjectName(u"rotateBox")
- self.rotateBox.setTristate(True)
-
- self.gridLayout_2.addWidget(self.rotateBox, 1, 1, 1, 1)
-
- self.borderBox = QCheckBox(self.optionWidget)
- self.borderBox.setObjectName(u"borderBox")
- self.borderBox.setTristate(True)
-
- self.gridLayout_2.addWidget(self.borderBox, 3, 0, 1, 1)
-
- self.gammaBox = QCheckBox(self.optionWidget)
- self.gammaBox.setObjectName(u"gammaBox")
-
- self.gridLayout_2.addWidget(self.gammaBox, 2, 2, 1, 1)
-
self.interPanelCropBox = QCheckBox(self.optionWidget)
self.interPanelCropBox.setObjectName(u"interPanelCropBox")
self.interPanelCropBox.setTristate(True)
self.gridLayout_2.addWidget(self.interPanelCropBox, 6, 2, 1, 1)
- self.colorBox = QCheckBox(self.optionWidget)
- self.colorBox.setObjectName(u"colorBox")
+ self.mangaBox = QCheckBox(self.optionWidget)
+ self.mangaBox.setObjectName(u"mangaBox")
- self.gridLayout_2.addWidget(self.colorBox, 3, 2, 1, 1)
-
- self.qualityBox = QCheckBox(self.optionWidget)
- self.qualityBox.setObjectName(u"qualityBox")
- self.qualityBox.setTristate(True)
-
- self.gridLayout_2.addWidget(self.qualityBox, 1, 2, 1, 1)
-
- self.disableProcessingBox = QCheckBox(self.optionWidget)
- self.disableProcessingBox.setObjectName(u"disableProcessingBox")
-
- self.gridLayout_2.addWidget(self.disableProcessingBox, 5, 2, 1, 1)
-
- self.maximizeStrips = QCheckBox(self.optionWidget)
- self.maximizeStrips.setObjectName(u"maximizeStrips")
-
- self.gridLayout_2.addWidget(self.maximizeStrips, 4, 1, 1, 1)
+ self.gridLayout_2.addWidget(self.mangaBox, 1, 0, 1, 1)
self.authorEdit = QLineEdit(self.optionWidget)
self.authorEdit.setObjectName(u"authorEdit")
@@ -323,27 +274,79 @@ class Ui_mainWindow(object):
self.gridLayout_2.addWidget(self.authorEdit, 0, 0, 1, 1)
+ self.croppingBox = QCheckBox(self.optionWidget)
+ self.croppingBox.setObjectName(u"croppingBox")
+ self.croppingBox.setTristate(True)
+
+ self.gridLayout_2.addWidget(self.croppingBox, 4, 2, 1, 1)
+
+ self.webtoonBox = QCheckBox(self.optionWidget)
+ self.webtoonBox.setObjectName(u"webtoonBox")
+
+ self.gridLayout_2.addWidget(self.webtoonBox, 2, 0, 1, 1)
+
+ self.colorBox = QCheckBox(self.optionWidget)
+ self.colorBox.setObjectName(u"colorBox")
+
+ self.gridLayout_2.addWidget(self.colorBox, 3, 2, 1, 1)
+
self.deleteBox = QCheckBox(self.optionWidget)
self.deleteBox.setObjectName(u"deleteBox")
self.gridLayout_2.addWidget(self.deleteBox, 5, 1, 1, 1)
+ self.comicinfoTitleBox = QCheckBox(self.optionWidget)
+ self.comicinfoTitleBox.setObjectName(u"comicinfoTitleBox")
+
+ self.gridLayout_2.addWidget(self.comicinfoTitleBox, 7, 0, 1, 1)
+
+ self.qualityBox = QCheckBox(self.optionWidget)
+ self.qualityBox.setObjectName(u"qualityBox")
+ self.qualityBox.setTristate(True)
+
+ self.gridLayout_2.addWidget(self.qualityBox, 1, 2, 1, 1)
+
+ self.reduceRainbowBox = QCheckBox(self.optionWidget)
+ self.reduceRainbowBox.setObjectName(u"reduceRainbowBox")
+
+ self.gridLayout_2.addWidget(self.reduceRainbowBox, 7, 2, 1, 1)
+
+ self.noRotateBox = QCheckBox(self.optionWidget)
+ self.noRotateBox.setObjectName(u"noRotateBox")
+
+ self.gridLayout_2.addWidget(self.noRotateBox, 6, 1, 1, 1)
+
+ self.fileFusionBox = QCheckBox(self.optionWidget)
+ self.fileFusionBox.setObjectName(u"fileFusionBox")
+
+ self.gridLayout_2.addWidget(self.fileFusionBox, 6, 0, 1, 1)
+
+ self.gammaBox = QCheckBox(self.optionWidget)
+ self.gammaBox.setObjectName(u"gammaBox")
+
+ self.gridLayout_2.addWidget(self.gammaBox, 2, 2, 1, 1)
+
self.mozJpegBox = QCheckBox(self.optionWidget)
self.mozJpegBox.setObjectName(u"mozJpegBox")
self.mozJpegBox.setTristate(True)
self.gridLayout_2.addWidget(self.mozJpegBox, 4, 0, 1, 1)
+ self.disableProcessingBox = QCheckBox(self.optionWidget)
+ self.disableProcessingBox.setObjectName(u"disableProcessingBox")
+
+ self.gridLayout_2.addWidget(self.disableProcessingBox, 5, 2, 1, 1)
+
+ self.chunkSizeCheckBox = QCheckBox(self.optionWidget)
+ self.chunkSizeCheckBox.setObjectName(u"chunkSizeCheckBox")
+
+ self.gridLayout_2.addWidget(self.chunkSizeCheckBox, 7, 1, 1, 1)
+
self.spreadShiftBox = QCheckBox(self.optionWidget)
self.spreadShiftBox.setObjectName(u"spreadShiftBox")
self.gridLayout_2.addWidget(self.spreadShiftBox, 5, 0, 1, 1)
- self.fileFusionBox = QCheckBox(self.optionWidget)
- self.fileFusionBox.setObjectName(u"fileFusionBox")
-
- self.gridLayout_2.addWidget(self.fileFusionBox, 6, 0, 1, 1)
-
self.upscaleBox = QCheckBox(self.optionWidget)
self.upscaleBox.setObjectName(u"upscaleBox")
self.upscaleBox.setTristate(True)
@@ -355,25 +358,27 @@ class Ui_mainWindow(object):
self.gridLayout_2.addWidget(self.outputSplit, 3, 1, 1, 1)
- self.noRotateBox = QCheckBox(self.optionWidget)
- self.noRotateBox.setObjectName(u"noRotateBox")
+ self.rotateBox = QCheckBox(self.optionWidget)
+ self.rotateBox.setObjectName(u"rotateBox")
+ self.rotateBox.setTristate(True)
- self.gridLayout_2.addWidget(self.noRotateBox, 6, 1, 1, 1)
+ self.gridLayout_2.addWidget(self.rotateBox, 1, 1, 1, 1)
- self.reduceRainbowBox = QCheckBox(self.optionWidget)
- self.reduceRainbowBox.setObjectName(u"reduceRainbowBox")
+ self.borderBox = QCheckBox(self.optionWidget)
+ self.borderBox.setObjectName(u"borderBox")
+ self.borderBox.setTristate(True)
- self.gridLayout_2.addWidget(self.reduceRainbowBox, 7, 2, 1, 1)
+ self.gridLayout_2.addWidget(self.borderBox, 3, 0, 1, 1)
- self.chunkSizeCheckBox = QCheckBox(self.optionWidget)
- self.chunkSizeCheckBox.setObjectName(u"chunkSizeCheckBox")
+ self.maximizeStrips = QCheckBox(self.optionWidget)
+ self.maximizeStrips.setObjectName(u"maximizeStrips")
- self.gridLayout_2.addWidget(self.chunkSizeCheckBox, 7, 1, 1, 1)
+ self.gridLayout_2.addWidget(self.maximizeStrips, 4, 1, 1, 1)
- self.comicinfoTitleBox = QCheckBox(self.optionWidget)
- self.comicinfoTitleBox.setObjectName(u"comicinfoTitleBox")
+ self.rotateFirstBox = QCheckBox(self.optionWidget)
+ self.rotateFirstBox.setObjectName(u"rotateFirstBox")
- self.gridLayout_2.addWidget(self.comicinfoTitleBox, 7, 0, 1, 1)
+ self.gridLayout_2.addWidget(self.rotateFirstBox, 8, 1, 1, 1)
self.gridLayout.addWidget(self.optionWidget, 5, 0, 1, 2)
@@ -528,69 +533,73 @@ class Ui_mainWindow(object):
self.preserveMarginLabel.setText(QCoreApplication.translate("mainWindow", u"Preserve Margin %", None))
self.croppingPowerLabel.setText(QCoreApplication.translate("mainWindow", u"Cropping power:", None))
#if QT_CONFIG(tooltip)
- self.croppingBox.setToolTip(QCoreApplication.translate("mainWindow", u"Unchecked - Disabled
Disabled
Indeterminate - Margins
Margins
Checked - Margins + page numbers
Margins +page numbers
", None))
+ self.interPanelCropBox.setToolTip(QCoreApplication.translate("mainWindow", u" Unchecked - Disabled
Disabled
Indeterminate - Horizontal
Crop empty horizontal lines.
Checked - Both
Crop empty horizontal and vertical lines.
", None))
#endif // QT_CONFIG(tooltip)
- self.croppingBox.setText(QCoreApplication.translate("mainWindow", u"Cropping mode", None))
+ self.interPanelCropBox.setText(QCoreApplication.translate("mainWindow", u"Inter-panel crop", None))
#if QT_CONFIG(tooltip)
self.mangaBox.setToolTip(QCoreApplication.translate("mainWindow", u"Enable right-to-left reading.
", None))
#endif // QT_CONFIG(tooltip)
self.mangaBox.setText(QCoreApplication.translate("mainWindow", u"Right-to-left mode", None))
+#if QT_CONFIG(tooltip)
+ self.authorEdit.setToolTip(QCoreApplication.translate("mainWindow", u"Default Author is KCC", None))
+#endif // QT_CONFIG(tooltip)
+ self.authorEdit.setPlaceholderText(QCoreApplication.translate("mainWindow", u"Default Author", None))
+#if QT_CONFIG(tooltip)
+ self.croppingBox.setToolTip(QCoreApplication.translate("mainWindow", u"
Unchecked - Disabled
Disabled
Indeterminate - Margins
Margins
Checked - Margins + page numbers
Margins +page numbers
", None))
+#endif // QT_CONFIG(tooltip)
+ self.croppingBox.setText(QCoreApplication.translate("mainWindow", u"Cropping mode", None))
#if QT_CONFIG(tooltip)
self.webtoonBox.setToolTip(QCoreApplication.translate("mainWindow", u"Enable special parsing mode for Korean Webtoons.
", None))
#endif // QT_CONFIG(tooltip)
self.webtoonBox.setText(QCoreApplication.translate("mainWindow", u"Webtoon mode", None))
-#if QT_CONFIG(tooltip)
- self.rotateBox.setToolTip(QCoreApplication.translate("mainWindow", u"Unchecked - Split
Double page spreads will be cut into two separate pages.
Indeterminate - Split and rotate
Double page spreads will be displayed twice. First split and then rotated.
Checked - Rotate
Double page spreads will be rotated.
", None))
-#endif // QT_CONFIG(tooltip)
- self.rotateBox.setText(QCoreApplication.translate("mainWindow", u"Spread splitter", None))
-#if QT_CONFIG(tooltip)
- self.borderBox.setToolTip(QCoreApplication.translate("mainWindow", u"Unchecked - Autodetection
The color of margins fill will be detected automatically.
Indeterminate - White
Margins will be filled with white color.
Checked - Black
Margins will be filled with black color.
", None))
-#endif // QT_CONFIG(tooltip)
- self.borderBox.setText(QCoreApplication.translate("mainWindow", u"W/B margins", None))
-#if QT_CONFIG(tooltip)
- self.gammaBox.setToolTip(QCoreApplication.translate("mainWindow", u"Disable automatic gamma correction.
", None))
-#endif // QT_CONFIG(tooltip)
- self.gammaBox.setText(QCoreApplication.translate("mainWindow", u"Custom gamma", None))
-#if QT_CONFIG(tooltip)
- self.interPanelCropBox.setToolTip(QCoreApplication.translate("mainWindow", u"Unchecked - Disabled
Disabled
Indeterminate - Horizontal
Crop empty horizontal lines.
Checked - Both
Crop empty horizontal and vertical lines.
", None))
-#endif // QT_CONFIG(tooltip)
- self.interPanelCropBox.setText(QCoreApplication.translate("mainWindow", u"Inter-panel crop", None))
#if QT_CONFIG(tooltip)
self.colorBox.setToolTip(QCoreApplication.translate("mainWindow", u"Disable conversion to grayscale.
", None))
#endif // QT_CONFIG(tooltip)
self.colorBox.setText(QCoreApplication.translate("mainWindow", u"Color mode", None))
+#if QT_CONFIG(tooltip)
+ self.deleteBox.setToolTip(QCoreApplication.translate("mainWindow", u"Delete input file(s) or directory. It's not recoverable!", None))
+#endif // QT_CONFIG(tooltip)
+ self.deleteBox.setText(QCoreApplication.translate("mainWindow", u"Delete input", None))
+#if QT_CONFIG(tooltip)
+ self.comicinfoTitleBox.setToolTip(QCoreApplication.translate("mainWindow", u"Write Title from ComicInfo.xml", None))
+#endif // QT_CONFIG(tooltip)
+ self.comicinfoTitleBox.setText(QCoreApplication.translate("mainWindow", u"ComicInfo Title", None))
#if QT_CONFIG(tooltip)
self.qualityBox.setToolTip(QCoreApplication.translate("mainWindow", u"Unchecked - 4 panels
Zoom each corner separately.
Indeterminate - 2 panels
Zoom only the top and bottom of the page.
Checked - 4 high-quality panels
Zoom each corner separately. Try to increase the quality of magnification. Check wiki for more details.
", None))
#endif // QT_CONFIG(tooltip)
self.qualityBox.setText(QCoreApplication.translate("mainWindow", u"Panel View 4/2/HQ", None))
#if QT_CONFIG(tooltip)
- self.disableProcessingBox.setToolTip(QCoreApplication.translate("mainWindow", u"Do not process any image, ignore profile and processing options.
", None))
+ self.reduceRainbowBox.setToolTip(QCoreApplication.translate("mainWindow", u"Reduce rainbow effect on color eink by slightly blurring images", None))
#endif // QT_CONFIG(tooltip)
- self.disableProcessingBox.setText(QCoreApplication.translate("mainWindow", u"Disable processing", None))
+ self.reduceRainbowBox.setText(QCoreApplication.translate("mainWindow", u"Rainbow blur", None))
#if QT_CONFIG(tooltip)
- self.maximizeStrips.setToolTip(QCoreApplication.translate("mainWindow", u"Unchecked - 1x4
Keep format 1x4 panels strips.
Checked - 2x2
Turn 1x4 strips to 2x2 to maximize screen usage.
", None))
+ self.noRotateBox.setToolTip(QCoreApplication.translate("mainWindow", u"Do not rotate double page spreads in spread splitter option.", None))
#endif // QT_CONFIG(tooltip)
- self.maximizeStrips.setText(QCoreApplication.translate("mainWindow", u"1x4 to 2x2 strips", None))
+ self.noRotateBox.setText(QCoreApplication.translate("mainWindow", u"No rotate", None))
#if QT_CONFIG(tooltip)
- self.authorEdit.setToolTip(QCoreApplication.translate("mainWindow", u"Default Author is KCC", None))
+ self.fileFusionBox.setToolTip(QCoreApplication.translate("mainWindow", u"Combines all selected files into a single file. (Helpful for combining chapters into volumes.)
", None))
#endif // QT_CONFIG(tooltip)
- self.authorEdit.setPlaceholderText(QCoreApplication.translate("mainWindow", u"Default Author", None))
+ self.fileFusionBox.setText(QCoreApplication.translate("mainWindow", u"File Fusion", None))
#if QT_CONFIG(tooltip)
- self.deleteBox.setToolTip(QCoreApplication.translate("mainWindow", u"Delete input file(s) or directory. It's not recoverable!", None))
+ self.gammaBox.setToolTip(QCoreApplication.translate("mainWindow", u"Disable automatic gamma correction.
", None))
#endif // QT_CONFIG(tooltip)
- self.deleteBox.setText(QCoreApplication.translate("mainWindow", u"Delete input", None))
+ self.gammaBox.setText(QCoreApplication.translate("mainWindow", u"Custom gamma", None))
#if QT_CONFIG(tooltip)
self.mozJpegBox.setToolTip(QCoreApplication.translate("mainWindow", u"Unchecked - JPEG
Use JPEG files
Indeterminate - force PNG
Create PNG files instead JPEG
Checked - mozJpeg
10-20% smaller JPEG file, with the same image quality, but processing time multiplied by 2
", None))
#endif // QT_CONFIG(tooltip)
self.mozJpegBox.setText(QCoreApplication.translate("mainWindow", u"JPEG/PNG/mozJpeg", None))
+#if QT_CONFIG(tooltip)
+ self.disableProcessingBox.setToolTip(QCoreApplication.translate("mainWindow", u"Do not process any image, ignore profile and processing options.
", None))
+#endif // QT_CONFIG(tooltip)
+ self.disableProcessingBox.setText(QCoreApplication.translate("mainWindow", u"Disable processing", None))
+#if QT_CONFIG(tooltip)
+ self.chunkSizeCheckBox.setToolTip(QCoreApplication.translate("mainWindow", u"Unchecked
Maximal output file size is 100 MB for Webtoon, 400 MB for others before split occurs.
Checked
Output file size specified in "Chunk size MB" before split occurs.
", None))
+#endif // QT_CONFIG(tooltip)
+ self.chunkSizeCheckBox.setText(QCoreApplication.translate("mainWindow", u"Chunk size", None))
#if QT_CONFIG(tooltip)
self.spreadShiftBox.setToolTip(QCoreApplication.translate("mainWindow", u"Shift first page to opposite side in landscape for two page spread alignment", None))
#endif // QT_CONFIG(tooltip)
self.spreadShiftBox.setText(QCoreApplication.translate("mainWindow", u"Spread shift", None))
-#if QT_CONFIG(tooltip)
- self.fileFusionBox.setToolTip(QCoreApplication.translate("mainWindow", u"Combines all selected files into a single file. (Helpful for combining chapters into volumes.)
", None))
-#endif // QT_CONFIG(tooltip)
- self.fileFusionBox.setText(QCoreApplication.translate("mainWindow", u"File Fusion", None))
#if QT_CONFIG(tooltip)
self.upscaleBox.setToolTip(QCoreApplication.translate("mainWindow", u"Unchecked - Nothing
Images smaller than device resolution will not be resized.
Indeterminate - Stretching
Images smaller than device resolution will be resized. Aspect ratio will be not preserved.
Checked - Upscaling
Images smaller than device resolution will be resized. Aspect ratio will be preserved.
", None))
#endif // QT_CONFIG(tooltip)
@@ -600,21 +609,21 @@ class Ui_mainWindow(object):
#endif // QT_CONFIG(tooltip)
self.outputSplit.setText(QCoreApplication.translate("mainWindow", u"Output split", None))
#if QT_CONFIG(tooltip)
- self.noRotateBox.setToolTip(QCoreApplication.translate("mainWindow", u"Do not rotate double page spreads in spread splitter option.", None))
+ self.rotateBox.setToolTip(QCoreApplication.translate("mainWindow", u"Unchecked - Split
Double page spreads will be cut into two separate pages.
Indeterminate - Split and rotate
Double page spreads will be displayed twice. First split and then rotated.
Checked - Rotate
Double page spreads will be rotated.
", None))
#endif // QT_CONFIG(tooltip)
- self.noRotateBox.setText(QCoreApplication.translate("mainWindow", u"No rotate", None))
+ self.rotateBox.setText(QCoreApplication.translate("mainWindow", u"Spread splitter", None))
#if QT_CONFIG(tooltip)
- self.reduceRainbowBox.setToolTip(QCoreApplication.translate("mainWindow", u"Reduce rainbow effect on color eink by slightly blurring images", None))
+ self.borderBox.setToolTip(QCoreApplication.translate("mainWindow", u"Unchecked - Autodetection
The color of margins fill will be detected automatically.
Indeterminate - White
Margins will be filled with white color.
Checked - Black
Margins will be filled with black color.
", None))
#endif // QT_CONFIG(tooltip)
- self.reduceRainbowBox.setText(QCoreApplication.translate("mainWindow", u"Rainbow blur", None))
+ self.borderBox.setText(QCoreApplication.translate("mainWindow", u"W/B margins", None))
#if QT_CONFIG(tooltip)
- self.chunkSizeCheckBox.setToolTip(QCoreApplication.translate("mainWindow", u"Unchecked
Maximal output file size is 100 MB for Webtoon, 400 MB for others before split occurs.
Checked
Output file size specified in "Chunk size MB" before split occurs.
", None))
+ self.maximizeStrips.setToolTip(QCoreApplication.translate("mainWindow", u"Unchecked - 1x4
Keep format 1x4 panels strips.
Checked - 2x2
Turn 1x4 strips to 2x2 to maximize screen usage.
", None))
#endif // QT_CONFIG(tooltip)
- self.chunkSizeCheckBox.setText(QCoreApplication.translate("mainWindow", u"Chunk size", None))
+ self.maximizeStrips.setText(QCoreApplication.translate("mainWindow", u"1x4 to 2x2 strips", None))
#if QT_CONFIG(tooltip)
- self.comicinfoTitleBox.setToolTip(QCoreApplication.translate("mainWindow", u"Write Title from ComicInfo.xml", None))
+ self.rotateFirstBox.setToolTip(QCoreApplication.translate("mainWindow", u"When the spread splitter option is partially checked,
Unchecked - Rotate Last
Put the rotated 2 page spread after the split spreads.
Checked - Rotate First
Put the rotated 2 page spread before the split spreads.
", None))
#endif // QT_CONFIG(tooltip)
- self.comicinfoTitleBox.setText(QCoreApplication.translate("mainWindow", u"ComicInfo Title", None))
+ self.rotateFirstBox.setText(QCoreApplication.translate("mainWindow", u"Rotate First", None))
self.gammaLabel.setText(QCoreApplication.translate("mainWindow", u"Gamma: Auto", None))
#if QT_CONFIG(tooltip)
self.chunkSizeWidget.setToolTip(QCoreApplication.translate("mainWindow", u"Warning: chunk size greater than default may cause
performance/battery issues, especially on older devices.
", None))
diff --git a/kindlecomicconverter/comic2ebook.py b/kindlecomicconverter/comic2ebook.py
index 44f964c..1b9dc83 100755
--- a/kindlecomicconverter/comic2ebook.py
+++ b/kindlecomicconverter/comic2ebook.py
@@ -1106,6 +1106,8 @@ def makeParser():
help="Shift first page to opposite side in landscape for spread alignment")
output_options.add_argument("--norotate", action="store_true", dest="norotate", default=False,
help="Do not rotate double page spreads in spread splitter option.")
+ output_options.add_argument("--rotatefirst", action="store_true", dest="rotatefirst", default=False,
+ help="Put rotated 2 page spread first in spread splitter option.")
processing_options.add_argument("-n", "--noprocessing", action="store_true", dest="noprocessing", default=False,
help="Do not modify image and ignore any profil or processing option")
diff --git a/kindlecomicconverter/image.py b/kindlecomicconverter/image.py
index 9d9cf1d..8c0c618 100755
--- a/kindlecomicconverter/image.py
+++ b/kindlecomicconverter/image.py
@@ -267,7 +267,7 @@ class ComicPage:
if 'N' in mode:
self.targetPathOrder = '-kcc-x'
elif 'R' in mode:
- self.targetPathOrder = '-kcc-d'
+ self.targetPathOrder = '-kcc-a' if options.rotatefirst else '-kcc-d'
if not options.norotate:
self.rotated = True
elif 'S1' in mode: