jellyfin / jellyfin-roku

The Official Roku Client for Jellyfin
https://jellyfin.org
GNU General Public License v2.0
419 stars 128 forks source link

[Help]Tutorial to Add CJK Font to the Roku FileSytem #514

Open Lorde627 opened 2 years ago

Lorde627 commented 2 years ago

Hey Guys,It's so frustrated that Roku Don't Supprt CJK font.We have report this issuie to Roku Comminity mutiple times,but they don't care ar all, and they limited the Channel size to 4mb. So there's no way to add any CJK font to the Channel,there're all to big. Don't know how Netflix,Disney+ did it tho.They Support CJK font,Chinese Japanese Korean more.

Few days Ago,I tried to search on the internet and found out @neilsb metion a way to add CKJ font and sucessfully displayed Japanese Subtiles.

Snipaste_2022-01-04_17-43-47.png

There's a lot of us using the TCL Roku TV that we can plug a USB Device,I'm wondering if u can tech us how to add CJK Font to the Roku FireSystem.I try to read the devolper docs but It was to hard for me to know what to start. if u can teach us that will means a lot to us non-roman language users.

Edit: See issue #285 for additional original screenshot, etc

neilsb commented 2 years ago

Some channels get special treatment from Roku and have access to other system APIs and I would image get larger package size allowances etc. I know Netflix is certainly one, and I imagine Disney would get the same treatment. So they may well be able to include font files in place.

We can only read from USB drives, so the font file(s) would have to be placed there manually, but in theory your suggestion would work. We could choose a fixed name such as /jellyfin/font.otf (or provide a way of configurating it when we get client side settings in place) and on start up the app could check all attached USB devices for the font and use it if it exists.

I don't have any Roku devices with USB capabilities though, so I'd need some help with testing, but it should be relatively straightforward.

I don't think you can define an external font as the "default" font, so will need to specifically set each bit of text that should use the font manually - so that will be a fair bit of the testing feedback too if you're up for it.

Lorde627 commented 2 years ago

Some channels get special treatment from Roku and have access to other system APIs and I would image get larger package size allowances etc. I know Netflix is certainly one, and I imagine Disney would get the same treatment. So they may well be able to include font files in place.

We can only read from USB drives, so the font file(s) would have to be placed there manually, but in theory your suggestion would work. We could choose a fixed name such as /jellyfin/font.otf (or provide a way of configurating it when we get client side settings in place) and on start up the app could check all attached USB devices for the font and use it if it exists.

I don't have any Roku devices with USB capabilities though, so I'd need some help with testing, but it should be relatively straightforward.

I don't think you can define an external font as the "default" font, so will need to specifically set each bit of text that should use the font manually - so that will be a fair bit of the testing feedback too if you're up for it.

I Would LOVE to HELP! I can't find the way to contact u,you can contact me via Telegram or other plaftroms. My Telegram username: Archie6277

TwitchBronBron commented 2 years ago

Roku supports the concept of a "component library", which is an external package not hosted by the Roku store. These don't go through any type of review process either. So we could update the jellyfin servers to serve component libraries that contain these giant fonts, which are only downloaded on-demand as needed by the content.

https://developer.roku.com/docs/references/scenegraph/control-nodes/componentlibrary.md

neilsb commented 2 years ago

Roku supports the concept of a "component library", which is an external package not hosted by the Roku store. These don't go

Where are these component libraries stored on the Roku device? Are they at risk of being purged if space is required and re-downloaded again? For large files such as the fonts, I would be wary if this were the case and then there is the potential that on every application start up this library would be downloaded resulting in a delay in the app opening.

A secondary consideration with Jellyfin is that (by design) there is no "central" server that we have that could host this. It would likely be up to the individual to host this file and then enter the URL in client side settings of where to retrieve it from. While that's certainly do-able, the requirement for non-signed packages to loaded over https would add some complication for end users.

Edit: Just realised you said to update the server to serve this, which would certainly make things simpler for the users. Would need to run that by the server team :)

Lorde627 commented 2 years ago

Snipaste_2022-01-04_21-54-54.png There's a question I was wondering the 4mb size limit is for the store release require,or packing require? I opened the Roku Development Mode,it seems can Upload the Channal without the store, break the size limit. so what if we add fonts to the custom Channel,will it work?

xiNeRoar commented 2 years ago

I do find plex can show Chinese srt subtitle on my Roku tv. but all the movie titles and descriptions turn into square boxes instead. Don't know if this helps.

Lorde627 commented 2 years ago

I do find plex can show Chinese srt subtitle on my Roku tv. but all the movie titles and descriptions turn into square boxes instead. Don't know if this helps.

It is the "subtitle buring“ features on plex. It needs your Nas to transcode the media and burn the subtitle in.But when u use the method the video quality is worse then the original,especially f u wanna using it to watch HDR conetent.Horrible experiance. because it can't using the TV's config. and It's using your nas' CPU or GPU to decode, if your nas' performance isn't that good, well,It's goona be bad.

