Files
climperor/config.json
T
voson a91789b72f v0.2.0: relations preview, item shop, abilities, overlay recommend, GSI enhancements
- Add relations/item/abilities preview (serve_relations.py + web/relations/)
- Add fetch scripts: hero_items, item_shop, items_meta, hero_abilities,
  ability_videos, patches, stratz, matchups, portraits
- Add overlay.py (role tags + Top-3 cyan marks), recommend.py
- Add http_utils.py, loc_format.py, hero_tags.py, item_fears.py
- GSI: full payload JSONL dump, foreground window detection
- Drop real template library; CDN-only matching
- Update docs: CHANGELOG 0.2.0, DESIGN config table, AGENTS module table
- .gitignore: exclude large regenerable assets (icons/portraits/videos)
2026-07-27 11:56:51 +08:00

149 lines
3.8 KiB
JSON

{
"comment": "All coordinates are relative: x is offset from screen center divided by screen height; y/w/h are divided by screen height. Filled in by calibrate.py.",
"calibrated_on": "2026-07-25 15:01:11",
"slots": [
{
"index": 1,
"cx_rel": -0.6409722222222223,
"cy_rel": 0.03611111111111111
},
{
"index": 2,
"cx_rel": -0.5263888888888889,
"cy_rel": 0.03611111111111111
},
{
"index": 3,
"cx_rel": -0.41180555555555554,
"cy_rel": 0.03611111111111111
},
{
"index": 4,
"cx_rel": -0.2972222222222222,
"cy_rel": 0.03611111111111111
},
{
"index": 5,
"cx_rel": -0.18263888888888888,
"cy_rel": 0.03611111111111111
},
{
"index": 6,
"cx_rel": 0.18055555555555555,
"cy_rel": 0.03611111111111111
},
{
"index": 7,
"cx_rel": 0.2951388888888889,
"cy_rel": 0.03611111111111111
},
{
"index": 8,
"cx_rel": 0.4097222222222222,
"cy_rel": 0.03611111111111111
},
{
"index": 9,
"cx_rel": 0.5243055555555556,
"cy_rel": 0.03611111111111111
},
{
"index": 10,
"cx_rel": 0.6388888888888888,
"cy_rel": 0.03611111111111111
}
],
"slot_w_rel": 0.07708333333333334,
"slot_h_rel": 0.06111111111111111,
"crop_trim": {
"top": 0.0,
"bottom": 0.0,
"left": 0.0,
"right": 0.0
},
"canonical_size": 96,
"match": {
"min_score": 0.45,
"min_margin": 0.04,
"ranked_mask": {
"comment": "Ignore the bottom rank-title bar and right-side medal when ranked overlays are detected.",
"bottom": 0.32,
"right": 0.22
}
},
"mode_label": {
"comment": "Strip under the draft timer that shows 全英雄选择 / 队长模式 / ...",
"y0_rel": 0.045,
"y1_rel": 0.072,
"x0_rel": 0.40,
"x1_rel": 0.60,
"min_score": 0.55
},
"grid": {
"comment": "Hero-selection grid. min_std separates cards from gaps; unavailable_std sits in the gap between banned/taken cards (8-21 measured) and live ones (33+).",
"min_std": 18.0,
"unavailable_std": 26.0
},
"text_rows": {
"comment": "Rows of text under each top-bar portrait, relative to screen height.",
"name": {
"y0_rel": 0.075,
"y1_rel": 0.09444
},
"role": {
"y0_rel": 0.09722,
"y1_rel": 0.11319,
"min_value": 110,
"max_sat": 0.08
}
},
"roles": {
"comment": "min_iou gates role-label matching. Own slot comes from GSI team_slot.",
"min_iou": 0.55
},
"recommend": {
"comment": "Top-3 from qualitative relations.json: +counter / -countered / +synergy.",
"enabled": true,
"top_n": 3,
"relations_path": "data/relations.json",
"role_tags": {
"1": ["Carry"],
"2": ["Carry", "Nuker", "Escape"],
"3": ["Initiator", "Durable", "Carry"],
"4": ["Support"],
"5": ["Support"]
}
},
"gsi": {
"comment": "Either trigger state starts one tracking session per match; strategy time is the fallback for joining late.",
"port": 3223,
"trigger_states": [
"DOTA_GAMERULES_STATE_HERO_SELECTION",
"DOTA_GAMERULES_STATE_STRATEGY_TIME"
],
"poll_interval": 1.0,
"confirm_polls": 2,
"revise_gain": 0.15,
"session_timeout": 300,
"keep_event_frames": true,
"dump_selection_every": 0,
"strategy_tail_polls": 8,
"strategy_gsi_wait": 3.0,
"require_foreground": true,
"capture_interval": 1.0,
"target_slots": 10,
"dump_payloads": true
},
"overlay": {
"comment": "Role tags under top-bar + cyan Top-3 recommend marks on the hero grid.",
"enabled": true,
"y_gap_rel": 0.008,
"icon_h_rel": 0.016,
"icon_gap_rel": 0.002,
"mark_size_rel": 0.018,
"mark_pad_rel": 0.004,
"rec_color": "#2ec4b6",
"rec_text_color": "#0b1220"
},
"calibrated_from": "draft_141704.png"
}