ClashCR Rewrite Plan
1. Research Summary
Evaluated Projects
| Project | URL | Credibility | Visual Mode | Approach | Gaps |
|---|---|---|---|---|---|
| KataCR | https://github.com/wty-yy/katacr | β β β β β Academic paper | Live + Replay | YOLO unit detection + ResNet hand classifier + RL policy | Does NOT track opponent cards; focuses on self-play AI. Dataset stale (May 2024). |
| CR Vision | https://github.com/bytkim/cr_vision | β β β β β Active 2026 | Live (BlueStacks) | YOLO troop detection + grid tracker + wall-clock elixir + cycle inference | Correct architecture for opponent tracking. Missing evolutions/heroes/spell detection. ~60 cards in cost table. |
| TV Royale Dataset | https://huggingface.co/datasets/chrisrca/clash-royale-tv-replays | β β β ββ | Replay/TV | Frame-level card crops with x,y positions | Not usable for live opponent tracking; no opponent hand info. |
| RoyaleAPI cr-api-data | https://royaleapi.github.io/cr-api-data/json/cards.json | β β β ββ | Static data | 120 cards as of snapshot | Stale: missing 2025-2026 cards (Vines, Spirit Empress, Hero cards, etc.). |
| Official Clash Royale API | https://developer.clashroyale.com/ | β β β β β | Official | /v1/cards endpoint | Requires API token; best source of truth. |
Why Current Whole-Frame Classifier Fails
- Opponent card art is never visible in live gameplay. Only own hand cards are shown.
- A whole-frame classifier trained on card images will hallucinate predictions when shown combat frames.
- The correct signal is unit spawns and spell effects on the arena, not card art.
- KataCR paper explicitly splits perception into: arena (YOLO units), hand cards (classifier), time/elixir (OCR). Opponent cards are inferred from arena detections, never classified directly.
2. Recommended Architecture
Emulator Capture (Win32 / mss)
|
v
Battle Gater (lobby vs battle detection, ROI computation)
|
v
Event Detector (temporal differencing, persistence suppression, side separation)
|
v
Evidence Model (YOLO unit detector + heuristic spell effect detectors)
|
v
Card Resolver (unit->card mapping, multi-unit rules, evolution/hero handling, ambiguity->UNKNOWN)
|
v
Elixir Tracker (wall-clock regen with mode schedule)
Deck Tracker (cycle inference, meta priors)
3. Concrete Rewrite Plan for F:\ClashCR
- Delete old whole-frame card classifier code and stale card JSON dumps.
- Add
clashcr/utils/card_registry.pywith sync from RoyaleAPI + Official API. - Add
clashcr/core/capture.pyfor MuMu/BlueStacks window capture. - Add
clashcr/core/battle_gating.pyfor battle detection and ROI separation. - Add
clashcr/core/event_detector.pyfor temporal event detection. - Add
clashcr/core/recorder.pyfor evidence recording and labeling. - Add
clashcr/models/evidence_model.pyfor YOLO + spell heuristics. - Add
clashcr/models/card_resolver.pyfor unit->card mapping with ambiguity handling. - Add
clashcr/game/elixir_tracker.pyfor elixir estimation. - Add
clashcr/game/deck_tracker.pyfor deck/cycle inference. - Add
clashcr/core/evaluator.pyfor offline metrics. - Add
clashcr/cli.pyfor all CLI commands.
4. Card Registry Sync
- Primary: RoyaleAPI static JSON (fallback)
- Secondary: Official API
/v1/cards(requires token) - Logs: source URL, sync timestamp, card count, IDs, costs, types, rarities, evolution/hero/tower-troop flags.
- Fails loudly if registry is stale or missing expected new cards.
5. Dataset Collection and Labeling Plan
clashcr record-battle --output data/live-recordings/session-001 --seconds 180 --fps 8- Saves frames, metadata.jsonl, and creates empty labels.csv / predictions.csv.
- User manually labels opponent card plays in labels.csv.
- Required validation set:
= 20 full battles
- Multiple arenas/maps
- Multiple resolutions
- Single/double/triple elixir periods
- All card categories (troops, spells, buildings, champions, evolutions, heroes, tower troops)
- Negative recordings (lobby/menu, quiet battle periods)
6. Training Plan
- Unit detector: Fine-tune YOLOv8 on KataCR detection dataset + custom labeled spawns.
- Spell effects: Heuristic color/motion detectors (no training required for MVP).
- Future: Train a lightweight spell-effect classifier on recorded spell crops.
7. CLI Commands
# Setup
pip install -e .
clashcr sync-cards --config config.yaml
# Recording
clashcr record-battle --config config.yaml --output data/live-recordings/session-001 --seconds 180 --fps 8
# Labeling
clashcr label-recording --recording data/live-recordings/session-001
# (Then edit labels.csv manually or with a GUI tool)
# Training (placeholder)
clashcr train-event-model --config config.yaml --data data/live-recordings
# Evaluation
clashcr evaluate-recording --config config.yaml --recording data/live-recordings/session-heldout --labels data/live-recordings/session-heldout/labels.csv
# Live run
clashcr run --config config.yaml --raw --debug-frame debug-frame.jpg --debug-dir debug-events
8. Debug Checklist for Live Failures
- Emulator window detected? Run
python -m clashcr.core.captureto list windows. - Battle detected? Check battle confidence in logs.
- Events firing? Check debug-events/ directory for crops.
- YOLO model loaded? Verify path in config.yaml.
- Side attribution correct? Check opponent ROI vs own ROI.
- Elixir tracking reasonable? Compare to wall-clock regen.
- False positives? Increase
min_event_areaortemporal_confirmation. - Missed spells? Verify spell heuristics or add new color ranges.
9. Verification Report Requirements
- Run evaluation on held-out labeled recordings.
- Report: precision, recall, F1, FP/min, missed events, mean timing error.
- If 100% not achievable, state plainly and identify missing visual signal.