Next Fest 2026 release 28.4% of Steam Next Fest demos now use AI assisted localization. Catch missing font glyphs and broken variables before launch day.
Early studio license: $29 once, zero subscriptions
□✓
TofuCheck by SpecFix
100% local WebAssembly and CLI verification for Unity, Godot, and Unreal

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.

Zero cloud uploads: assets stay on your disk Includes npx tofucheck CLI and GitHub Action Replaces $600/yr enterprise LQA seats
tofucheck audit · build_v0.9.4_nextfest
Load test fixture:
Inspected build inputs Local WASM engine ready
Drop your own .ttf, .otf, .csv, .po, .json, or .wav files here

100% client side binary parser · Or · get sample .zip

localization/ui_menus.csv

1,480 keys

Locales: en, zh_Hans, ja, ko, de, ru, pt_BR

fonts/PixelOperator_UI.ttf

cmap format 4

1,010 glyphs mapped · Fallback: NotoSansCJK_Subset.otf

What happens on a player Steam Deck without TofuCheck:
// Dev PC (borrows OS wqy-zenhei.ttc):
"开始游戏 → 继续冒险 (Lv. 12)"
// Player PC / Steam Deck (missing in .pck):
"□□□□ □ □□□□ (Lv. 12)" ← 7 hex boxes!
Scan time: 142 ms

3 release blockers detected across 7 locales

43 unique codepoints missing from bundled font chain · 2 broken placeholder tokens

CI exit code 1
MISSING_FONT_GLYPH · zh_Hans & ja Row 412 · KEY_MENU_CONTINUE

38 Han ideographs and arrow U+2192 (→) are absent from PixelOperator_UI.ttf and fallback chain.

Missing: U+2192, U+5F00, U+59CB, U+5192, U+9669 (+34 more) Auto fix: generated 1,842 char subset list
BROKEN_TOKEN_PARITY · de_DE & ru_RU Row 889 · NPC_BLACKSMITH_GREET

Source string requires {player_name} and [color=#ffd700]. LLM translation translated variable key to {spieler_name} and dropped closing [/color].

Impact: Runtime FormatException crash on dialogue open Auto fix: restored source token & closing tag
WAV_LOOP_DISCONTINUITY · audio/bgm_cavern.wav Sample 1,323,000 → 0

Loop boundary jumps from amplitude +0.418 to -0.092 with no smpl chunk header, causing an audible pop every 30.0s.

Delta: 0.510 FS step discontinuity Auto fix: 64 sample cosine zero crossing + smpl chunk

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.

font_rid=RID(0) valid=false → renders □□□ on clean Steam Deck

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.

"{GoldAmount} Gold" → "{Золото} золота" (KeyNotFoundException)

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.

Sample[N-1] = +0.39 → Sample[0] = -0.14 (audible pop)

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.

TrueType & OpenType cmap parser

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.

$ npx tofucheck ./locales/strings.csv --fonts ./fonts/*.ttf --out ./tmp_chars.txt
✓ Parsed 8,410 strings (9 locales) · 2,194 unique codepoints exported to tmp_chars.txt
Placeholder & markup linter

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.

en_US: "Deal {0} [b]Fire[/b] dmg" Valid
es_ES: "Hace {o} [b]Fuego dmg" Fixed → {0} + [/b]
UI overflow & glyph width budget

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.

KEY_BTN_INVENTORY (de_DE) 164% of English pixel width
Lossless PCM WAV repair

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 forever
$0 in browser

Instant sanity check for game jams and vertical slice demos.

  • Audit up to 250 strings and 2 locales per run
  • Inspect 1 primary .ttf or .otf font file
  • Single .wav loop discontinuity visualizer
  • 100% offline WebAssembly execution
Run free scan above
Most popular for solo devs & small studios

Studio Pass

Lifetime license
$29 single payment · no subscription

Unlimited local fixes, TMP/Godot exports, and offline CLI for one developer.

  • Unlimited strings, locales, and fallback fonts (.csv, .po, .json)
  • Instant TMP & Godot 4 glyph range exporter (.txt & .tres helper)
  • Automatically repaired localization & batch WAV ZIP with smpl markers
  • Offline Node CLI (npx tofucheck) for build export scripts
  • Includes all 2.x updates for Unity 6 and Godot 4.x
Get Studio Pass · $29 once

Team & CI/CD Pack

Up to 10 seats
$49 single payment

Automated pull request gates for growing indie teams and publishers.

  • Everything in Studio Pass for up to 10 studio seats
  • Turnkey GitHub Action & GitLab CI workflow that blocks PRs on missing glyphs
  • Unity IPreprocessBuildWithReport & Godot EditorExportPlugin scripts
  • HTML & Markdown LQA approval report generator for translators
Get Team CI/CD Pack · $49 once

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.