BinitDOX / Manga-Colorizer

Bring mangas to life!
MIT License
34 stars 6 forks source link

Issue with the color quality of the generated images #12

Open iG8R opened 4 months ago

iG8R commented 4 months ago

Right away I want to thank you for this wonderful software that allows to colorize manga on the fly. I've known about the source app for a while now - https://github.com/qweasdd/manga-colorization-v2/, and I'm familiar with its limitation where processing images wider than 576px results in incorrect coloring.

Is it possible to colorize the image at a size most suitable for the program, i.e. x=576px, and only after this, scale it to a larger size?

Let me explain with an example.

https://mangadex.org/chapter/d72a3eb8-2b20-4c39-a46f-d282eb05e64f/3

Original image (1125 x 1600 Pixels)

How does the image look after processing if the program processed it at dimensions of x = 576px, as originally intended (576 x 820 Pixels)?

This is what the image looks like when processed at sizes exceeding 576px in width (960 x 1367 pixels).

BinitDOX commented 3 months ago

Thanks for bringing this up, I did not even notice it before!

I've now added scaling options:

Usage: python app-stream.py --resize_method=basic

iG8R commented 3 months ago

@BinitDOX Thank you very much! Here is the solution for upscaling images using the RealESRGAN_x4plus_anime_6B model after colorization: https://github.com/xiaogdgenuine/Manga-Colorization-FJ Perhaps the RealESRGAN_x2plus model could be used for this purpose also.

iG8R commented 3 months ago

Due to the presence of CUDA, this fork works extremely fast.

iG8R commented 3 months ago

@BinitDOX Unfortunately, the new fix doesn't work. The following error arises:

(venv) f:\Manga-Colorization-FJ\Manga-Colorization-FJ-main>app-stream.py --resize_method=basic
F:\Manga-Colorization-FJ\Manga-Colorization-FJ-main\colorizator.py:27: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.
  self.colorizer.generator.load_state_dict(torch.load(generator_path, map_location = device))
F:\Manga-Colorization-FJ\Manga-Colorization-FJ-main\denoising\denoiser.py:42: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.
  state_dict = torch.load(weights_path, map_location=torch.device('cpu'))
 * Serving Flask app 'app-stream'
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on all addresses (0.0.0.0)
 * Running on https://127.0.0.1:5000
 * Running on https://192.168.0.3:5000
Press CTRL+C to quit
127.0.0.1 - - [27/Jul/2024 23:49:50] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [27/Jul/2024 23:49:52] "GET /favicon.ico HTTP/1.1" 404 -
127.0.0.1 - - [27/Jul/2024 23:50:05] "OPTIONS /colorize-image-data HTTP/1.1" 200 -
Image Height: None, Image Width: 992
Requested 09a37cb0-c8d0-4d32-9b3c-3f5a9965f8f2 size 992
F:\Manga-Colorization-FJ\Manga-Colorization-FJ-main\denoising\functions.py:40: UserWarning: The torch.cuda.*DtypeTensor constructors are no longer recommended. It's best to use methods such as torch.tensor(data, dtype=*, device='cuda') to create tensors. (Triggered internally at C:\actions-runner\_work\pytorch\pytorch\builder\windows\pytorch\torch\csrc\tensor\python_tensor.cpp:80.)
  downsampledfeatures = torch.cuda.FloatTensor(N, Cout, Hout, Wout).fill_(0)
Colorized size 576 in 1.3581924438476562 seconds.
[2024-07-27 23:50:06,768] ERROR in app: Exception on /colorize-image-data [POST]
Traceback (most recent call last):
  File "f:\Manga-Colorization-FJ\Manga-Colorization-FJ-main\venv\Lib\site-packages\flask\app.py", line 1473, in wsgi_app
    response = self.full_dispatch_request()
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "f:\Manga-Colorization-FJ\Manga-Colorization-FJ-main\venv\Lib\site-packages\flask\app.py", line 882, in full_dispatch_request
    rv = self.handle_user_exception(e)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "f:\Manga-Colorization-FJ\Manga-Colorization-FJ-main\venv\Lib\site-packages\flask_cors\extension.py", line 178, in wrapped_function
    return cors_after_request(app.make_response(f(*args, **kwargs)))
                                                ^^^^^^^^^^^^^^^^^^
  File "f:\Manga-Colorization-FJ\Manga-Colorization-FJ-main\venv\Lib\site-packages\flask\app.py", line 880, in full_dispatch_request
    rv = self.dispatch_request()
         ^^^^^^^^^^^^^^^^^^^^^^^
  File "f:\Manga-Colorization-FJ\Manga-Colorization-FJ-main\venv\Lib\site-packages\flask\app.py", line 865, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)  # type: ignore[no-any-return]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "F:\Manga-Colorization-FJ\Manga-Colorization-FJ-main\app-stream.py", line 64, in colorize_image_data
    color_image_data64 = colorize_image(image, colorizer, colored_img_size, denoiser, denoiser_sigma, (img_width, img_height))
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "F:\Manga-Colorization-FJ\Manga-Colorization-FJ-main\app-stream.py", line 118, in colorize_image
    colorized_img = upscale_basic(colorized_img, original_size)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "F:\Manga-Colorization-FJ\Manga-Colorization-FJ-main\app-stream.py", line 157, in upscale_basic
    upscaled_image = cv2.resize(image, target_size, interpolation=cv2.INTER_CUBIC)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cv2.error: OpenCV(4.10.0) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\resize.cpp:4155: error: (-215:Assertion failed) inv_scale_x > 0 in function 'cv::resize'

127.0.0.1 - - [27/Jul/2024 23:50:06] "POST /colorize-image-data HTTP/1.1" 500 -
BinitDOX commented 3 months ago

Created a new backend, with the ESRGAN super resolution and unexpectedly time taken to colorize at 576px and upscale using super resolution is much less than just coloring at larger size. The quality is better than the original. Thank you for referencing that model!

Re-clone the repository, download and place the generator weights in the networks folder of Backend-New. Then simply run: python app-stream.py (The upscale_method is now set to 'super_resolution' by default)

That error is because I updated the extension (frontend) files, you can fix it by re-loading the extension package into the browser.


image download

BinitDOX commented 3 months ago

This repository desperately needs reorganization and redocumentation.

iG8R commented 3 months ago

Thank you very much for your efforts! But something went wrong, and there is no reaction from the side of the server when I open a manga page, e.g. the one mentioned above. Although, when I test whether the addon in Firefox works well in the conjunction with the server, I get that everything is fine, as you can see from the log lines 127.0.0.1 - - [28/Jul/2024 14:28:30] "GET / HTTP/1.1" 200 -. Here is the addon: managa-colorizer-anysite-0.3.0.xpi.txt

PS. BTW, why are there so many warnings in the log?

(venv) f:\Manga-Colorization-FJ\Manga-Colorization-FJ-main>app-stream.py
F:\Manga-Colorization-FJ\Manga-Colorization-FJ-main\colorizator.py:22: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.
  state_dict = torch.load(config.colorizer_path, map_location=self.device)
F:\Manga-Colorization-FJ\Manga-Colorization-FJ-main\denoising\denoiser.py:42: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.
  state_dict = torch.load(weights_path, map_location=torch.device('cpu'))
F:\Manga-Colorization-FJ\Manga-Colorization-FJ-main\upscalator.py:19: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.
  model = torch.load(config.upscaler_path, map_location=self.device)
