Rendered at 13:51:32 GMT+0000 (Coordinated Universal Time) with Cloudflare Workers.
TazeTSchnitzel 18 hours ago [-]
I think this is a rare “useful” abuse of font ligatures, and in that respect I think this is a cool project, but it's also a terrible idea that nobody should actually use, because Japanese kanji readings are famously ambiguous and context-dependent. The modal character has two different readings without counting those used in personal names, nor contextual slight changes to pronunciation. Some characters have six different readings, and that's again without counting those used in personal names. There's no way a font can do a good job at it unless you can somehow stuff an entire LLM in there.
For context, it's a hard enough problem that Google Translate's own romanised pronunciation guides are frequently wrong, or disagree with their text-to-speech.
michaelmior 17 hours ago [-]
> unless you can somehow stuff an entire LLM in there.
Yeah. I also notice that Google Translate's guess at pronunciation frequently has errors, and that IS a LLM.
Someone further downthread said it appears to have about 80% accuracy on a short sentence, which means if you're not already at a level of skill where you can verify, then it's going to teach you the wrong pronunciations constantly. When studying languages myself, I find that learning the wrong pronunciation for something is annoyingly sticky, and unlearning takes more effort than learning something correctly the first time.
TazeTSchnitzel 5 hours ago [-]
Oh yeah, there's a handful of words that I learned really early in Swedish that I always get the pronunciation of slightly wrong, even though I don't make that mistake in other words with the same patterns, because it's just so ingrained. And that's in a language with an alphabet!
motionlessveloc 14 hours ago [-]
I agree, and if anything the problem is even worse. You mentioned characters with 6 readings, here's one with more than 30:
And while you can usually figure out which reading applies based on what follows, there are still many cases where you can't. A standalone 今日 can be any of "konnichi", "kyou" or "konjitsu" depending on context and intent.
naniwaduni 10 hours ago [-]
To be clear, that list contains about 12 non-name readings, of which about 7 are productive.
freeone3000 9 hours ago [-]
that's six more than can be displayed at once, and without looking at the entire sentence context it's not possible to choose the correct one.
wodenokoto 15 hours ago [-]
> There's no way a font can do a good job at it unless you can somehow stuff an entire LLM in there.
I’d say you can do a pretty good job with conditional random fields.
GolDDranks 13 hours ago [-]
Pretty good job, meaning that you get 96% there (if I recall correctly the results for MeCab which uses CRF). But 4% of kanji words is still multiple wrong furigana per page.
Still, very cool demo!
12 hours ago [-]
Armecera 18 hours ago [-]
Yeah, I already see a few mistakes just looking at this page.
But I guess still useful?
cloudbonsai 14 hours ago [-]
Yeah. I experimented with a random Japanese news article. Scanning it with my eyeballs, I found:
So I guess the accuracy is roughly 80%. Maybe useful, but not super reliable.
silvertab 17 hours ago [-]
> but it's also a terrible idea that nobody should actually use, because Japanese kanji readings are famously ambiguous and context-dependent
Seems a bit drastic. Don't use it as the main font in a japanese textbook, sure, but use it with the disclaimer that it's not perfect and will get some readings wrong? Why not, still pretty useful. Should people also not use Google Translate? (also, you can stuff an entire llm in a font, it's been done).
Sophira 16 hours ago [-]
The point of furigana is to be exact - it's a pronunciation guide, and its purpose is to distinguish or to teach. If it's wrong, then nothing makes sense.
If I asked you 'are you a sewer (pronounced "soo-er")?', would that make sense? Maybe if you looked at it hard enough and thought about it, but in the meantime, I would probably get some very strange looks for asking.
astrobe_ 14 hours ago [-]
It's funny to see LLMs being mentioned, because this is yet another case where "good enough" is, after all, not good enough once you know how "good enough" should be.
zahlman 1 hours ago [-]
For that matter, furigana are commonly used to deliberately override ordinary readings. In some cases, it's more like kanji are used to explain the meaning of some katakana (especially, say, in-world jargon in a video game or LN) set as furigana above them. (Or some hidden or unusual connotation of a common word in hiragana.)
silvertab 12 hours ago [-]
As far as I know, all the automated options out there (wether it's Furiganator, the chrome extension, or Google Translate's pronunciation) are far from 100% accurate. I still find both to be very useful, I just don't rely on them to be the absolute truth; they still help me on a daily basis. The web page for this font mentioned it didn't show any furigana if it was ambiguous (I haven't verified),and someone else here mentioned it was ~80% accurate. I respectfully disagree with the fact that it's useless if not perfect; I've personally found all these tools useful, and have not learned a single "wrong reading" because of them because I don't use them as a tool to learn kanji readings to begin with.
Zarel 3 hours ago [-]
For language learning, I'd really recommend something like Yomitan here:
Yomitan only shows readings for words you explicitly hover over and press a modifier key, so it doesn't distract you, and when you do explicitly ask for a word, Yomitan will show all the readings and definitions.
I'd agree that 80% is better than nothing if you have no alternatives, but you do. I don't know about Furiganator, but Google Translate is also much better than 80%.
3 hours ago [-]
makeitdouble 12 hours ago [-]
> Why not, still pretty useful
Stumbling on names is fine, name litteraly have no logic, there is no system that will get them 100% correct by definition.
Screwing meaning is on a whole different level and Google Translate or even the built in screen reader of your OS will do an extremely good job given enough context (a whole phrase).
In real world use there is little space for sloppy hacks IMHO.
silvertab 12 hours ago [-]
> Google Translate or even the built in screen reader of your OS will do an extremely good job given enough context
Google translate does not - I see it get readings wrong on very basic sentences with plenty of context on a daily basis. It doesn't make it useless. The website mentioned the font wouldn't show furigana if the reading was ambiguous so I was basing my judgement on that, obviously if it's just always wrong, that's not useful.
wk_end 16 hours ago [-]
You're underestimating how wrong this is going to be on average. This is going to be nonsense like half the time. It's not comparable to Google Translate, it's more comparable to Babel Fish circa 1997.
shun_dev 1 days ago [-]
Really nice font! Native Japanese speaker here, and seeing furigana done purely in the font is very cool.
One small thing on the Japanese version of the page: in the "Ligatures do the work" section, 合字 itself only gets じ over 字, and 合 has no reading. It should be ごうじ. I guess 合字 isn't in the dictionary, so it falls back to single kanji, and 合 is skipped because it has several readings.
teshigahara 19 hours ago [-]
Automatic furigana is not really possible to be reliable considering readings heavily rely on context that can't be easily inferred, but I'm sure it will help some people who can't read very well.
krackers 19 hours ago [-]
You can run LLMs inside the shaping engine, so maybe you can use more advanced segmenting and transliteration algorithms? https://fuglede.github.io/llama.ttf/
IsTom 17 hours ago [-]
It can depend on implied information, e.g. 方 can be hou or kata depending on if you're talking about about direction or a person. And that information can be before it, after it, on some image next to it, etc.
11 hours ago [-]
numpad0 8 hours ago [-]
There aren't good datasets for that. Even neural TTS for Japanese struggles with it since Japanese transcriptions used to train models don't preserve pronunciations used.
(or maybe it could be theoretically done, just the mechanism to automatically classify wildly different pronunciations mapped to the same literal expressions don't yet exist)
krackers 6 hours ago [-]
That's surprising. I'd have thought that a multimodal LLM like openai's would "just work", at the very least enough to generate enough data to distill down to a simpler model.
numpad0 46 minutes ago [-]
Yeah. Either there's just not enough annotated text in existence, or frontier LLMs aren't trained with enough such text.
I think the latter is a possibility too; the Japanese language share little from syntax to vocabulary to memes with other languages, including Chinese(Japanese is NOT a dialect of Chinese; arguably it was SUPPOSED TO in the ancient times, but Japan was simply unable to achieve that status), despite sharing Unicode codepoint ranges with the Chinese language due to Han Unification. So there might be some chance that Japanese part of the dataset is inconsistent and contradictory to other parts, in some ways such that, it would make sense to include just the bare minimum to achieve best use of resources available at this point. Chinese models seem to do this, and dataset fractions of Japanese content is always tiny. Some of Chinese image models even straight up un-support Japanese.
As to what teshigahara said in the sibling comment - I think that shows the readings are arbitrary rather than being simply complicated and hard to infer for beginners. It must be that the Japanese written-spoken convergence movement began in the early modern times never reached its goals, beyond the written language having its own tone like in many languages, and so the verbal Japanese expressed in Japanese writings is simply not complete.
teshigahara 4 hours ago [-]
Even professional native voice actors get a reading wrong in audiobooks sometimes so it's not surprising to me that LLMs are not quite reliable enough either at this point
17 hours ago [-]
cubefox 18 hours ago [-]
"Your scientists were so preoccupied with whether or not they could, that they didn't stop to think if they should."
epitrochoid413 10 hours ago [-]
[dead]
omoikane 7 hours ago [-]
I like how for この先生きのこるには, it has この先生(せんせい) as opposed この先(さき)生(い)きのこる. Maybe it's learning from memes.
This is very cool. Unfortunate that it gives the wrong pronunciation when words get split in a line wrap (e.g., 大学 got split between lines and changed to incorrect furigana for me).
randyrand 12 minutes ago [-]
01, 02, 03, 04
never even gets to 10!
alasano 20 hours ago [-]
This is really nice. I'm able to read Hiragana and Katakana fully after about 4-6 weeks now but then I'm hit with the reality of how many Kanji I have to learn still everytime I want to read something in real life lol
jbm 21 hours ago [-]
This is an interesting use of ligatures for sure. However, I really don't know when one would use it. Couldn't you just use Ruby tags for a website?
yorwba 20 hours ago [-]
When you control the content, I agree that ruby tags would be better, since they can easily handle alternative readings and also enable smarter automation to infer the correct reading from context.
But you could set this as the default system font for Japanese and enjoy furigana everywhere, even in places that don't support ruby tags at all.
makeitdouble 10 hours ago [-]
Client side, using a browser extension or accessibility features to overlay the ruby could be a lot easier and probably more efficient.
That way choosing a powerful and more accurate engine, or more adapted display of the characters also becomes an option.
wahnfrieden 13 hours ago [-]
You shouldn’t because this is wrong a huge percent of the time, like 20-50%. It’s an interesting trick but please don’t use it as a learner. Even the demo has mistakes.
numpad0 18 hours ago [-]
Maybe this is less dependent on rendering engine or easier to use. Or maybe because it could be done and was done.
From practicality standpoint, this would not work on unprepared texts, as pronunciation of Japanese words are a bit arbitrary and so correct pronunciations would need to be manually selected for each words.
i.e. "maize" could be read "corn". I believe LLMs don't necessarily have good intuition for that, being trained on plain texts.
As to how could such a situation could ever manifest: I would blame the fact that the official language of historical Japanese governments having been a really creative interpretation of medieval Chinese[1] sprinkled with labels and jumps and supplements[2][3], resulting in people just accepting wild divergence between literal and spoken Japanese. I'm not a linguist or a language major so I'd happy if anyone could further elaborate...
Why do something manually when it can be done automatically?
mminer237 19 hours ago [-]
So you can know it's correct and fix mistakes?
bryanrasmussen 2 hours ago [-]
given that you are now officially required to show furigana on names in family registers there seems to be a small but consistent market for something like this
Surprised that most of the furigana on the landing page are accurate. A few basic errors did stand out, though: 行われる (furifont: i-wareru, actual: okona-wareru) and 行に (furifont: i-ni, actual: gyo-ni). The font would work better if it took okurigana into account.
roughly 20 hours ago [-]
That’s incredible. I’m always impressed with the utility of the TrueType/open font spec - the flexibility there is really an underappreciated work of engineering genius.
andreareina 18 hours ago [-]
Arguably one of those cases where the capability is awesome, but using the capability is wat.
I mean, fonts are Turing-complete [0], so it isn’t surprising that this is possible. Turing-completeness is often by accident rather than by genius [1].
Which makes sense, because human language is apparently Turing complete, so anything intended to represent it faithfully would wind up with that characteristic, too.
layer8 19 hours ago [-]
Human language isn’t a formal language, so this is a category error.
In the present context, an example is that the common reading of a Kanji word isn’t always well-defined, and neither is the decomposition of a sequence of Kanji characters into words.
It's an interesting move to point me to a rigorously written English language definition of a formal language to make the argument that humans don't co-opt our natural languages as formal languages when the need arises.
layer8 17 hours ago [-]
That’s not what “formal language” means. English being used to describe a formal definition doesn’t make it a formal language.
roughly 17 hours ago [-]
I didn’t say it was a formal language, I said humans co-opt it as one.
anonymous908213 19 hours ago [-]
Bitmap fonts aren't turing complete. The fact that TrueType is built with an arbitrary virtual machine is insane, makes implementations ridiculously complex, and is a huge security liability. The purpose of the VM wasn't to "represent human language faithfully" but to make fonts look a little better when displayed at a variety of resolutions, via hinting. Hinting doesn't necessarily require a full VM, but somebody let the engineers have a little too much fun.
Dylan16807 9 hours ago [-]
Little VMs are really easy to sandbox if you don't need a billion instructions per second, and compared to complicated math thresholds it's easier and simpler for a VM to implement everything you need.
roughly 17 hours ago [-]
And yet, actually mapping all written human languages and their ligatures, variations, etc, seems to require this level of complexity. So the choice is either you draw the line and decide which languages you consider legitimate or not, or you build a machine of sufficient complexity to capture all languages, and the tradeoff, I suppose, is how much knowledge you want to actually be able to capture in your computerized system.
anonymous908213 17 hours ago [-]
Unicode is distinct from, and completely unrelated to, TrueType. Unicode does not require a virtual machine to interpret. You can simply express languages and their variations with Unicode + bitmap fonts.
roughly 17 hours ago [-]
Unless you want ligatures.
anonymous908213 17 hours ago [-]
Do you really believe the only way to implement ligatures is with a virtual machine? Dumb and dirty psuedocode written in 5 seconds of thinking about it but come on, this is not that complicated.
for each character in text
characterToPrint = Parse(character)
if character is LigatureStartCandidate
characterToPrint = LookAheadForNextLigatureCandidateAndResolve(character)
Print(characterToPrint)
roughly 17 hours ago [-]
And you've now gotten 92% of the way there. Iterate a few dozen more times to get up to 97%, 98%, 99%, etc., and eventually you'll have rewritten OpenType.
anonymous908213 17 hours ago [-]
Would you like to elaborate on those few dozen more cases rather than handwaving them away? Embedding a VM into a font format is foundationally a ridiculous idea and should require real justification, although I know our industry is in love with anything that allows arbitrary code execution exploits.
fhars 3 hours ago [-]
That algorithm fails for languages as exotic as English with its three character ligatures like ffl that are used in truffle, but not in cufflink.
I went to research your examples with Google, and interestingly enough, it now thinks that it's a "classic textbook example" while citing one source — this comment of yours (20 min old at the time):
> In typography, ligatures should be used in "truffle" but should not be used in "cufflink."
> This specific pair of words is a classic textbook example used by typographers and software developers to demonstrate the limitations of basic, automated font-rendering rules.
What a world to live in.
On the same point of yours, bad two-letter ligatures also exist: surfing (fi), selfless (fl), halftime (ft), etc. "Swordfish" is fine but "dwarfish" is not.
roughly 12 hours ago [-]
I could, or you could open your mind to the idea that the reason opentype wound up being as complex as it is is because the problem space you’re trying to solve is more complicated than you think it is. There is a working reference implementation which does the thing you think can be done more cheaply, you’re just throwing popcorn from the cheap seats here.
FigurativeVoid 10 hours ago [-]
Perhaps the least important part, but I never considered what serif and sans serif would look like in kanji.
notorandit 21 hours ago [-]
> With the ligatures to adopt to pronunciation of words.
Maybe it is:
With the ligatures to adApt to pronunciation of words.
It also supports line breaking, so that words don't get cut in half when wrapping text.
newman314 14 hours ago [-]
Looks like it does have a toggle for Romanji further down.
ramon156 20 hours ago [-]
> javascript is required ... due to browser limitations
confusing when you don't explain which limktations this is
croisillon 18 hours ago [-]
nice, we could do a lithuanian stress font this way too
maratc 2 hours ago [-]
Not sure if your comment is sarcastic or not, but I've heard that the best way to start a bar fight in Lithuania is to loudly ask several people a question about stress.
ekianjo 11 hours ago [-]
> 大人気 can be read だいにんき or おとなげ, so Furifont shows no furigana
frequency wise it should be dai-ninki for sure
zerozerotwo 19 hours ago [-]
This could be really useful as a decoding tool when you don’t know the kanji
igor_nast 19 hours ago [-]
This is cool!
paulsutter 17 hours ago [-]
I want furigana on display glasses, like Even Realities. Since the application would know my vocabulary, it can show just the words that I'm not likely to know.
Assuming you could hint the furigana from the application, the phonetic transcript would make it more accurate.
popalchemist 18 hours ago [-]
[dead]
luke-fugu 18 hours ago [-]
This is AWESOME for Japanese learners. There are 46 basic hiragana that represent the sounds of Japanese but many thousands of Kanji, and it’s incredibly hard to read Japanese even if you’ve been studying for years.
A few people here rightly pointing out inaccuracies and other methods of display (ie Ruby tags) but IMO they are somewhat missing the usefulness here - there are many applications (ie e-readers, random web contexts, custom apps etc) where the traditional methods of display are hard or fail. I recently ran into it trying to get custom Japanese ebooks to display furigana with ruby tags on my kindle. It’s a giant nightmare.
Excited to try this out.
chocochunks 14 hours ago [-]
Furigana works on Kindle, although IIRC you have to use AZW3 or I guess KFX.
For context, it's a hard enough problem that Google Translate's own romanised pronunciation guides are frequently wrong, or disagree with their text-to-speech.
Well, it wouldn't be the first time ;)
https://fuglede.github.io/llama.ttf/
Someone further downthread said it appears to have about 80% accuracy on a short sentence, which means if you're not already at a level of skill where you can verify, then it's going to teach you the wrong pronunciations constantly. When studying languages myself, I find that learning the wrong pronunciation for something is annoyingly sticky, and unlearning takes more effort than learning something correctly the first time.
https://en.wiktionary.org/wiki/%E7%94%9F
And while you can usually figure out which reading applies based on what follows, there are still many cases where you can't. A standalone 今日 can be any of "konnichi", "kyou" or "konjitsu" depending on context and intent.
I’d say you can do a pretty good job with conditional random fields.
Still, very cool demo!
Seems a bit drastic. Don't use it as the main font in a japanese textbook, sure, but use it with the disclaimer that it's not perfect and will get some readings wrong? Why not, still pretty useful. Should people also not use Google Translate? (also, you can stuff an entire llm in a font, it's been done).
If I asked you 'are you a sewer (pronounced "soo-er")?', would that make sense? Maybe if you looked at it hard enough and thought about it, but in the meantime, I would probably get some very strange looks for asking.
https://yomitan.wiki/
Yomitan only shows readings for words you explicitly hover over and press a modifier key, so it doesn't distract you, and when you do explicitly ask for a word, Yomitan will show all the readings and definitions.
I'd agree that 80% is better than nothing if you have no alternatives, but you do. I don't know about Furiganator, but Google Translate is also much better than 80%.
Stumbling on names is fine, name litteraly have no logic, there is no system that will get them 100% correct by definition.
Screwing meaning is on a whole different level and Google Translate or even the built in screen reader of your OS will do an extremely good job given enough context (a whole phrase).
In real world use there is little space for sloppy hacks IMHO.
Google translate does not - I see it get readings wrong on very basic sentences with plenty of context on a daily basis. It doesn't make it useless. The website mentioned the font wouldn't show furigana if the reading was ambiguous so I was basing my judgement on that, obviously if it's just always wrong, that's not useful.
One small thing on the Japanese version of the page: in the "Ligatures do the work" section, 合字 itself only gets じ over 字, and 合 has no reading. It should be ごうじ. I guess 合字 isn't in the dictionary, so it falls back to single kanji, and 合 is skipped because it has several readings.
(or maybe it could be theoretically done, just the mechanism to automatically classify wildly different pronunciations mapped to the same literal expressions don't yet exist)
I think the latter is a possibility too; the Japanese language share little from syntax to vocabulary to memes with other languages, including Chinese(Japanese is NOT a dialect of Chinese; arguably it was SUPPOSED TO in the ancient times, but Japan was simply unable to achieve that status), despite sharing Unicode codepoint ranges with the Chinese language due to Han Unification. So there might be some chance that Japanese part of the dataset is inconsistent and contradictory to other parts, in some ways such that, it would make sense to include just the bare minimum to achieve best use of resources available at this point. Chinese models seem to do this, and dataset fractions of Japanese content is always tiny. Some of Chinese image models even straight up un-support Japanese.
As to what teshigahara said in the sibling comment - I think that shows the readings are arbitrary rather than being simply complicated and hard to infer for beginners. It must be that the Japanese written-spoken convergence movement began in the early modern times never reached its goals, beyond the written language having its own tone like in many languages, and so the verbal Japanese expressed in Japanese writings is simply not complete.
https://dic.pixiv.net/a/%E3%81%93%E3%81%AE%E5%85%88%E7%94%9F...
never even gets to 10!
But you could set this as the default system font for Japanese and enjoy furigana everywhere, even in places that don't support ruby tags at all.
That way choosing a powerful and more accurate engine, or more adapted display of the characters also becomes an option.
From practicality standpoint, this would not work on unprepared texts, as pronunciation of Japanese words are a bit arbitrary and so correct pronunciations would need to be manually selected for each words.
i.e. "maize" could be read "corn". I believe LLMs don't necessarily have good intuition for that, being trained on plain texts.
As to how could such a situation could ever manifest: I would blame the fact that the official language of historical Japanese governments having been a really creative interpretation of medieval Chinese[1] sprinkled with labels and jumps and supplements[2][3], resulting in people just accepting wild divergence between literal and spoken Japanese. I'm not a linguist or a language major so I'd happy if anyone could further elaborate...
1: https://en.wikipedia.org/wiki/Kanbun
2: https://youtu.be/_k0I6bi2pYs?t=248
3: https://d1ysbfo9sxjda0.cloudfront.net/wp-content/uploads/201...
https://www.japantimes.co.jp/life/2025/06/06/language/furiga...
https://www.destroyallsoftware.com/talks/wat
[0] https://litherum.blogspot.com/2019/03/addition-font.html
[1] https://en.wikipedia.org/wiki/Turing_completeness#Unintentio...
In the present context, an example is that the common reading of a Kanji word isn’t always well-defined, and neither is the decomposition of a sequence of Kanji characters into words.
The real challenge is Arabic, though, see https://fontspec.org/opentype-shaping/opentype-shaping-arabi...
> In typography, ligatures should be used in "truffle" but should not be used in "cufflink."
> This specific pair of words is a classic textbook example used by typographers and software developers to demonstrate the limitations of basic, automated font-rendering rules.
What a world to live in.
On the same point of yours, bad two-letter ligatures also exist: surfing (fi), selfless (fl), halftime (ft), etc. "Swordfish" is fine but "dwarfish" is not.
Maybe it is:
With the ligatures to adApt to pronunciation of words.
https://pingtype.github.io/japanese.html
It also supports line breaking, so that words don't get cut in half when wrapping text.
confusing when you don't explain which limktations this is
frequency wise it should be dai-ninki for sure
Assuming you could hint the furigana from the application, the phonetic transcript would make it more accurate.
A few people here rightly pointing out inaccuracies and other methods of display (ie Ruby tags) but IMO they are somewhat missing the usefulness here - there are many applications (ie e-readers, random web contexts, custom apps etc) where the traditional methods of display are hard or fail. I recently ran into it trying to get custom Japanese ebooks to display furigana with ruby tags on my kindle. It’s a giant nightmare. Excited to try this out.