mimikyu
a disguise for your Switch
Autonomous Pokemon Champions play (Reg M-A VGC). Computer vision + ML inference + Switch automation, all running on a real console behind a capture card.
Active runs
loading…
Spectator pulse
loading…
Recent evals
loading…
Subsystems
mimikyu-hand · Drives the Switch (C++ Qt)
mimikyu-mind · Inference, training, search (Python)
mimikyu-watch · Showdown replay collection
mimikyu-hub · This dashboard + Mac-local tooling
Repo
Switch automation forked from PokemonAutomation/Arduino-Source
Successor to baton_pass

Champions Spectator

Live Pokemon Showdown battle collection for VGC model training
Status
--
Connections
--
Total Replays
--
Last Hour
--
Coverage
--

Battle Coverage

Checking...

Collection Rate

Replays per Hour (last 48h)
Cumulative Collection

Full Dataset

VGC Ratings — Downloaded vs Spectated
BSS Ratings — Downloaded vs Spectated

Spectated Ratings (last 7 days)

VGC 2026
BSS

Sync to ColePC

Replay Sync
Checking...

Recent Saves

Loading...

Frame Labeler

Label screenshots for the C++ test suite
100%
 
Box Coordinates
Click and drag to select. Right-click to clear.
Retest (local Mac)
Requires python3 tools/mac_dev_runner.py running locally.
Detector Overlays
A toggle overlays · R reset zoom · prev/next image

Models

