# Anibon World Identity

> Verify game world, character, and location names against local references before writing story timestamps. Loaded by anibon-timestamper when the stream covers post-cutoff games.

- Skill: `zenithth/anibon-world-identity` (Agent Skill, multi-file: 29 files)
- Install (CLI): `npx skillmds@latest add zenithth/anibon-world-identity`
- Raw SKILL.md: https://api.skillmd.com/api/skills/zenithth/anibon-world-identity/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: zenithth (https://skillmd.com/u/zenithth)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/zenithth/anibon-world-identity

---


# 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)

```bash
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:

```bash
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:

```bash
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:
1. **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)`.
2. **Dual-Lookup Verification**: Cross-check candidate strings against `references/Pokemon DATA/pokemon.db` matching `name_en`, `name_th_official`, or `name_th_english_sound`.
3. **No Bare English Names**: Never output bare English Pokémon names alone (e.g. write `แบกซ์แคลิเบอร์ (Baxcalibur)` or `แบกซ์แคลิเบอร์`, not just `Baxcalibur`).

## 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"