f:\Manga-Colorization-FJ\Manga-Colorization-FJ-main\venv\Lib\site-packages\torch\serialization.py:1189: SourceChangeWarning: source code of class 'torch.nn.modules.conv.Conv2d' has changed. you can retrieve the original source code by accessing the object's source attribute or set `torch.nn.Module.dump_patches = True` and use the patch tool to revert the changes.
  warnings.warn(msg, SourceChangeWarning)
f:\Manga-Colorization-FJ\Manga-Colorization-FJ-main\venv\Lib\site-packages\torch\serialization.py:1189: SourceChangeWarning: source code of class 'torch.nn.modules.container.Sequential' has changed. you can retrieve the original source code by accessing the object's source attribute or set `torch.nn.Module.dump_patches = True` and use the patch tool to revert the changes.
  warnings.warn(msg, SourceChangeWarning)
f:\Manga-Colorization-FJ\Manga-Colorization-FJ-main\venv\Lib\site-packages\torch\serialization.py:1189: SourceChangeWarning: source code of class 'torch.nn.modules.activation.LeakyReLU' has changed. you can retrieve the original source code by accessing the object's source attribute or set `torch.nn.Module.dump_patches = True` and use the patch tool to revert the changes.
  warnings.warn(msg, SourceChangeWarning)
 * Serving Flask app 'app-stream'
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on all addresses (0.0.0.0)
 * Running on https://127.0.0.1:5000
 * Running on https://192.168.0.3:5000
Press CTRL+C to quit
127.0.0.1 - - [28/Jul/2024 14:25:33] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [28/Jul/2024 14:26:55] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [28/Jul/2024 14:28:30] "GET / HTTP/1.1" 200 -
BinitDOX commented 3 months ago

Oh my bad, I forgot a comma in the Firefox-AnySite extension script. Please update (git pull) and reload the package.

You can ignore those warnings. The first few security warnings occur if we load the entire model (model network code + weights), can be fixed by loading the network first (state_dict), then loading the weights. The source code warnings occur if we essetially load old model with new (updated torch) code, can be fixed by resaving your own copy of the model, then you can always load this saved model.

iG8R commented 3 months ago

