A free, open-source computer-vision bot that automatically plays the Dota 2 Boot Breaker mini-game (the Arkanoid / brick-breaker game in the Dark Carnival event). It watches your screen, tracks the flying boot, and steers the paddle for you โ clearing blocks and racking up points hands-free.
๐ Racks up 100,000+ points fully unattended โ plays level after level on its own.
Keywords: Dota 2 Boot Breaker bot ยท Dark Carnival minigame auto-player ยท Arkanoid / brick-breaker bot ยท Dota 2 event script ยท OpenCV screen-capture game bot ยท Python Windows game automation.
โญ If this bot earns you points, please star the repo โ it helps others find it!
- ๐ฏ Auto-catch โ predicts where the boot will land (including wall bounces) and slides the paddle under it.
- ๐งฑ Block-aware aiming โ deflects the boot toward the side with the most blocks, so it keeps scoring instead of leveling out the top too early.
- ๐ Auto-serve โ detects the between-level "LOCK CART POSITION" and "THROW BOOT" prompts and taps Space to launch the next boot, so it plays level after level unattended.
- ๐๏ธ Live preview โ an on-screen window shows exactly what the bot sees (boot, paddle, predicted landing).
- โจ๏ธ Keyboard control โ drives the in-game paddle with A/D or the arrow keys (your choice).
- ๐ง One-time calibration โ point at your play area once; settings are saved.
- ๐ฑ๏ธ Global hotkeys โ start/stop with F8 at any time.
- โฌ๏ธ Download
boot-breaker-bot.exefrom the latest release. - Double-click it. (Windows SmartScreen may warn about an unrecognized app โ click More info โ Run anyway. The full source is right here in this repo, so you can see exactly what it does.)
- Follow the on-screen calibration steps (below), then press F8 in Dota to let it play.
Don't have Python? No problem โ the launcher installs it for you.
- Click the green
< > Codebutton above โ Download ZIP, and unzip it anywhere. - Double-click
run.bat.- The first launch automatically installs Python (if missing) and all required packages into a local folder โ you don't need to install anything by hand.
- Follow the calibration steps, then press F8 in Dota.
๐ก Nothing is installed system-wide. Everything lives in a local
.venvfolder next to the bot. Delete the folder and it's gone.
- Open the Dota 2 console and set:
fps_max_ui 30โ the boot's speed scales with your UI frame-rate, and 30 keeps it catchable. - Run Dota in Borderless / Windowed-Fullscreen (not exclusive fullscreen), so the bot can capture the screen.
- Open the Boot Breaker mini-game so the play area is visible.
Run calibrate.bat (or press F7 inside the bot). With Boot Breaker on screen:
| Step | Do this |
|---|---|
| 1 | Move your mouse to the top-left corner of the play area โ press F1 |
| 2 | Move to the bottom-right corner โ press F2 |
| 3 | Hover the middle of the paddle โ press F3 (sets the paddle line and samples its colour) |
| 4 | Choose keys: F5 = A/D, F6 = arrow keys |
Your settings are saved to config.json. To play, run run.bat, focus Dota, and press F8.
Preview markers: ๐ข green circle = boot ยท ๐บ yellow triangle = predicted landing ยท ๐ฃ magenta line = where the paddle is being steered ยท ๐ท cyan diamond = the paddle.
| Key | Action |
|---|---|
| F8 | Toggle bot ON / OFF (starts OFF) |
| F10 | Show / hide the preview window |
| F7 | Re-run calibration |
| F9 / Esc | Quit |
Most people never touch these โ but if you want to fine-tune:
| Field | Meaning |
|---|---|
control_mode |
"ad" or "arrows" |
deadzone |
Stop moving when the paddle is within this many px of the target (raise if it jitters) |
paddle_color / paddle_tol |
Paddle colour match; raise paddle_tol if the paddle isn't found |
paddle_band |
Height of the strip searched for the paddle |
diff_thresh / min_area / max_area |
Boot detection; tighten if it grabs a breaking block instead of the boot |
aim_mode |
"blocks" (aim at densest side), "center", or "off" (pure catch) |
aim_strength |
How far off-centre it hits the boot to steer it (px) |
wall_inset |
~half the boot width; improves bounce prediction |
auto_serve |
true/false โ auto-tap Space on the between-level serve prompts |
serve_interval |
Seconds between Space taps while a prompt is on screen |
serve_confirm_seconds |
Prompt must stay on screen this long before serving (rejects transient splashes/score pop-ups) |
serve_gate_seconds |
Require no descending boot for this long before serving (rejects triggers during active play) |
serve_band_y0 / serve_band_y1 |
Vertical band (fraction of height) searched for the prompt text; nudge if your HUD sits differently |
serve_white_thresh / serve_min_white_px / serve_min_components / serve_min_span_frac |
Prompt-text match sensitivity โ serve_min_components counts letter-sized white blobs (raise to reject pop-ups, lower if prompts are missed) |
| Problem | Fix |
|---|---|
| Paddle doesn't move | Dota must be focused and in Borderless; if one key type is ignored, switch control_mode (some builds only read A/D or arrows). |
| Paddle marker (cyan) is wrong | Re-run calibration and press F3 on a clear part of the paddle, or raise paddle_tol. |
| Green circle tracks debris, not the boot | Raise min_area, lower max_area, or raise diff_thresh. |
| It levels up too early | Increase aim_strength, or set aim_mode to "blocks". |
| Boot is too fast | Lower fps_max_ui in the Dota console. |
| Still stuck? | Run diag.bat โ it saves diag_boot.png / diag_paddle.png you can inspect or share in an issue. |
The bot screen-captures the calibrated play area, finds the moving boot via frame-differencing plus a colour-gated tracker, and locates the paddle by its calibrated colour. It predicts where the boot will cross the paddle line (reflecting off the side walls) and holds Left/Right to slide the paddle there โ with optional block-aware aiming so it keeps breaking blocks instead of escaping out the top too early. Pure OpenCV + NumPy; no game memory reading, no injection โ it only looks at the screen and presses keys, exactly like a human.
Between levels it reads the on-screen "LOCK CART POSITION" / "THROW BOOT" prompts and taps Space to launch the next boot automatically:
Handled automatically by run.bat, but for reference: Windows, Python 3.12, and the packages in requirements.txt (numpy, opencv-python, mss, pywin32, keyboard).
This is a hobby / educational computer-vision project for a single-player mini-game. Use it at your own risk and in accordance with the Dota 2 / Steam Terms of Service. The authors are not responsible for how you use it. Not affiliated with or endorsed by Valve.
Released under the MIT License. Contributions welcome โ open an issue or PR!

