Anibon World Identity Verification
Overview & Triggers
LLMs hallucinate game names from post-cutoff patches. Thai Whisper output is phonetic — model wrong on both sources. Must verify against local references.
Priority Chain
Local references → cached story refs → reference SRT → websearch fallback
a. Check local game & event references
references/INDEX.md lists available game and cultural event knowledge files (including anime gacha games, and Japanese event conventions/cuisines like Japan_Event_Convention.md). This is the fastest and most reliable source.
b. Check cached story refs
python3 scripts/fetch_story_ref.py --list or browse references/stories/ for previously fetched synopses (dir is auto-created on first fetch).
c. Reference SRT (if reference video URL exists)
yt-dlp --write-subs --sub-lang en --skip-download <ref_url>
python3 scripts/align_ref_timeline.py <srt> <chunks/> > alignment.json
Parse SRT for character/location names. Use align_ref_timeline.py to match ref timestamps against stream chunks automatically.
d. Build name map
Thai transcript phoneme → verified EN name from sources above
e. Scan chunks at story boundary
For each candidate, match against verified map
f. Websearch fallback
Only if local + cached + SRT all insufficient:
python3 scripts/fetch_story_ref.py --game "HSR" --scene "Planarcadia 4.0"
g. Reject
Training-data inference, older-version character, unconfirmed phonetic match
DB Bootstrap
Run these before World Identity lookups for applicable games:
python3 scripts/fetch_fgo_db.py --check --db "../reference/FGO and DATA/atlas_fgo.db" || \
python3 scripts/fetch_fgo_db.py --db "../reference/FGO and DATA/atlas_fgo.db"
python3 scripts/fetch_ygo_db.py --check --db "../reference/Yu-Gi-Oh DATA/ygo_cards.db" || \
python3 scripts/fetch_ygo_db.py --db "../reference/Yu-Gi-Oh DATA/ygo_cards.db"
python3 scripts/fetch_pokemon_db.py --check --db "references/Pokemon DATA/pokemon.db" || \
python3 scripts/fetch_pokemon_db.py --db "references/Pokemon DATA/pokemon.db"
Mandatory Pokémon Naming Rules
Whenever any Pokémon species, entity, or stream topic is detected:
- Primary Name MUST be in Thai: Always output the Thai community/English-sound name (
name_th_english_sound) or official Thai name (name_th_official) first.- Example:
แบกซ์แคลิเบอร์ (Baxcalibur),ม้าดำ (Spectrier),การ์โชมป์ (Garchomp),เป็ดต้นหอม (Farfetch'd).
- Example:
- Dual-Lookup Verification: Cross-check candidate strings against
references/Pokemon DATA/pokemon.dbmatchingname_en,name_th_official, orname_th_english_sound. - No Bare English Names: Never output bare English Pokémon names alone (e.g. write
แบกซ์แคลิเบอร์ (Baxcalibur)orแบกซ์แคลิเบอร์, not justBaxcalibur).
When to Skip
- Stream covers well-known characters/games within training data cutoff
- No game/character names detected in the chunk signal
- User explicitly says "no need to verify"