Catch missing CJK glyphs, broken tokens, and audio clicks before Steam players do.
Your development machine silently borrows system fonts that never travel inside your build. TofuCheck diffs your .csv, .po, and .json strings against bundled .ttf font tables and repairs .wav loop boundaries in 3.8 seconds.
npx tofucheck CLI and GitHub Action
Replaces $600/yr enterprise LQA seats
100% client side binary parser · Or · get sample .zip
localization/ui_menus.csv
1,480 keysLocales: en, zh_Hans, ja, ko, de, ru, pt_BR
fonts/PixelOperator_UI.ttf
cmap format 41,010 glyphs mapped · Fallback: NotoSansCJK_Subset.otf
3 release blockers detected across 7 locales
43 unique codepoints missing from bundled font chain · 2 broken placeholder tokens
38 Han ideographs and arrow U+2192 (→) are absent from PixelOperator_UI.ttf and fallback chain.
Source string requires {player_name} and [color=#ffd700]. LLM translation translated variable key to {spieler_name} and dropped closing [/color].
Loop boundary jumps from amplitude +0.418 to -0.092 with no smpl chunk header, causing an audible pop every 30.0s.
7,266
Playable demos in October 2026 Steam Next Fest competing for wishlists
28.4%
Next Fest AI disclosures citing translation and localization (+12.8 pts in 2026)
1,010
Total codepoints in Godot default UI font (zero CJK, Arabic, or arrow glyphs)
3.8s
Median local audit time for 14,620 strings, 6 fonts, and 48 WAV stems
Why local playtesting misses it
Your development machine is the single worst place to test whether players can read your game.
When you test Simplified Chinese, Japanese, Korean, Russian, or even a simple Continue → Next arrow on your workstation, your engine quietly borrows fallback fonts from your operating system. None of those system fonts travel inside your exported Steam .pck or Unity build.
Silent OS font borrowing
Godot and Unity shape 你好 using /usr/share/fonts or Windows system fallbacks during editor playtests. Nothing prints to the console, and get_string_size() returns a normal width.
AI translation token corruption
Batch translating a 4,000 row CSV with DeepL or an LLM routinely mangles {0}, %d, [wave], or <sprite=2> tags, or expands German and Russian strings 42% past fixed UI container widths.
Unmarked WAV loop boundaries
Exported ambient stems and DAW loops frequently lack embedded smpl chunk metadata or end on a non zero sample crossing, creating an immersion breaking click every time the loop wraps.
The pre launch verification standard
One missing glyph turns six months of worldbuilding into a day one Mixed review on Steam. Verify every character, token, and audio loop in four seconds flat.
Deterministic binary inspection
Built to fix the file, not just flag the row.
Every check runs offline in your browser or inside your GitHub Actions runner and outputs patched assets ready to drop straight back into your project repo.
Exact Unicode coverage diff across your fallback chain
Drop in your primary UI font plus your CJK or Cyrillic fallback .ttf/.otf files alongside your localization table. TofuCheck parses binary cmap format 4 and format 12 subtables, flags every unrenderable codepoint by locale and translation key, and exports the exact deduplicated character set for Unity TextMeshPro Font Asset Creator or Godot 4 dynamic font preloading.
Zero broken variables or unclosed BBCode tags
Validates strict parity for C# {0} and named {item_count} tokens, printf %s/%d specifiers, Godot [color]/[img] BBCode stacks, and Unity RichText tags across every translated cell.
Pixel width overflow alerts before layout clipping
Instead of guessing character counts, TofuCheck measures actual glyph advance widths (hmtx table) in your target font and flags German, Russian, or French strings that exceed your button or dialogue box width budget by more than 1.35x.
Automatic zero crossing smoothing and RIFF smpl chunk injection
Batch scan your entire audio/sfx and audio/music directories. TofuCheck identifies loop start and end sample discontinuities, applies a micro cosine crossfade window at the boundary, and writes standard binary smpl loop markers recognized by Unity, Godot, and FMOD.
16 / 24 / 32 bit
Uncompressed PCM
< 1.5 ms window
Zero pitch shift
Batch ZIP export
Direct replacement
Simple, indie friendly licensing
Pay once. Run on every game you ship.
Enterprise localization suites charge $600 to $3,000 a year and still cannot read a binary .ttf font table or repair a .wav loop click. Own TofuCheck outright for the price of two indie games.
Browser Diagnostic
Free foreverInstant sanity check for game jams and vertical slice demos.
- Audit up to 250 strings and 2 locales per run
-
Inspect 1 primary
.ttfor.otffont file -
Single
.wavloop discontinuity visualizer - 100% local browser execution
Quick Fix Pass
Single projectEmergency auto-repair export & offline HTML app for 1 game build.
-
Auto-repaired
.wavdownload withsmplchunk & zero-crossing micro-fade -
TMP & Godot missing codepoint
.txtexport -
Repaired
.csv/.po/.json& Steam BBCode export - Standalone offline HTML app (no CLI or CI hooks)
Studio Pass
Lifetime + CLIUnlimited projects, batch WAV/font exports, and offline Node CLI.
- Everything in Quick Fix for unlimited games & locales
-
Offline Node CLI (
npx tofucheck) for local build scripts - Batch folder scanner for multi-font fallback chains
- Includes all 2.x updates for Unity 6, Godot 4 & UE5
Team & CI/CD Pack
Up to 10 seatsAutomated pull request gates for indie studios and publishers.
- Everything in Studio Pass for up to 10 studio seats
- Turnkey GitHub Action & GitLab CI workflow with SARIF output
-
Unity
IPreprocessBuildWithReport& GodotEditorExportPlugin - HTML & Markdown LQA approval report generator
Engine-Specific Diagnostic & Repair Guides
Fix Unity TextMeshPro Missing CJK / Polish / Cyrillic Characters (Square Tofu Boxes □)
The character with Unicode value \u5263 was not found in the [Font Asset] font asset or any potential fallbacks.
Fix Godot / Unity WAV Audio Loop Click & Pop at Seam + Inject RIFF smpl Loop Chunk
AudioStreamWAV loop mode Forward produces audible click/pop at loop wrap boundary; missing RIFF smpl chunk.
Inject RIFF smpl Loop Points into WAV Files for Unity, Godot & FMOD (Browser Binary Tool)
WAV file contains no smpl chunk; loop start/end points reset to 0 on engine re-import.
Steamworks Store Page BBCode Validator & Localization Placeholder ({0}, %s) Auto-Fixer
FormatException: Input string was not in a correct format (unclosed {0} or mismatched [list] BBCode tag).
Unity & Unreal Localization CSV Placeholder ({0}, %s, ) Mismatch Scanner & Auto-Fixer
System.FormatException: Index (zero based) must be greater than or equal to zero and less than the size of the argument list.
Unreal Engine 5 UMG Font Atlas Missing Glyph & Localization CSV Codepoint Scanner
LogSlate: Warning: FontCache: Missing glyph for character U+0142 (Latin Small Letter L With Stroke).
Frequently asked questions
Does TofuCheck upload our unreleased script or game assets to any server?
Never. Both the browser diagnostic and the Studio Pass run 100% locally on your machine using client side WebAssembly and our offline CLI. Your dialogue CSVs, proprietary fonts, and audio stems never leave your disk, making it safe for NDA publisher builds.
How is this different from enabling pseudolocalization in Godot or Unity?
Pseudolocalization only swaps ASCII characters for accented Latin characters (such as Ĥéłłô) to test English string expansion. As the official Godot documentation notes, pseudolocalization cannot verify whether your bundled font files contain the thousands of CJK, Cyrillic, Arabic, or symbol codepoints present in your actual translated CSV or PO files.
Which game engines and localization formats are supported out of the box?
TofuCheck supports standard UTF8 CSV and TSV tables (Godot CSV, Unity Localization package, I2 Localization), GNU Gettext .po files, and flat or nested .json localization dictionaries, paired with .ttf and .otf fonts and 16/24/32 bit PCM .wav audio files.