bloc97 / Anime4K

A High-Quality Real Time Upscaler for Anime Video
https://bloc97.github.io/Anime4K/
MIT License
17.98k stars 1.34k forks source link

Not working on macOS with Apple Silicon #178

Open satvikpendem opened 2 years ago

satvikpendem commented 2 years ago

Fortunately I was able to follow this guide (https://atlassc.net/2022/01/05/anime4k-on-m1-max/) and got it to work. The article OP only specifies a single profile but I went ahead and made the equivalent profiles for the modes in the Windows and Linux instructions, as seen below. Feel free to add them to a macOS install guide.

# mpv.conf

[Anime4K_A_A]
glsl-shaders-append="~~/shaders/Anime4K_Clamp_Highlights.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Restore_CNN_VL.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Restore_CNN_M.glsl"
glsl-shaders-append="~~/shaders/Anime4K_AutoDownscalePre_x2.glsl"
glsl-shaders-append="~~/shaders/Anime4K_AutoDownscalePre_x4.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"

[Anime4K_A]
glsl-shaders-append="~~/shaders/Anime4K_Clamp_Highlights.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Restore_CNN_VL.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl"
glsl-shaders-append="~~/shaders/Anime4K_AutoDownscalePre_x2.glsl"
glsl-shaders-append="~~/shaders/Anime4K_AutoDownscalePre_x4.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"

[Anime4K_B_B]
glsl-shaders-append="~~/shaders/Anime4K_Clamp_Highlights.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Restore_CNN_Soft_VL.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl"
glsl-shaders-append="~~/shaders/Anime4K_AutoDownscalePre_x2.glsl"
glsl-shaders-append="~~/shaders/Anime4K_AutoDownscalePre_x4.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Restore_CNN_Soft_M.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"

[Anime4K_B]
glsl-shaders-append="~~/shaders/Anime4K_Clamp_Highlights.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Restore_CNN_Soft_VL.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl"
glsl-shaders-append="~~/shaders/Anime4K_AutoDownscalePre_x2.glsl"
glsl-shaders-append="~~/shaders/Anime4K_AutoDownscalePre_x4.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"

[Anime4K_C_A]
glsl-shaders-append="~~/shaders/Anime4K_Clamp_Highlights.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Upscale_Denoise_CNN_x2_VL.glsl"
glsl-shaders-append="~~/shaders/Anime4K_AutoDownscalePre_x2.glsl"
glsl-shaders-append="~~/shaders/Anime4K_AutoDownscalePre_x4.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Restore_CNN_M.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"

[Anime4K_C]
glsl-shaders-append="~~/shaders/Anime4K_Clamp_Highlights.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Upscale_Denoise_CNN_x2_VL.glsl"
glsl-shaders-append="~~/shaders/Anime4K_AutoDownscalePre_x2.glsl"
glsl-shaders-append="~~/shaders/Anime4K_AutoDownscalePre_x4.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"

[Anime4K_Fast_A_A]
glsl-shaders-append="~~/shaders/Anime4K_Clamp_Highlights.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Restore_CNN_M.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Restore_CNN_S.glsl"
glsl-shaders-append="~~/shaders/Anime4K_AutoDownscalePre_x2.glsl"
glsl-shaders-append="~~/shaders/Anime4K_AutoDownscalePre_x4.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Upscale_CNN_x2_S.glsl"

[Anime4K_Fast_A]
glsl-shaders-append="~~/shaders/Anime4K_Clamp_Highlights.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Restore_CNN_M.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"
glsl-shaders-append="~~/shaders/Anime4K_AutoDownscalePre_x2.glsl"
glsl-shaders-append="~~/shaders/Anime4K_AutoDownscalePre_x4.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Upscale_CNN_x2_S.glsl"

[Anime4K_Fast_B_B]
glsl-shaders-append="~~/shaders/Anime4K_Clamp_Highlights.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Restore_CNN_Soft_M.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"
glsl-shaders-append="~~/shaders/Anime4K_AutoDownscalePre_x2.glsl"
glsl-shaders-append="~~/shaders/Anime4K_AutoDownscalePre_x4.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Restore_CNN_Soft_S.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Upscale_CNN_x2_S.glsl"

[Anime4K_Fast_B]
glsl-shaders-append="~~/shaders/Anime4K_Clamp_Highlights.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Restore_CNN_Soft_M.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"
glsl-shaders-append="~~/shaders/Anime4K_AutoDownscalePre_x2.glsl"
glsl-shaders-append="~~/shaders/Anime4K_AutoDownscalePre_x4.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Upscale_CNN_x2_S.glsl"

[Anime4K_Fast_C_A]
glsl-shaders-append="~~/shaders/Anime4K_Clamp_Highlights.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Upscale_Denoise_CNN_x2_M.glsl"
glsl-shaders-append="~~/shaders/Anime4K_AutoDownscalePre_x2.glsl"
glsl-shaders-append="~~/shaders/Anime4K_AutoDownscalePre_x4.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Restore_CNN_S.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Upscale_CNN_x2_S.glsl"

[Anime4K_Fast_C]
glsl-shaders-append="~~/shaders/Anime4K_Clamp_Highlights.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Upscale_Denoise_CNN_x2_M.glsl"
glsl-shaders-append="~~/shaders/Anime4K_AutoDownscalePre_x2.glsl"
glsl-shaders-append="~~/shaders/Anime4K_AutoDownscalePre_x4.glsl"
glsl-shaders-append="~~/shaders/Anime4K_Upscale_CNN_x2_S.glsl"
# input.conf

# High end variants
CTRL+1 no-osd change-list glsl-shaders clr ""; apply-profile "Anime4K_A_A"; show-text "Profile: Anime4K_A_A"
CTRL+2 no-osd change-list glsl-shaders clr ""; apply-profile "Anime4K_A"; show-text "Profile: Anime4K_A"
CTRL+3 no-osd change-list glsl-shaders clr ""; apply-profile "Anime4K_B_B"; show-text "Profile: Anime4K_B_B"
CTRL+4 no-osd change-list glsl-shaders clr ""; apply-profile "Anime4K_B"; show-text "Profile: Anime4K_B"
CTRL+5 no-osd change-list glsl-shaders clr ""; apply-profile "Anime4K_C_A"; show-text "Profile: Anime4K_C_A"
CTRL+6 no-osd change-list glsl-shaders clr ""; apply-profile "Anime4K_C"; show-text "Profile: Anime4K_C"

# Fast variants
CTRL+1 no-osd change-list glsl-shaders clr ""; apply-profile "Anime4K_Fast_A_A"; show-text "Profile: Anime4K_Fast_A_A"
CTRL+2 no-osd change-list glsl-shaders clr ""; apply-profile "Anime4K_Fast_A"; show-text "Profile: Anime4K_Fast_A"
CTRL+3 no-osd change-list glsl-shaders clr ""; apply-profile "Anime4K_Fast_B_B"; show-text "Profile: Anime4K_Fast_B_B"
CTRL+4 no-osd change-list glsl-shaders clr ""; apply-profile "Anime4K_Fast_B"; show-text "Profile: Anime4K_Fast_B"
CTRL+5 no-osd change-list glsl-shaders clr ""; apply-profile "Anime4K_Fast_C_A"; show-text "Profile: Anime4K_Fast_C_A"
CTRL+6 no-osd change-list glsl-shaders clr ""; apply-profile "Anime4K_Fast_C"; show-text "Profile: Anime4K_Fast_C"
bloc97 commented 2 years ago

That's strange, mpv should parse the strings correctly if using the linux version of the instructions (that means replacing the characters ; inside the quotes with :)

Though this way is also equivalent and more clean, and should work on Windows, macOS and Linux, but requires the user to edit two files instead of just one. I think we can change the instructions for this in the next release, thanks for the suggestions.

card0z commented 1 year ago

Are the shaders going to be optimised for apple silicon anytime soon? Or does that depend on the video player? The fast preset works fine when I use it standalone but there are a lot of frame drops when I use it with SVP.

bloc97 commented 1 year ago

Are the shaders going to be optimised for apple silicon anytime soon? Or does that depend on the video player? The fast preset works fine when I use it standalone but there are a lot of frame drops when I use it with SVP.

I don't think it is possible to optimize shaders specifically for any hardware as OpenGL handles all the abstractions and is not very flexible. If the video player can support loading arbitrary external libraries we can move forward to writing optimized code for specialized ML inference processors such as the Apple Neural Engine.

Edit: Using SVP can double, triple or quadruple the framerate of a video, which will make the shaders 2x, 3x and 4x, slower respectively if used after SVP. I'm not sure if reversing the order of shader/SVP would improve performance (eg. apply shaders then SVP vs applying SVP then shaders), but it might be worth a try if it is possible.

hvmzx commented 1 year ago

Did you find a way to make these shaders work with Apple Silicon in an optimised way that fully uses Metal ?