kamanwu commented 2 years ago

Any update on this? I think either read fixed file name on USB, or download font from Jellyfin server works.

xiNeRoar commented 2 years ago

Would like to know any update on this too...longing for this function for a long long time

rajaguru17 commented 1 year ago

Let me share what I tried and currently using in my app. In Roku, there is no way to use server url as a uri for font. So we need to download the font file using urlTransfer and save that file to "tmp" folder. Once you saved to "tmp", use the tmp path as your uri path and use it across the app. It works fine for me.

Lorde627 commented 1 year ago

Let me share what I tried and currently using in my app.

In Roku, there is no way to use server url as a uri for font. So we need to download the font file using urlTransfer and save that file to "tmp" folder. Once you saved to "tmp", use the tmp path as your uri path and use it across the app. It works fine for me.

Hi! It will be much appreciated if you can give us a tutorial for this!

kamanwu commented 1 year ago

Look like not lots of people use Roku client need CJK font. I created a feature request at: https://features.jellyfin.org/posts/1734/roku-tv-support-cjk-font

Lorde627 commented 1 year ago

guys, any updates?

1hitsong commented 1 year ago

What's the use case for the CJK font? Is it to display content such as titles, overviews, etc, or would it be used for subtitles?

xiNeRoar commented 1 year ago

What's the use case for the CJK font? Is it to display content such as titles, overviews, etc, or would it be used for subtitles?

Everything you mentioned

1hitsong commented 1 year ago

Everything you mentioned

Yikes. Using CJK fonts for content display seems fairly straight forward. Using it for subtitles is not. Roku doesn't support custom fonts for subtitle display, so this would require us to write a custom subtitle component 👀

jkim2492 commented 1 year ago

I've drafted a subtitle rendering scheme that can use custom fonts. Changing the content display fonts just amounts to replacing the instances of *SystemFont with your custom font. If you want, you can drop 2 fonts named "noto.otf" and "notoB.otf" (for bold) in "pkg:/fonts" and run the following python script replaceFont.zip

kamanwu commented 1 year ago

Everything you mentioned

Yikes. Using CJK fonts for content display seems fairly straight forward. Using it for subtitles is not. Roku doesn't support custom fonts for subtitle display, so this would require us to write a custom subtitle component 👀

Could we fix the CJK fonts for content display first?

1hitsong commented 1 year ago

@kamanwu Jinho Kim has already started work on replacing the built in Roku subtitle system: https://github.com/jellyfin/jellyfin-roku/pull/982

depctg commented 1 year ago

@1hitsong @kamanwu I open a new PR for extending fallback to content display: #1076

Some screenshots:

dev dev (1)

kamanwu commented 1 year ago

What's the current status of CJK font support? Just try the latest release v1.6.4. Looks like both subtitle and content (title/description) are still not support CJK font yet.

cewert commented 1 year ago

@kamanwu "Phase 1 CJK subtitle support - external files only by jkim2492" was added in #982

1hitsong commented 1 year ago

Instructions to get it setup: https://www.reddit.com/r/jellyfin/comments/12crra5/jellyfin_for_roku_164_released/jf2tc9a/

kamanwu commented 1 year ago

I did a try, but still NOT working, NOT sure which step is missing. Here is what I do:

1, enable fallback fonts on server 2, set "fallback font folder path" to /var/lib/jellyfin/fonts 3, download fonts from google font, I use Noto Sans Simplified Chinese (https://fonts.google.com/noto/specimen/Noto+Sans+SC?subset=chinese-simplified&noto.script=Hans). There are 7 *.otf files, I just put one file: "NotoSansSC-Regular.otf" (8M) in above folder. 4, enable Custom Subtitles on Roku client.

I tried an external *.ass subtitle. Still see empty square on subtitle. But the "directly play" change to "transcoding", and reason is: subtitle not supported.

Question: 1, can I use *.otf format?
2, do I need put all 7 fonts files? (eg: NotoSansSC-Bold.otf, ....) 3, does the file name matter?

Thanks.

Update: I tried one woff2 font file as well. Still see empty square on subtitle.

gmm39 commented 9 months ago

Any update on this? I've also followed the piecemeal instructions for getting this working to no avail.

  1. Fallback fonts are enabled on the server
  2. A Japanese is present in the fonts folder (NotoSansJP-Regular; tried both a ttf and woff2 version)
  3. Custom Subtitles (?) is enabled on the roku device

I personally only want it for displaying Japanese in menus as a large portion of my video game & anime soundtracks are tagged in Japanese.

Also tried with latest build-dev #894

1hitsong commented 9 months ago

Currently, CJK fonts only work for subtitles.

  1. Download CJK font and put in a folder accessible to server
  2. Enable fallback fonts on server and point to folder with CJK font
  3. Add srt file that uses CJK characters to your media library and name using subtitle documentation
  4. Enable custom subtitles on Roku
  5. Play video and select CJK subtitle track