Live training + run comparison · runs from data/checkpoints/*.jsonl on unraid + live sessions
Metric vs. epoch
mimikyu@dashboard:~/training$ 2 running 1 stale 11 tracked gpu: colepc 96% · unraid 78% last refresh 00:03 ago view [1] action [2] winrate [3] lead [0] all
/ cat:A cat:W cat:L age<7d running starred sort: recent ▼ best name 11 ≫ 8 shown · 2 ✓
C RUN EP VAL_LOSS FULL_A TREND ETA HOST
A combo_full_d384_l12_v9_metaon_masked 14/24 0.4231 0.7044 1h42 colepc
W winrate_d256_l8_v4_teamemb 07/18 0.5891 3h11 unraid
· A combo_full_d384_l12_v8_baseline 24/24 0.4502 0.6611 done colepc
· A combo_full_d384_l12_v7_nomask 24/24 0.4677 0.6498 done unraid
· A combo_full_d512_l16_v1_widescale 09/30 0.7104 ▲ 0.4811 diverging vast-rtx4090
· L lead_advisor_d192_l6_v3_oppfeats 20/20 0.3120 done unraid
· W winrate_d256_l8_v3_legacy 12/12 0.6021 stale 12d unraid
· A combo_full_d256_l8_v6_smallproto 18/18 0.5108 0.5934 done colepc
· L lead_advisor_d192_l6_v2_baseline 20/20 0.3344 done unraid
· A combo_full_d384_l12_v5_oldfeatures 24/24 0.4912 0.6212 done unraid
· W winrate_d128_l4_v1_proto 10/10 0.6812 done colepc
A combo_full_d384_l12_v9_metaon_masked 14/24 epoch · started 5h12m ago · colepc:8422 ● running
loss[1]
accuracy[2]
calibration[3]
full_a[4]
x: epoch·samples·wall   y-log off
v9_metaon_masked 0.4231
v8_baseline 0.4502
v7_nomask 0.4677
v1_widescale 0.7104▲
0.40
0.55
0.70
epoch →

focus · stats

val_loss
0.4231 (best so far)
full_a
0.7044
switch_a
0.681
move_a
0.722
tera_a
0.554
throughput
1.42M tok/s
vram
9.8 / 10.0 GB
next epoch
~7m18s
finish ETA
today 21:44
delta vs v8
−0.0271 loss · +0.043 full_a

diff · v9_metaon_masked vs v8_baseline

+ feature_table_meta_on: true (v8: false) + action_mask_legality: true (v8: false — see feedback_action_mask_no_op) + batch_size: 384 (v8: 256) - dropout_attn: 0.05 (v8: 0.10) d_model: 384 · n_layers: 12 · lr: 3e-4 · warmup: 2k (unchanged)

tail · trainer.log

17:42:08 epoch 14 done · val_loss 0.4231 (-0.0089) · full_a 0.7044 (+0.0061) 17:42:09 ckpt → r2://champ-model-shards/v9_metaon_masked/ep14.pt 17:42:09 ★ new best on val_loss 17:35:51 step 38400 · loss 0.418 · lr 2.93e-4 · gpu 96% 17:28:33 step 36800 · loss 0.422 · lr 2.94e-4 · gpu 96% 17:21:14 step 35200 · loss 0.430 · lr 2.95e-4 · gpu 95%
j/k nav x select d diff (2) g graph t tail log e eval r refresh star K kill run / filter : command ? help : _
MIMIKYU // COCKPIT 2026-05-14 14:32:08 UTC 3 RUNS LIVE 2/2 RIGS UP 1 STALL ALERT HUB 9875 OK queue: 2 hb 3s ago
combo_full_d384_l12_v9_metaon_masked
colepc · 3080
0.7041
▲ +0.0042
full_a · ep 28
val_loss
1.382
▼ -0.011 vs ep27
best @
ep 28
new low this run
val_loss · last 28 eptrending ▼
epoch 28 / 6046.7%
next epoch 2:14 ckpt 12:48 ETA done 3h 22m
winrate_d256_l8_seed7
unraid · 4060
0.6932
▬ +0.0001
val_acc · ep 41
val_loss
0.6418
flat 4 ep
grad norm
0.018
▼ collapsing
val_loss · last 41 epPLATEAU
epoch 41 / 8051.3%
next epoch 3:52 ckpt 9:11 ETA done 5h 04m
lead_advisor_d192_l6_aug2
colepc · 3080 (shared)
1.084
▼ +0.031
val_loss · ep 14
train_loss
0.412
▼ still falling
overfit gap
+0.672
▲ widening
val_loss · last 14 epDIVERGING ▲
epoch 14 / 5028.0%
next epoch 1:48 ckpt 8:24 ETA done 7h 48m

Rig Telemetry LIVE

Waiting for first heartbeat…

Historical Compare ARCHIVE

  • ■ v9_metaon_masked (LIVE)0.7041now
  • ■ combo_full_v80.66123d
  • ■ combo_full_v8_seed110.65895d
  • ■ combo_full_v70.643111d
  • combo_full_v6_pretrain0.620119d
  • combo_full_v5_legacy_mask0.604327d
  • combo_full_v4_d2560.582142d

Alerts & Anomalies 2

14:31 winrate_d256_l8_seed7: val_loss flat (Δ<0.001) for 4 epochs. Consider LR drop or early stop.
14:28 lead_advisor_d192_l6_aug2: overfit gap +0.672, val_loss rising 6 ep straight. DIVERGENCE.
14:14 colepc GPU sustained 97% · VRAM 88%. Headroom thin for queued lead_v3.
13:59 v9_metaon_masked ep 27 ckpt uploaded to R2 (champ-model-shards) · 412 MB.
13:42 Heartbeat ok: hub 9875 · unraid 8422 · colepc 8422.
13:11 Queue: combo_full_d384_l12_v10_aug, lead_advisor_d192_l6_v3 · awaiting slot.

Hall of Champions

The reigning best of combo_full_d384_l12_* — and the challengers nipping at their heels. Updated live from data/checkpoints.
Action

Move-and-switch accuracy

primary · val_full_a_acc
Reigning champion · 2 days

combo_full_d384_l12_v9_metaon_masked

Trained May 12 on colepc · peaked at epoch 38 / 80 · still cooking. First run to clear 0.70; meta-on conditioning was the unlock.
v6 .612 v7 +.021 v8 +.027 v9 +.040
Epoch38 / 80
Samples14.2M
Wall11h 04m
Rigcolepc · 3080
Filtermeta-on, masked
val_full_a_acc
.704
+.044 vs v8 · still training
2
combo_full_d384_l12_v8 prod model · trained Apr 28 · peaked ep54
16d ago
.660
−.044
3
combo_full_d384_l12_v7 first crack at 0.65 · trained Apr 09
35d ago
.633
−.071
4
combo_full_d384_l12_v8_legacymask ablation: re-enabled mask_actions, regressed
11d ago
.621
−.083
5
combo_full_d384_l12_v6 d384 baseline · trained Mar 22
53d ago
.612
−.092
6
combo_d256_l8_v3 smaller backbone · pre-d384 era
81d ago
.589
−.115
▾ 14 also-rans below .58 · click to expand
Winrate

Outcome predictor (AUC)

primary · val_auc
Reigning champion · 9 days

winrate_d256_l6_v4_metaon

Trained May 5 on unraid · 60 epochs, peaked at ep51. The meta-on conditioning that helped Action carried over — +0.018 AUC over v3, the biggest jump in the lineage.
v1 .812 v2 +.009 v3 +.011 v4 +.018
Epoch60 / 60
Samples22.4M
Wall8h 41m
Rigunraid · 4060
Filtermeta-on
val_auc
.850
+.018 vs v3 · finished
2
winrate_d256_l6_v3 previous prod · sat for ~6 weeks
42d ago
.832
−.018
3
winrate_d384_l8_v1_wide went wider not deeper · marginal gain, 2× cost
19d ago
.828
−.022
4
winrate_d256_l6_v2 trained Mar 18
57d ago
.821
−.029
5
winrate_d256_l6_v1 first checkpoint of the family
88d ago
.812
−.038
▾ 8 also-rans below .80 · click to expand
Lead

Lead-pick top-1

primary · lead_top1
Reigning champion · 5 days

lead_d192_l4_v5_teamembed

Trained May 9 on colepc · 40 epochs, peaked at ep28. Team-embedding rewrite was the unlock — every prior run plateaued at ~0.46.
v2 .421 v3 +.018 v4 +.022 v5 +.029 v6 running
Epoch40 / 40
Samples9.8M
Wall3h 12m
Rigcolepc · 3080
Filterteam-embed v2
lead_top1
.490
+.029 vs v4 · finished
2
lead_d192_l4_v4 last run before team-embed rewrite
22d ago
.461
−.029
3
lead_d192_l4_v3 added move-pool features
38d ago
.439
−.051
4
lead_d192_l4_v2 trained Mar 30
45d ago
.421
−.069
5
lead_d128_l4_v1 smaller, original baseline
71d ago
.397
−.093
▾ 6 also-rans below .39 · click to expand

Challenger compare

2
combo_full_d384_l12_v8_legacymask ×
lead_d192_l4_v3 ×

Recognition Results

Species, moves, and HP reading results from the last regression run

Team Preview Examples

Labeled team-preview frames with the cropped opp sprites + matched atlas references. Selecting screen also shows My-side text-OCR crops.
Loading...

Digit Templates

HP% digit templates (0-9) used for template-matching OCR

Sprite Recognition

Opponent species in Team Preview are matched against the 272-sprite reference atlas via cropped RMSD.

BattleHUD own-species icons (action_menu)

Boxes own_specoes_icon_0/1 from tools/box_definitions.json. Each row shows the cropped icon, the ground-truth species, and the top-5 atlas matches with their alpha. Lower alpha = closer match.
Loading...

Pokeball Alive Detector

Per-frame run of PokeballAliveDetector across action_menu, move_select, battle_log. Each row shows the frame and 12 state indicators (own 0..5, opp 0..5). Green = alive, grey = fainted, dot = empty.
Loading...

PP Crops Gallery

4 PP crops + the BattleHUDReader's move_pp_current read for every move_select test image. Use this to spot crop-box drift. Red = -1 (no read); cyan = a read happened. Open any image in the Inspector via the link below the row to nudge the boxes.
Loading...

HP Crops Gallery

Opponent HP% (slot 0/1) + own HP "current/max" (slot 0/1) crops + BattleHUDReader reads, across action_menu and move_select frames. Red = -1 (no read); cyan = read happened. If a frame should clearly show HP but reads -1, the box is mis-tuned. Open in inspector to nudge.
Loading...

Target Select Crops Gallery

Per frame: 2 own move-name cells + 4 target cells (opp 0/1, own 0/1). Each target cell shows the is_targeted color strip + the effectiveness crop + raw OCR text + the classified enum. Mismatches between raw and classified usually mean the classifier needs another keyword or a fuzzy fallback.
Loading...

HUD Pill Atlas

Species → averaged HUD-pill render, bootstrapped from manifest-labeled BattleHUDReader frames. Used as the in-domain reference for sprite-matching on the small HUD pills (where the canonical Bulbapedia atlas hits ~22% top-1; this approach is ~95% with one ref/species). Re-run the build to grow the atlas after labeling new frames.
Loading...

Team Scan Verify

Runs TeamSummaryReader on the latest Moves & More screenshot and TeamStatsReader on the latest Stats screenshot, merges per-slot, and renders the assembled team as a Pokemon Showdown paste. Swap-pair via the file pickers if needed.
Moves & More
Stats

Assembled team (Showdown paste)


    

Saved Team Library

Each entry is one unique team composition (the same 6 species in any order maps to one file). Loaded automatically by LiveDetectorTrace when the team-preview-selecting screen reveals all 6 species.

Team Preview Locked-In: own slot investigation

6 own-side icon slots (top-to-bottom own_slot_0...own_slot_5). Each crop sprite-matched against the HUD pill atlas. Use this to validate the boxes and decide the lead-order mapping before promoting to a real reader.
Screenshot

Team Preview Selecting: cursor reader

6 highlight strips on the left edge of each own card. Per-slot (R+G)/2 - B "yellowness" score; floor 30. Highest-scoring slot wins. The selected slot pill shows what TeamPreviewCursorReader::read returns.
Screenshot

Team Preview Selecting: lead-mark digits

6 digit-badge crops (top-to-bottom digit_0...digit_5). Same OCR pipeline as TP Locked-In: raw → binarize → yellow_paint → yellow_filled → yellow_inner → Tesseract. The "→ lead" column is the final '1'..'4' (or empty for unmarked) used by the auto-press lead-pick state machine.
Screenshot

Lead Test

Pick 6 mons per side. The hybrid Lead Advisor (lookup → model fallback) recommends which 4 each side should bring + their top lead pairs.
Blue Team
vs
Red Team

Lead Fixtures

Per-champion fixture-eval rollups against the top-N popular team-preview states. Two scalars are inlined into each <stem>.card.md; the full per-fixture detail lives in <stem>.fixtures.md next to the .pt.

Rule summary

Fixtures

Per-Mon Competence

Per-species action-model accuracy from scripts/per_mon_competence.py. Slot-A piloting only. High full_acc = the bot reliably nails this mon's actions on the eval slice — safer to let it pilot.
Loading…

Meta Stats OCR Smoke Test

Phase-1a Python pipeline against champions_meta_stats/. Run all frames or click one for per-cell detail.
force:
Frames
Click a frame on the left to see OCR breakdown.

Meta Stats

Parsed Species File
Loading…

Meta Stats Header-OCR Failures

Per-mon detail pages where Tesseract returned empty/garbage for the species name after all retries. Auto-dumped from scrape_one_species when out.species.empty().

Meta Stats — EV Cell Debug

Per-cell crops of every ROW_EV[] box (5 ranks × 6 stats) — exactly what sanitize_ev → robust_read_int sees before OCR. CSV scrape (2026-05-28): rank-2 90% bad · rank-5 17% bad · HP/Atk/SpA fail 3-8× more than Def/SpD. Top spread repeats 37× across unrelated mons, so crops are likely sampling the wrong glyphs.
Full screenshot with crop-box overlay

Meta Stats — EV Digit Templates

Per-digit OCR templates emitted by MetaStatsScraper for values 0–32. Visually verify the image matches its filename — a mislabeled template corrupts downstream OCR. normal/ = white/purple bg (non-cursor rows). highlighted/ = yellow bg (cursor row, usually rank 1).
Loading…

normal/

highlighted/

Meta Stats — Ability Templates

Cursored + uncursored name-pill crops captured by MetaStatsScraper when CAPTURE_ABILITY_TEMPLATES is on. The slug folder is the scraper's best guess at capture time — eyeball each bucket and move any visually-wrong crop to the right slug. Atlas builders read straight from {state}/{slug}/, so this UI is the ground-truth gate.
Loading…

Slugs

— pick a slug —

Comp Title OCR

Inspect the comp_title_line1 + comp_title_line2 crops on every screenshot in devtools/test_images/champions_comp_leaderboard/ and the OCR result through the C++ dev-runner (same Tesseract the scraper uses). Crops update automatically whenever you re-draw the boxes in the Inspector.

EV Scroll-State Labels

Tag each frame as scrolled or unscrolled. The labels feed an analysis endpoint that picks the R-channel threshold for the in-game scroll detector. Keys: S = scrolled · U = unscrolled · X = clear · ←/→ = prev/next · N = next unlabeled.
Loading…
frame

EV Fail Triage

Every recent sum-mismatch dump in one view. Per cell: the source color crop, the binarized version template-match actually compares, the waterfill / template-match decision trace, and (when available) the matched template alongside for direct visual diff. Toggle EV-fail verbose trace on in the scraper to populate the trace lines on new failures.
Loading…

2v2 Matchups

Common on-field 2v2s from the parsed replay corpus, scored by the winrate model per (move_a, move_b) call. Pick a matchup on the left to see the move grid. Source: data/matchup_move_scores.json
loading…
Select a matchup on the left.

2v2 Pattern Wall

sort: hover any tile for detail
loading…

Meta Constellation

drag mons · click for ego-net · click edge for grid

Move Index

Click a move to drill in. Sort by clicking column headers.
Move Matchups Cells Avg Win% Lift σ Histogram Best Partner
loading…
Select a move on the left for its full matchup record.