Still the issue continues to exist :( The same thing happens in Firefox and Chrome. It seems that the addon does not work at all while the site is loading. I even reinstalled Manga-Colorizer from scratch, but with the same result.

MangaColorizer-server-connection-issue-Video_2024-07-28_17-23-03.webm

Log from the Firefox console ``` 17:23:18.615 Navigated to https://mangadex.org/chapter/d72a3eb8-2b20-4c39-a46f-d282eb05e64f/3 17:23:19.332 GET https://mangadex.org/chapter/d72a3eb8-2b20-4c39-a46f-d282eb05e64f/3 [HTTP/1.1 200 0ms] 17:23:20.148 GET https://mangadex.org/_nuxt/entry.C8jKr6pg.css [HTTP/3 200 60ms] 17:23:20.198 GET https://mangadex.org/_nuxt/mchunk-pg-auth-user-connections.J5HyYnhO.css [HTTP/3 200 30ms] 17:23:20.223 GET https://mangadex.org/_nuxt/mchunk-pg-group-_id_.bhaa59IK.css [HTTP/3 200 30ms] 17:23:20.239 GET https://mangadex.org/_nuxt/mchunk-pg-author-_id_.BUuKnuNh.css [HTTP/3 200 42ms] 17:23:20.254 GET https://mangadex.org/_nuxt/mchunk-pg-author-edit.Dp0Riguq.css [HTTP/3 200 29ms] 17:23:20.267 GET https://mangadex.org/_nuxt/mchunk-pg-chapter-_id_.CuO1qHx8.css [HTTP/3 200 28ms] 17:23:20.282 GET https://mangadex.org/_nuxt/mchunk-pg-title-_id_.BSe1tbJT.css [HTTP/3 200 30ms] 17:23:20.283 GET https://mangadex.org/_nuxt/mchunk-pg-misc.C1QbgJIw.css [HTTP/3 200 57ms] 17:23:20.284 GET https://mangadex.org/_nuxt/mchunk-pg-group-edit.CBMk_3p5.css [HTTP/3 200 29ms] 17:23:20.286 GET https://mangadex.org/_nuxt/mchunk-pg-list-edit.CihXXb7M.css [HTTP/3 200 29ms] 17:23:20.287 GET https://mangadex.org/_nuxt/entry.CC1PS2fU.js [HTTP/3 200 97ms] 17:23:20.288 GET https://mangadex.org/_nuxt/mchunk-pg-auth-user-connections.B5U557Wx.js [HTTP/3 200 129ms] 17:23:20.289 GET https://mangadex.org/_nuxt/mchunk-pg-group-_id_.CJzGsSZm.js [HTTP/3 200 51ms] 17:23:20.300 GET https://mangadex.org/_nuxt/mchunk-pg-author-_id_.Ch3W1q94.js [HTTP/3 200 118ms] 17:23:20.306 GET https://mangadex.org/_nuxt/mchunk-pg-author-edit.CfbAtvdj.js [HTTP/3 200 72ms] 17:23:20.315 GET https://mangadex.org/_nuxt/mchunk-pg-chapter-_id_.BKRr-8Aj.js [HTTP/3 200 102ms] 17:23:20.331 GET https://mangadex.org/_nuxt/mchunk-pg-title-_id_.DQu9kxqn.js [HTTP/3 200 59ms] 17:23:20.332 GET https://mangadex.org/_nuxt/mchunk-pg-misc.Cmbn2pEF.js [HTTP/3 200 86ms] 17:23:20.348 GET https://mangadex.org/_nuxt/mchunk-pg-group-edit.D_98yyV4.js [HTTP/3 200 50ms] 17:23:20.349 GET https://mangadex.org/_nuxt/mchunk-pg-list-edit.2WHQCKtb.js [HTTP/3 200 51ms] 17:23:20.354 Error in parsing value for ‘-webkit-text-size-adjust’. Declaration dropped. entry.C8jKr6pg.css:1:210 17:23:20.355 Error in parsing value for ‘grid-template-columns’. Declaration dropped. entry.C8jKr6pg.css:1:15855 17:23:20.355 Unknown property ‘-moz-column-gap’. Declaration dropped. entry.C8jKr6pg.css:1:17001 17:23:20.355 Unknown property ‘-moz-column-gap’. Declaration dropped. entry.C8jKr6pg.css:1:17051 17:23:20.355 Unknown property ‘-moz-column-gap’. Declaration dropped. entry.C8jKr6pg.css:1:17099 17:23:20.355 Unknown property ‘-moz-column-gap’. Declaration dropped. entry.C8jKr6pg.css:1:17145 17:23:20.357 Unknown property ‘-moz-column-gap’. Declaration dropped. entry.C8jKr6pg.css:1:38356 17:23:20.357 Ruleset ignored due to bad selector. entry.C8jKr6pg.css:1:50268 17:23:20.420 Unknown property ‘-moz-column-gap’. Declaration dropped. mchunk-pg-chapter-_id_.CuO1qHx8.css:1:4920 17:23:20.422 Unknown property ‘-moz-column-gap’. Declaration dropped. mchunk-pg-chapter-_id_.CuO1qHx8.css:1:35876 17:23:20.422 Unknown pseudo-class or pseudo-element ‘not’. Ruleset ignored due to bad selector. mchunk-pg-chapter-_id_.CuO1qHx8.css:1:39223 17:23:20.426 Error in parsing value for ‘vertical-align’. Declaration dropped. mchunk-pg-author-_id_.BUuKnuNh.css:1:8608 17:23:20.437 Unknown property ‘-moz-column-gap’. Declaration dropped. mchunk-pg-misc.C1QbgJIw.css:1:27530 17:23:20.438 Unknown property ‘-moz-column-gap’. Declaration dropped. mchunk-pg-misc.C1QbgJIw.css:1:35887 17:23:20.614 [UserPreferences] Theme change from 'undefined' to 'system'. mchunk-pg-author-_id_.Ch3W1q94.js:7:4259 17:23:20.614 [UserPreferences] Theme 'system' applied. mchunk-pg-author-_id_.Ch3W1q94.js:7:4259 17:23:20.821 Unknown descriptor ‘font-named-instance’ in @font-face rule. Skipped to next declaration. 3:1:122 17:23:20.825 Error in parsing value for ‘-webkit-text-size-adjust’. Declaration dropped. 3:231:29 17:23:20.826 Unknown property ‘-moz-column-gap’. Declaration dropped. 3:1829:19 17:23:20.826 Unknown property ‘-moz-column-gap’. Declaration dropped. 3:1833:19 17:23:21.520 Medium parser loaded app.js:2:9 17:23:21.741 GET https://mangadex.org/fonts/poppins/poppins-v19-400.woff2 [HTTP/3 200 29ms] 17:23:22.033 GET https://mangadex.org/_nuxt/workbox-window.prod.es5.D5gOYdM7.js [HTTP/3 200 31ms] 17:23:22.072 GET https://www.google.com/recaptcha/api.js?render=explicit [HTTP/3 200 57ms] 17:23:22.110 XHRGET https://mangadex.org/_nuxt/builds/meta/aefd995d-6e59-42d2-89b7-6580b5e8e0a9.json [HTTP/1.1 200 0ms] 17:23:22.124 Source map error: NetworkError when attempting to fetch resource. Resource URL: moz-extension://1b462958-c425-44f0-aca4-602fc99c7ef7/browser-polyfill.min.js Source Map URL: browser-polyfill.min.js.map 17:23:22.646 XHROPTIONS https://api.mangadex.org/auth/refresh [HTTP/3 204 78ms] 17:23:22.648 GET https://www.gstatic.com/recaptcha/releases/Xv-KF0LlBu_a0FJ9I5YSlX5m/recaptcha__en.js [HTTP/3 200 102ms] 17:23:22.900 XHRGET https://api.mangadex.org/feature-flags [HTTP/3 200 29ms] 17:23:22.958 XHRPOST https://api.mangadex.org/auth/refresh [HTTP/3 202 185ms] 17:23:23.161 [FeatureFlags] Initialized feature flags (1019ms) Object { defaultsApplication: Proxy, overridesLocal: Proxy, defaultsServer: Proxy } mchunk-pg-chapter-_id_.BKRr-8Aj.js:1:1910 17:23:23.232 GET https://www.google.com/recaptcha/api2/anchor?ar=1&k=6LflOrIaAAAAACcpRSiKQlt_X6bq-QcVjHTG1diJ&co=aHR0cHM6Ly9tYW5nYWRleC5vcmc6NDQz&hl=en&v=Xv-KF0LlBu_a0FJ9I5YSlX5m&size=invisible&cb=69d9kha069pt [HTTP/3 200 63ms] 17:23:23.233 GET https://mangadex.org/_nuxt/default.CVpzN_K2.js [HTTP/3 200 28ms] 17:23:23.257 GET https://mangadex.org/_nuxt/default.CKq7lz9R.css [HTTP/3 200 29ms] 17:23:23.564 [Announcements] Fetching announcements... mchunk-pg-chapter-_id_.BKRr-8Aj.js:1:5088 17:23:23.565 [GenericDebug] Config at time of start: Object { readStyle: 0, headerStyle: 0, _viewStyle: 0, _limitWidth: true, _limitHeight: true, _scrollLock: {…}, _longStripMargin: 4, maxWidth: -1, maxHeight: -1, limitMaxWidth: false, … } entry.CC1PS2fU.js:2:26962 17:23:23.571 Error in parsing value for ‘fill’. Declaration dropped. 3:1:1 17:23:23.577 Content-Security-Policy warnings 4 17:23:23.608 [Announcements] Fetched announcements (1ms) mchunk-pg-chapter-_id_.BKRr-8Aj.js:1:5088 17:23:23.642 Partitioned cookie or storage access was provided to “https://www.google.com/recaptcha/api2/anchor?ar=1&k=6LflOrIaAAAAACcpRSiKQlt_X6bq-QcVjHTG1diJ&co=aHR0cHM6Ly9tYW5nYWRleC5vcmc6NDQz&hl=en&v=Xv-KF0LlBu_a0FJ9I5YSlX5m&size=invisible&cb=69d9kha069pt” because it is loaded in the third-party context and dynamic state partitioning is enabled. 17:23:24.400 GET https://mangadex.org/img/brand/mangadex-logo.svg [HTTP/3 200 62ms] 17:23:24.402 GET https://mangadex.org/img/brand/mangadex-wordmark.svg [HTTP/3 200 29ms] 17:23:24.409 GET https://mangadex.org/img/miku.jpg [HTTP/3 200 111ms] 17:23:24.667 GET https://www.gstatic.com/recaptcha/releases/Xv-KF0LlBu_a0FJ9I5YSlX5m/styles__ltr.css [HTTP/3 200 64ms] 17:23:24.668 GET https://www.gstatic.com/recaptcha/releases/Xv-KF0LlBu_a0FJ9I5YSlX5m/recaptcha__en.js [HTTP/3 200 137ms] 17:23:24.860 Unknown property ‘-moz-border-radius’. Declaration dropped. styles__ltr.css:1:383 17:23:24.862 Unknown property ‘-moz-border-radius’. Declaration dropped. styles__ltr.css:1:20396 17:23:24.862 Unknown property ‘-moz-border-radius’. Declaration dropped. styles__ltr.css:1:20717 17:23:24.862 Keyframe rule ignored due to bad selector. styles__ltr.css:1:21259 17:23:24.862 Keyframe rule ignored due to bad selector. styles__ltr.css:1:21286 17:23:24.862 Keyframe rule ignored due to bad selector. styles__ltr.css:1:21376 17:23:24.862 Keyframe rule ignored due to bad selector. styles__ltr.css:1:21405 17:23:24.862 Keyframe rule ignored due to bad selector. styles__ltr.css:1:21499 17:23:24.862 Keyframe rule ignored due to bad selector. styles__ltr.css:1:21528 17:23:24.862 Keyframe rule ignored due to bad selector. styles__ltr.css:1:21622 17:23:24.862 Keyframe rule ignored due to bad selector. styles__ltr.css:1:21651 17:23:24.862 Keyframe rule ignored due to bad selector. styles__ltr.css:1:21745 17:23:24.862 Keyframe rule ignored due to bad selector. styles__ltr.css:1:21774 17:23:24.862 Keyframe rule ignored due to bad selector. styles__ltr.css:1:21868 17:23:24.862 Keyframe rule ignored due to bad selector. styles__ltr.css:1:21898 17:23:24.862 Unknown property ‘-moz-border-radius’. Declaration dropped. styles__ltr.css:1:22407 17:23:24.862 Keyframe rule ignored due to bad selector. styles__ltr.css:1:22658 17:23:24.862 Keyframe rule ignored due to bad selector. styles__ltr.css:1:22686 17:23:24.862 Keyframe rule ignored due to bad selector. styles__ltr.css:1:22787 17:23:24.862 Keyframe rule ignored due to bad selector. styles__ltr.css:1:22816 17:23:24.862 Unknown property ‘-moz-box-shadow’. Declaration dropped. styles__ltr.css:1:25771 17:23:24.862 Unknown property ‘-moz-border-radius’. Declaration dropped. styles__ltr.css:1:27041 17:23:24.862 Unknown property ‘-moz-box-shadow’. Declaration dropped. styles__ltr.css:1:27126 17:23:24.862 Unknown property ‘-moz-box-shadow’. Declaration dropped. styles__ltr.css:1:27256 17:23:24.862 Expected ‘none’, URL, or filter function but found ‘progid’. Error in parsing value for ‘filter’. Declaration dropped. styles__ltr.css:1:29103 17:23:24.863 Unknown property ‘-moz-border-radius’. Declaration dropped. styles__ltr.css:1:37651 17:23:24.863 Unknown property ‘-moz-box-shadow’. Declaration dropped. styles__ltr.css:1:38057 17:23:24.863 Unknown property ‘-moz-border-radius’. Declaration dropped. styles__ltr.css:1:41844 17:23:24.863 Unknown property ‘-moz-box-shadow’. Declaration dropped. styles__ltr.css:1:41882 17:23:24.863 Expected ‘none’, URL, or filter function but found ‘alpha(’. Error in parsing value for ‘filter’. Declaration dropped. styles__ltr.css:1:49145 17:23:24.863 Unknown property ‘-moz-transform’. Declaration dropped. styles__ltr.css:1:49867 17:23:24.863 Unknown property ‘-moz-transform’. Declaration dropped. styles__ltr.css:1:50015 17:23:24.863 Unknown property ‘-moz-backface-visibility’. Declaration dropped. styles__ltr.css:1:51258 17:23:25.041 Ignoring unsupported entryTypes: longtask. recaptcha__en.js:321:502 17:23:25.083 GET https://mangadex.org/img/flags/gb.svg [HTTP/3 200 42ms] 17:23:25.088 GET https://mangadex.org/img/flags/sq.svg [HTTP/3 200 43ms] 17:23:25.090 GET https://mangadex.org/img/flags/sa.svg [HTTP/3 200 43ms] 17:23:25.297 Uncaught TypeError: can't redefine non-configurable property "rwt" https://www.google.com/recaptcha/api2/anchor?ar=1&k=6LflOrIaAAAAACcpRSiKQlt_X6bq-QcVjHTG1diJ&co=aHR0cHM6Ly9tYW5nYWRleC5vcmc6NDQz&hl=en&v=Xv-KF0LlBu_a0FJ9I5YSlX5m&size=invisible&cb=69d9kha069pt:1 anchor:1:8 17:23:25.657 GET https://mangadex.org/fonts/poppins/poppins-v19-700.woff2 [HTTP/3 200 33ms] 17:23:25.658 GET https://mangadex.org/fonts/poppins/poppins-v19-500.woff2 [HTTP/3 200 32ms] 17:23:26.056 SecurityError: Permission denied to access property "document" on cross-origin object content-script.js:28 17:23:26.198 GET https://mangadex.org/img/flags/az.svg [HTTP/3 200 45ms] 17:23:26.199 GET https://mangadex.org/img/flags/bd.svg [HTTP/3 200 44ms] 17:23:26.201 GET https://mangadex.org/img/flags/mm.svg [HTTP/3 200 33ms] 17:23:26.201 GET https://mangadex.org/img/flags/bg.svg [HTTP/3 200 43ms] 17:23:26.202 GET https://mangadex.org/img/flags/ad.svg [HTTP/3 200 42ms] 17:23:26.204 GET https://mangadex.org/img/flags/cn.svg [HTTP/3 200 33ms] 17:23:26.205 GET https://mangadex.org/img/flags/hk.svg [HTTP/3 200 32ms] 17:23:26.213 GET https://mangadex.org/img/flags/hr.svg [HTTP/3 200 31ms] 17:23:26.214 GET https://mangadex.org/img/flags/cz.svg [HTTP/3 200 43ms] 17:23:26.216 GET https://mangadex.org/img/flags/dk.svg [HTTP/3 200 31ms] 17:23:26.217 GET https://mangadex.org/img/flags/nl.svg [HTTP/3 200 43ms] 17:23:26.218 GET https://mangadex.org/img/flags/et.svg [HTTP/3 200 54ms] 17:23:26.218 GET https://mangadex.org/img/flags/eo.svg [HTTP/3 200 32ms] 17:23:26.221 GET https://mangadex.org/img/flags/ph.svg [HTTP/3 200 31ms] 17:23:26.224 GET https://mangadex.org/img/flags/fi.svg [HTTP/3 200 30ms] 17:23:26.225 GET https://mangadex.org/img/flags/fr.svg [HTTP/3 200 35ms] 17:23:26.226 GET https://mangadex.org/img/flags/ka.svg [HTTP/3 200 61ms] 17:23:26.230 GET https://mangadex.org/img/flags/de.svg [HTTP/3 200 34ms] 17:23:26.231 GET https://mangadex.org/img/flags/gr.svg [HTTP/3 200 34ms] 17:23:26.232 GET https://mangadex.org/img/flags/il.svg [HTTP/3 200 33ms] 17:23:26.233 GET https://mangadex.org/img/flags/in.svg [HTTP/3 200 50ms] 17:23:26.234 GET https://mangadex.org/img/flags/hu.svg [HTTP/3 200 50ms] 17:23:26.235 GET https://mangadex.org/img/flags/id.svg [HTTP/3 200 60ms] 17:23:26.240 GET https://mangadex.org/img/flags/it.svg [HTTP/3 200 50ms] 17:23:26.241 GET https://mangadex.org/img/flags/jp.svg [HTTP/3 200 57ms] 17:23:26.245 GET https://mangadex.org/img/flags/kz.svg [HTTP/3 200 59ms] 17:23:26.246 GET https://mangadex.org/img/flags/kr.svg [HTTP/3 200 58ms] 17:23:26.247 GET https://mangadex.org/img/flags/ri.svg [HTTP/3 200 48ms] 17:23:26.248 GET https://mangadex.org/img/flags/lt.svg [HTTP/3 200 47ms] 17:23:26.259 GET https://mangadex.org/img/flags/my.svg [HTTP/3 200 48ms] 17:23:26.260 GET https://mangadex.org/img/flags/mn.svg [HTTP/3 200 47ms] 17:23:26.263 GET https://mangadex.org/img/flags/np.svg [HTTP/3 200 57ms] 17:23:26.265 GET https://mangadex.org/img/flags/no.svg [HTTP/3 200 56ms] 17:23:26.266 GET https://mangadex.org/img/flags/ir.svg [HTTP/3 200 56ms] 17:23:26.267 GET https://mangadex.org/img/flags/pl.svg [HTTP/3 200 45ms] 17:23:26.273 GET https://mangadex.org/img/flags/pt.svg [HTTP/3 200 55ms] 17:23:26.276 GET https://mangadex.org/img/flags/br.svg [HTTP/3 200 55ms] 17:23:26.281 GET https://mangadex.org/img/flags/ro.svg [HTTP/3 200 44ms] 17:23:26.282 GET https://mangadex.org/img/flags/ru.svg [HTTP/3 200 55ms] 17:23:26.283 GET https://mangadex.org/img/flags/rs.svg [HTTP/3 200 59ms] 17:23:26.287 GET https://mangadex.org/img/flags/sk.svg [HTTP/3 200 58ms] 17:23:26.289 GET https://mangadex.org/img/flags/si.svg [HTTP/3 200 58ms] 17:23:26.291 GET https://mangadex.org/img/flags/es.svg [HTTP/3 200 58ms] 17:23:26.292 GET https://mangadex.org/img/flags/mx.svg [HTTP/3 200 58ms] 17:23:26.293 GET https://mangadex.org/img/flags/se.svg [HTTP/3 200 51ms] 17:23:26.296 GET https://mangadex.org/img/flags/tam.svg [HTTP/3 200 51ms] 17:23:26.298 GET https://mangadex.org/img/flags/tel.svg [HTTP/3 200 62ms] 17:23:26.301 GET https://mangadex.org/img/flags/th.svg [HTTP/3 200 73ms] 17:23:26.309 GET https://mangadex.org/img/flags/tr.svg [HTTP/3 200 76ms] 17:23:26.313 GET https://mangadex.org/img/flags/ua.svg [HTTP/3 200 75ms] 17:23:26.317 GET https://mangadex.org/img/flags/vn.svg [HTTP/3 200 76ms] 17:23:26.334 GET https://www.google.com/js/bg/0dKosa6Lh2NxpFh0svIz4L-wz65qkRTTn4jOj6ZWQ1s.js [HTTP/3 200 17ms] 17:23:26.335 GET https://fonts.gstatic.com/s/roboto/v18/KFOmCnqEu92Fr1Mu4mxK.woff2 [HTTP/3 200 54ms] 17:23:26.338 GET https://fonts.gstatic.com/s/roboto/v18/KFOlCnqEu92Fr1MmEU9fBBc4.woff2 [HTTP/3 200 50ms] 17:23:26.383 XHRGET https://api.mangadex.org/chapter/d72a3eb8-2b20-4c39-a46f-d282eb05e64f?includes[]=scanlation_group&includes[]=manga&includes[]=user [HTTP/3 200 407ms] 17:23:26.383 XHRGET https://api.mangadex.org/at-home/server/d72a3eb8-2b20-4c39-a46f-d282eb05e64f?forcePort443=false [HTTP/3 200 611ms] 17:23:26.808 GET https://www.gstatic.com/recaptcha/api2/logo_48.png [HTTP/3 200 21ms] 17:23:27.075 Source map error: map is undefined Resource URL: moz-extension://1b462958-c425-44f0-aca4-602fc99c7ef7/browser-polyfill.min.js Source Map URL: browser-polyfill.min.js.map 17:23:27.092 [Reader Store] Marking C:d72a3eb8-2b20-4c39-a46f-d282eb05e64f read mchunk-pg-chapter-_id_.BKRr-8Aj.js:1:30430 17:23:27.098 GET https://www.google.com/recaptcha/api2/webworker.js?hl=en&v=Xv-KF0LlBu_a0FJ9I5YSlX5m [HTTP/3 200 39ms] 17:23:27.109 [Reader Store] Fetching aggregate for d72a3eb8-2b20-4c39-a46f-d282eb05e64f . Groups: Array [ "c7ae529a-8392-4154-ac18-576178ef0df3" ] mchunk-pg-chapter-_id_.BKRr-8Aj.js:1:30430 17:23:27.110 [Reader Cache] Aggregate cache miss, fetching: Array [ "c7ae529a-8392-4154-ac18-576178ef0df3" ] mchunk-pg-chapter-_id_.BKRr-8Aj.js:1:25316 17:23:27.132 Expected color but found ‘success’. Error in parsing value for ‘color’. Declaration dropped. 3:1:1 17:23:27.141 GET https://mangadex.org/pwa/icons/icon-180.png [HTTP/3 200 42ms] 17:23:27.142 GET https://mangadex.org/favicon.svg [HTTP/3 200 42ms] 17:23:27.161 [Reader Page Manager] Server loaded with 239999 ms left mchunk-pg-chapter-_id_.BKRr-8Aj.js:1:18508 17:23:27.190 [Reader Store] Jumping to page G:2 mchunk-pg-chapter-_id_.BKRr-8Aj.js:1:30430 17:23:27.713 Source map error: map is undefined Resource URL: moz-extension://1b462958-c425-44f0-aca4-602fc99c7ef7/browser-polyfill.min.js Source Map URL: browser-polyfill.min.js.map 17:23:28.318 Error in parsing value for ‘-webkit-text-size-adjust’. Declaration dropped. 3:559:29 17:23:28.318 Error in parsing value for ‘-moz-text-size-adjust’. Declaration dropped. 3:560:26 17:23:28.318 Unknown property ‘text-size-adjust’. Declaration dropped. 3:561:20 17:23:28.319 Unknown pseudo-class or pseudo-element ‘-ms-expand’. Ruleset ignored due to bad selector. 3:1249:2 17:23:28.320 Unknown pseudo-class or pseudo-element ‘-ms-expand’. Ruleset ignored due to bad selector. 3:1452:8 17:23:28.320 Unknown pseudo-class or pseudo-element ‘-ms-check’. Ruleset ignored due to bad selector. 3:1508:19 17:23:28.321 Unknown pseudo-class or pseudo-element ‘-ms-browse’. Ruleset ignored due to bad selector. 3:1742:15 17:23:28.321 Unknown pseudo-class or pseudo-element ‘-ms-browse’. Ruleset ignored due to bad selector. 3:1769:15 17:23:28.321 Unknown property ‘-moz-transition’. Declaration dropped. 3:1796:19 17:23:28.321 Unknown pseudo-class or pseudo-element ‘-ms-track’. Ruleset ignored due to bad selector. 3:1800:16 17:23:28.321 Unknown property ‘-moz-transition’. Declaration dropped. 3:1831:19 17:23:28.321 Unknown pseudo-class or pseudo-element ‘-ms-thumb’. Ruleset ignored due to bad selector. 3:1835:16 17:23:28.321 Unknown pseudo-class or pseudo-element ‘-ms-thumb’. Ruleset ignored due to bad selector. 3:1862:23 17:23:28.322 Keyframe rule ignored due to bad selector. 3:2281:29 17:23:28.513 GET https://www.gstatic.com/recaptcha/releases/Xv-KF0LlBu_a0FJ9I5YSlX5m/recaptcha__en.js [HTTP/3 200 39ms] 17:23:28.514 XHRGET https://api.mangadex.org/statistics/chapter?chapter[]=d72a3eb8-2b20-4c39-a46f-d282eb05e64f [HTTP/3 200 28ms] 17:23:28.515 XHRGET https://api.mangadex.org/manga/0b171f64-89a5-4c37-b5f9-75cca57e8787/aggregate?translatedLanguage[]=ru&groups[]=c7ae529a-8392-4154-ac18-576178ef0df3 [HTTP/3 200 41ms] 17:23:28.743 XHRGET https://cmdxd98sb0x3yprd.mangadex.network/data/a6b37349c7775bdfb0d94cf6afc60405/C3-28c354fac09596ca958ab3216963310f9fc8969f671ac100899411bee3066b50.jpg [HTTP/3 200 171ms] 17:23:28.746 XHRGET https://cmdxd98sb0x3yprd.mangadex.network/data/a6b37349c7775bdfb0d94cf6afc60405/C1-120b5f36e666d79ee2cf74c271a3b257204af19bf01c977daf593cc391835443.jpg [HTTP/3 200 179ms] 17:23:28.748 XHRGET https://cmdxd98sb0x3yprd.mangadex.network/data/a6b37349c7775bdfb0d94cf6afc60405/C4-cf56a5a1029c4eb094b67e18507464da4c82a3ab2d489f8a49966c1df423d0c2.jpg [HTTP/3 200 218ms] 17:23:28.748 XHRGET https://cmdxd98sb0x3yprd.mangadex.network/data/a6b37349c7775bdfb0d94cf6afc60405/C2-7e0ce67413ff9a33a7eefcd6999c25b22ec25e673d43cfa6ddc06ea84c8354bc.jpg [HTTP/3 200 200ms] 17:23:28.749 XHRGET https://cmdxd98sb0x3yprd.mangadex.network/data/a6b37349c7775bdfb0d94cf6afc60405/C6-f18c63080ef03f1024b746e1f672bf5a0530e979b035e2f70bb95bb259fdb1c7.jpg [HTTP/3 200 219ms] 17:23:28.749 XHRGET https://cmdxd98sb0x3yprd.mangadex.network/data/a6b37349c7775bdfb0d94cf6afc60405/C5-46a41328cde21f8966e6ad74de3280d3a4027cde2c4d328b9ac9c053b74e5681.jpg [HTTP/3 200 219ms] 17:23:28.750 XHRGET https://cmdxd98sb0x3yprd.mangadex.network/data/a6b37349c7775bdfb0d94cf6afc60405/C7-04cc75ee498817aa201753018e81f34aa78b3d8b7ddf7e706ecd59756e64b0a6.jpg [HTTP/3 200 230ms] 17:23:29.955 Source map error: map is undefined Resource URL: moz-extension://1b462958-c425-44f0-aca4-602fc99c7ef7/browser-polyfill.min.js Source Map URL: browser-polyfill.min.js.map 17:23:30.512 XHRGET https://cmdxd98sb0x3yprd.mangadex.network/data/a6b37349c7775bdfb0d94cf6afc60405/C8-0685282c3cd3be4fa8dd9e22fc6ffe65278b322028bc7746668d7c1f6cfd72ac.jpg [HTTP/3 200 123ms] 17:23:30.513 XHRGET https://cmdxd98sb0x3yprd.mangadex.network/data/a6b37349c7775bdfb0d94cf6afc60405/C9-89df82f4568bb6f6ce22cd7cac7cbd49907e0b76bdf22d7741eb82eee422a413.jpg [HTTP/3 200 42ms] 17:23:30.517 XHRGET https://cmdxd98sb0x3yprd.mangadex.network/data/a6b37349c7775bdfb0d94cf6afc60405/C10-9a7e1ecdd802a74a92db4a55e57a057b0b955c8fab839469e8271bcdbe2e3123.jpg [HTTP/3 200 47ms] 17:23:30.519 XHRGET https://cmdxd98sb0x3yprd.mangadex.network/data/a6b37349c7775bdfb0d94cf6afc60405/C11-846acef422176577128f5c973f0e3de7d78c900fdac8c6e527a0351122596c9e.jpg [HTTP/3 200 102ms] 17:23:30.520 XHRGET https://cmdxd98sb0x3yprd.mangadex.network/data/a6b37349c7775bdfb0d94cf6afc60405/C12-a13b8ccbe1a6b625cf01600c9c6df776681bdf71ba10aae8aaddbdf227c4dfd7.jpg [HTTP/3 200 125ms] 17:23:30.523 XHRGET https://cmdxd98sb0x3yprd.mangadex.network/data/a6b37349c7775bdfb0d94cf6afc60405/C13-2ca8bb9a4045e9bf46c0e294db2a89ad591e2b88680fc950d042fc16d139e2df.jpg [HTTP/3 200 125ms] 17:23:31.792 XHRGET https://cmdxd98sb0x3yprd.mangadex.network/data/a6b37349c7775bdfb0d94cf6afc60405/C14-2444875a0c066a00c59ee55d9768ac7d2267bd27210b227f0b219e558be411bc.jpg [HTTP/3 200 36ms] 17:23:32.072 XHRGET https://cmdxd98sb0x3yprd.mangadex.network/data/a6b37349c7775bdfb0d94cf6afc60405/C15-3446fb5a6e0205ce4a18efc74067d6deff7086e4b9ed8c5b0fafee971a5613a0.jpg [HTTP/3 200 40ms] 17:23:32.079 XHRGET https://cmdxd98sb0x3yprd.mangadex.network/data/a6b37349c7775bdfb0d94cf6afc60405/C16-7c56df618b5ab31b9a17a53c7744c78a0a63717e0871729228fdc49139e05c27.jpg [HTTP/3 200 44ms] 17:23:32.087 XHRGET https://cmdxd98sb0x3yprd.mangadex.network/data/a6b37349c7775bdfb0d94cf6afc60405/C17-0c5f05eab9fe42dd1af378d62a7e891deb88019758abf857a2281813f59ad39b.jpg [HTTP/3 200 49ms] 17:23:32.092 XHRGET https://cmdxd98sb0x3yprd.mangadex.network/data/a6b37349c7775bdfb0d94cf6afc60405/C18-9899f1295c313c6224e392a4719e9e69108132edbc7079026730e93fb32f3ed1.jpg [HTTP/3 200 60ms] 17:23:32.483 XHRGET https://cmdxd98sb0x3yprd.mangadex.network/data/a6b37349c7775bdfb0d94cf6afc60405/C19-7e8c5c677f5ffdb64e75c76a74ac6480db951ff47912be26db358e73958c0e5e.jpg [HTTP/3 200 43ms] 17:23:32.761 XHRGET https://cmdxd98sb0x3yprd.mangadex.network/data/a6b37349c7775bdfb0d94cf6afc60405/C20-8bb353e359226e67380bc768931fba1ef1337971c53669411570059320897c48.jpg [HTTP/3 200 31ms] 17:23:32.782 XHRGET https://cmdxd98sb0x3yprd.mangadex.network/data/a6b37349c7775bdfb0d94cf6afc60405/C21-e15ab223bd1f5184c2fd547f91d8ef167c45b8236c9994a5bf7720a340704d80.jpg [HTTP/3 200 37ms] 17:23:32.783 XHRGET https://cmdxd98sb0x3yprd.mangadex.network/data/a6b37349c7775bdfb0d94cf6afc60405/C23-cec0b3a48c9218ae2206732b676b8831c08d6a70ef20a3a58eb29c4b1ea7b9c2.jpg [HTTP/3 200 58ms] 17:23:32.783 XHRGET https://cmdxd98sb0x3yprd.mangadex.network/data/a6b37349c7775bdfb0d94cf6afc60405/C22-be9ba6b7bc09788cfc05df3df7696e27156a62599bb48eac275034e0e517abba.jpg [HTTP/3 200 54ms] 17:23:32.784 XHRGET https://cmdxd98sb0x3yprd.mangadex.network/data/a6b37349c7775bdfb0d94cf6afc60405/C24-b89472c8caa9e3a27c79896b00b75c4cd188aa5d3143ad00911130ce06f41d34.jpg [HTTP/3 200 59ms] 17:23:32.914 XHRGET https://cmdxd98sb0x3yprd.mangadex.network/data/a6b37349c7775bdfb0d94cf6afc60405/C25-b6060c884c20fa6c338f98766cb037242e108630fd08915a6740b088616aeeae.jpg [HTTP/3 200 27ms] 17:23:33.082 XHRGET https://cmdxd98sb0x3yprd.mangadex.network/data/a6b37349c7775bdfb0d94cf6afc60405/C26-d33862afadb79b4da43c6fe6690fe7329d731dc3c87e3e30fe8a7eb28af3826d.jpg [HTTP/3 200 37ms] 17:23:33.083 XHRGET https://cmdxd98sb0x3yprd.mangadex.network/data/a6b37349c7775bdfb0d94cf6afc60405/C27-31c71789f7f70da6ca9262a55ac14a2fd91f4d75061723373c892dca16ae1464.jpg [HTTP/3 200 94ms] 17:23:33.084 XHRGET https://cmdxd98sb0x3yprd.mangadex.network/data/a6b37349c7775bdfb0d94cf6afc60405/C28-2cfa6a041793f9a28fb305912b45332432f1bb4cfb39925bf7de1d1029f42941.jpg [HTTP/3 200 65ms] 17:23:33.085 XHRGET https://cmdxd98sb0x3yprd.mangadex.network/data/a6b37349c7775bdfb0d94cf6afc60405/C29-dc446ce48b874bc89416df5b485b2a8b8191758e5bad60d41fd0383537028904.jpg [HTTP/3 200 90ms] 17:23:33.086 XHRGET https://cmdxd98sb0x3yprd.mangadex.network/data/a6b37349c7775bdfb0d94cf6afc60405/C31-03bd38a188c71bf099c03283dd3dca45c93aa8553274d9c987ac2eb70ee9b507.jpg [HTTP/3 200 97ms] 17:23:33.086 XHRGET https://cmdxd98sb0x3yprd.mangadex.network/data/a6b37349c7775bdfb0d94cf6afc60405/C30-6bfd5f871bfa240fe14ceab7936c88afbf71fd4e91ebee50d8a467723df76515.jpg [HTTP/3 200 90ms] 17:23:33.236 XHRGET https://cmdxd98sb0x3yprd.mangadex.network/data/a6b37349c7775bdfb0d94cf6afc60405/C32-3b44020152faf1bf8e478447fb2200e32289afc02515b0f10c11931b4caaa331.jpg [HTTP/3 200 37ms] ```
iG8R commented 3 months ago

In Chrome:

image

iG8R commented 3 months ago

Sorry, my bad, it turns out that I had to click the "Colorize!" button to start colorization on the site, although on earlier versions I had colorization automatically started right after loading the page with manga.

iG8R commented 3 months ago

I noticed that 2 files (upscaled.png and colored.png) appear in the root directory while the colorizer is running. Is it possible to create a cache and at the same time a kind of catalog of the mangas that were already colored, saving the images themselves in a structured way? This way, the unnecessary repeated work by the colorizer can be avoided in the future when visiting these same pages and at the same time store them locally so that users can view them through third-party readers. Also, it would be great to store finished colore images in the WEBP format, while preserving free disk space.

iG8R commented 3 months ago

And one more thing, can it be possible to make a "Show Original" button in addition to the "Colorize!" button? Since colorization does not always go well with some types of text.

https://senkuro.com/manga/re-monster/chapters/119429828913939988/pages/4

image

BinitDOX commented 3 months ago
iG8R commented 3 months ago

Thanks a lot again!

  1. Initially, when I first found your project, I read about needing to click the "Colorize!" button in the instructions. However, everything worked for me without clicking it initially, so I completely forgot about it. When I hit a dead end and realized the issue was only with the addon, I looked at the code and saw that colorization actually starts when a user click that button...
  2. It would be great to have such functionality. As for the organization being complex, well, wouldn't copying the structure of the site itself, as the Colorizer sees it, be suitable?
  3. Thank you very much! I'll try it.
BinitDOX commented 3 months ago

The colorizer simply queries the img tags and replaces the grey images with colored. A simple way to make folder structure is to make it exactly like the URL: https://senkuro.com/manga/re-monster/chapters/119429828913939988/pages/4, so senkuro->manga->re-monster->chapters->119429828913939988->pages->4 But if the URL is like: https://mangadex.org/chapter/d72a3eb8-2b20-4c39-a46f-d282eb05e64f/3, there is no manga title. Another way is to give the option of setting the title and chapter in the extension manually. I'll look into this tomorrow.

iG8R commented 3 months ago

Thank you for the explanation. BTW, why do the colors change so weird when the image size differs from 576? As can be seen from the very first project of the original author, there is no such binding to size anywhere in the code at all. https://github.com/qweasdd/manga-colorization

iG8R commented 3 months ago

But if the URL is like: https://mangadex.org/chapter/d72a3eb8-2b20-4c39-a46f-d282eb05e64f/3, there is no manga title. Another way is to give the option of setting the title and chapter in the extension manually. I'll look into this tomorrow.

Besides manually setting the title and chapter, perhaps it's worth considering automatically generating them based on the browser tab's title?

BinitDOX commented 3 months ago

Colors are weird, probably because the model was trained by resizing the images down to 576. Then multiple Conv2D encoder blocks encodes the image down to something like 4 or 2. Then some processing (pattern learn / coloring etc) happens at this latent encoded space, then the image is decoded again by TransposeConv2D decoders back to 576. If you give the model an image size greater than 576 and if it dynamically doesnt add more Conv2D encoders, the encoded latent image stops at a higher dimention. For example if 576 goes down to 4. Then 1152 will go down only to 8. Processing at a larger size will not only take much more time but also return bad results. This could be the reason for bad colors.

I have previously experimented with GANs before (~3y ago), if you want to do it too:

  1. https://www.kaggle.com/code/yeeandres/patchgan/notebook
  2. https://www.kaggle.com/code/yeeandres/eitm-gan/notebook
  3. https://www.kaggle.com/code/yeeandres/stylegan2/notebook
  4. https://www.kaggle.com/code/yeeandres/progan/notebook I had also trained an anime colorizer before, but I probably lost it. Coding and training a model like this is not that hard if you already have a detailed research paper.

For example in this code: If I pass a 256x256x3 to it, every 'down' block downsizes the image by 2 but also increases the channels. So at down7, image may be 2x2x512, then at the end of final_up, image may be back to 256x256x3. If you pass a larger image, model will accept but the bottleneck will be larger and inefficient.

class Generator(nn.Module):
    def __init__(self, in_channels=35, features=64):
        super(Generator, self).__init__()

        self.down1 = UNetEncoder(in_channels, features, normalize=False)
        self.down2 = UNetEncoder(features, features*2)
        self.down3 = UNetEncoder(features*2, features*4)
        self.down4 = UNetEncoder(features*4, features*8)
        self.down5 = UNetEncoder(features*8, features*8, dropout=True)
        self.down6 = UNetEncoder(features*8, features*8, dropout=True)
        self.down7 = UNetEncoder(features*8, features*8, dropout=True)

        self.bottleneck = UNetEncoder(features*8, features*8, normalize=False, dropout=True)

        self.up1 = UNetDecoder(features*8, features*8, dropout=True)
        self.up2 = UNetDecoder(features*8*2, features*8, dropout=True)
        self.up3 = UNetDecoder(features*8*2, features*8, dropout=True)
        self.up4 = UNetDecoder(features*8*2, features*8)
        self.up5 = UNetDecoder(features*8*2, features*4)
        self.up6 = UNetDecoder(features*4*2, features*2)
        self.up7 = UNetDecoder(features*2*2, features)

        self.final_up = nn.Sequential(nn.ConvTranspose2d(features*2, 3, 4, 2, 1), nn.Tanh())

I'll consider the automatic structure generation.

iG8R commented 3 months ago

Oh, thank you so much for such a detailed explanation! I really appreciate it!

iG8R commented 3 months ago

I conducted the following experiment. I resized the image to a width of 1152 pixels, divided it into 4 parts so that the width of the separated images was 576 pixels, and then tried to process them...

Original images:

III III

Processed images:

III III

Eh, the color distortion is still there with even worse results.

BinitDOX commented 3 months ago

Will check this soon.

BinitDOX commented 3 months ago

This tiling is another method which could've been used instead of just upscaling., Find closest width divisible by 32, then divide the image into tiles of 576 width, then colorize, then reassemble. But since the colorizer was trained with a dataset distribution containing full images where it probably learnt about context (grass, trees, buildings, relations, etc), if you give it tiled images (different distribution), it fails. That's probably why the other fork, even though it has the code to use tiling, doesn't use it for colorizer but only for super resolution.

But the tiles you provided are rich with context and should've worked.

downloadtile

iG8R commented 3 months ago

These eye-popping colors are just terrible, it's better as it was originally, and if the text is poorly visible, then look at the black-and-white original. Or maybe there are some parameters that could be passed to the model to correct the color palette, for example, I saw that in the source code of the v1 project there is a parameter sigma, not denoise sigma, but in the v2 project it disappeared somewhere.

BinitDOX commented 3 months ago

I'm unable to find the sigma, can you please link it? You can also play with the denoiser sigma, since it changes the image a bit, you can get different outputs.

The caching configuration will have to be set for each site, although it's quite easy, it has to be hardcoded once manually. I've added it for these sites, you can update and test.


    const siteConfigurations = {
        'mangadex.org': {
            titleSelector: 'a[data-v-5d3b2210]',
            chapterSelector: 'div#chapter-selector span[data-v-d2fabe5b]',
            getTitle: (document) => document.querySelector(siteConfigurations['mangadex.org'].titleSelector)?.innerText,
            getChapter: (document) => document.querySelector(siteConfigurations['mangadex.org'].chapterSelector)?.innerText,
        },
        'senkuro.com': {
            titleSelector: 'p.nav-reader-caption__desktop',
            chapterSelector: 'p.nav-reader-caption__mobile',
            getTitle: (document) => document.querySelector(siteConfigurations['senkuro.com'].titleSelector)?.innerText,
            getChapter: (document) => document.querySelector(siteConfigurations['senkuro.com'].chapterSelector)?.innerText,
        },
        'chapmanganelo.com': {
            titleSelector: 'div.panel-breadcrumb a[title]',
            chapterSelector: 'div.panel-breadcrumb a[title]',
            getTitle: (document) => document.querySelectorAll(siteConfigurations['chapmanganelo.com'].titleSelector)?.[1]?.innerText,
            getChapter: (document) => document.querySelectorAll(siteConfigurations['chapmanganelo.com'].chapterSelector)?.[2]?.innerText,
        },
        'fanfox.net' : {
            titleSelector: 'p.reader-header-title-1 a[href]',
            chapterSelector: 'p.reader-header-title-2',
            getTitle: (document) => document.querySelector(siteConfigurations['fanfox.net'].titleSelector)?.innerText,
            getChapter: (document) => document.querySelector(siteConfigurations['fanfox.net'].chapterSelector)?.innerText,
        },
        'mangakakalot.com' : {
            titleSelector: 'div.breadcrumb span[itemprop=name]',
            chapterSelector: 'div.breadcrumb span[itemprop=name]',
            getTitle: (document) => document.querySelectorAll(siteConfigurations['mangakakalot.com'].titleSelector)?.[1]?.innerText,
            getChapter: (document) => document.querySelectorAll(siteConfigurations['mangakakalot.com'].chapterSelector)?.[2]?.innerText,
        }
    };
    

Provide me a list of sites that you want it to work for. I usually only use a site like mangakakalot.

iG8R commented 3 months ago

I'm unable to find the sigma, can you please link it?

Sure, https://github.com/qweasdd/manga-colorization/blob/85607e196ca1f554c315ca2982cb0463808d7549/inference.py#L147

You can also play with the denoiser sigma, since it changes the image a bit, you can get different outputs.

I've already done it, but to no avail. https://github.com/qweasdd/manga-colorization-v2/issues/17#issuecomment-2254712104

The caching configuration will have to be set for each site, although it's quite easy, it has to be hardcoded once manually. I've added it for these sites, you can update and test.

Thank you, it's great! Perhaps it would be more convenient to dedicate a separate configuration file for sites whose data will be cached? My sites' list, offhand from memory: Besides senkuro.com readmanga.live remanga.org manhuatop.org manhuaus.com

BinitDOX commented 3 months ago

Perhaps it would be more convenient to dedicate a separate configuration file for sites whose data will be cached?

Great idea! will do that tomorrow along with the sigma param.

BinitDOX commented 3 months ago

Configuration file created. The previous v1 project also had an option to give color hints, basically driving the model to follow those colors. Since it was manual work, it was probably removed in v2, along with params like sigma, etc.

iG8R commented 3 months ago

It's not that urgent, but is it possible to implement the same feature to give color hints in MC, since the eye-gouging colors in some images can be really upsetting. For example, when someone is depicted eating steak or fish, and they are green, as if they have gone bad. https://mangadex.org/chapter/89ddbe27-e814-4d91-8701-318e6ff7a082/2

vatavian commented 3 months ago

I have also noticed how often food tends to be colored green and wondered whether this is because the training data is skewed toward green food. Does our latest version let us try this page with 576 width to see if that helps? All the other coloring in this one looks great, though.

iG8R commented 3 months ago

@vatavian The example above was colorized with the latest version without changing the output size, i.e. it was colorized at 576 and then 4x upscaled.

BinitDOX commented 3 months ago

let us try this page with 576 width

Since the model works best with 576, it is now fixed in the latest version, you can change and experiment with it ~line 256 in app-stream

when someone is depicted eating steak or fish, and they are green

Most probably a model problem, a denoise of 100 changes it's color, but also removes details from the image.

iG8R commented 3 months ago

Most probably a model problem, a denoise of 100 changes it's color, but also removes details from the image.

I agree, it looks better in relation to food, but the fact that there are practically no details and the picture in general turns out to be blurred and the characters' faces are deformed does not give this method an advantage, because in fact you have to choose between bad and bad.