{ "_doc": "Graph-decoder settings used by decode.py (tuned on real sheets). Distances are in stride-2 grid px.", "settings": { "heat_thr": 0.4, "wire_thr": 0.5, "cut_pad": 1, "attach": 8.0, "bridge": 4, "spur": 6, "dir_len": 7, "pair_cos": -0.5, "t3": "pair", "through_cos": -0.8, "arrow_touch": 1.5, "arrow_reach": 16, "short_gap": 8, "virtual": true, "virtual_cluster": 10, "virtual_border": 3, "arrow_tip": 8 }, "notes": { "heat_thr": "tuned on real dev sheets 2026-09-27 (was 0.3): fewer weak false symbols", "wire_thr": "", "cut_pad": "grid px added around a symbol box before cutting the wire mask", "attach": "grid px: a stroke end this close to a box lands on it (tuned on real dev sheets; was 6)", "bridge": "grid px: junction clusters joined by a branch this short are one junction", "spur": "grid px: free-ended branches shorter than this are drawing noise (hash marks, tails)", "dir_len": "grid px along a branch used to measure its direction at a junction", "pair_cos": "a 4-way / 3-way pairing is trusted only if the pair is at least this opposite", "t3": "3-way junction away from symbols: \"pair\" joins the straight-through arms, \"all\" joins all", "through_cos": "arms this opposite at a junction on a symbol are a run crossing past it", "arrow_touch": "grid px: an end this close to an arrowhead is a home-run tip regardless of symbols", "arrow_reach": "grid px: an arrowhead no stroke reached belongs to the nearest symbol this close", "short_gap": "grid px: side-by-side symbols this close are tested for a run straight across the gap", "virtual": "stroke ends that reach no detected symbol become unrecognised devices", "virtual_cluster": "grid px: free ends this close are the same unrecognised symbol (runs arrive from sides)", "virtual_border": "grid px: free ends this close to the image edge are runs leaving the view, not devices", "arrow_tip": "grid px: a free end this close to an arrowhead is its tip, never an unrecognised device" } }