A World of Warcraft fishing bot for Windows. Inspired FishingFun by Julian Perrott.
Detects the fishing bobber on screen using pixel colour analysis, watches for the bite (bobber dip), then moves the mouse to the bobber with human-like movement and right-clicks to loot.
- Bobber detection — Scans screen for red (or blue) bobber feather using configurable colour thresholds
- Bobber stabilization — EMA smoothing on Y-axis with locked X to prevent jitter from frame-to-frame noise
- Bite detection — Tracks bobber Y-position median and triggers on downward dip
- Human-like mouse movement — Cubic Bezier curves with random control points, smoothstep easing, and pixel jitter
- Random click offset — Loot clicks land within ±5px of bobber center to avoid detectable patterns
- Pixel bridge — WoW addon communicates game state (loot, bobber status, fishing state) to the bot via coloured pixels — no memory reading or chat log parsing
- Auto container opening — Automatically opens clam/lockbox containers after looting
- Auto junk deletion — Detects and deletes junk items flagged by the addon
- Lure macro support — Automatically re-applies lure every 10 min 10 sec
- Configurable loot delay — Random wait before looting (min–max range)
- Fish tracker — Counts and displays caught fish with percentages, powered by the pixel bridge
- Loot report — Generates an interactive HTML report with all-time totals and per-session breakdowns
- Bobber calibration — Auto-tunes colour thresholds for your screen/environment
- GUI — Dark-themed tkinter interface with live screenshot, bobber movement chart, and log panel
- Modal settings — Settings popup stays above the main window and blocks interaction until closed
- Always-on-top — GUI sits in the top screen strip, outside WoW's capture zone
- Standalone exe — Build a single-file
.exewith the included build script
- Windows 10/11
- Python 3.10+
- World of Warcraft running in windowed or borderless windowed mode
git clone https://github.com/pjerra/Laksefisk.git
cd Laksefisk
pip install -r requirements.txt- Pillow — Image processing
- mss — Fast screen capture
- psutil — WoW process detection
- pywin32 — Windows API (keyboard/mouse input)
The bot communicates with the game through the Laksefisk addon, which encodes game events as coloured pixels on screen.
-
Copy the
addon/folder contents to your WoW AddOns directory:World of Warcraft/_anniversary_/Interface/AddOns/Laksefisk/The folder should contain
Laksefisk.luaandLaksefisk.toc. -
Enable the addon in WoW's addon menu and
/reloadif needed. -
The addon renders a small pixel strip in the top-left corner of the screen. The bot reads these pixels to detect:
- What item was looted (item ID)
- Whether the bobber is active
- Whether junk is on the cursor (for auto-delete)
- Current fishing state
python gui.pyThe GUI provides:
- Cast Key — Set the keybind for casting (virtual key code, e.g.
0x34for key4) - Lure Key — Optional lure macro keybind (auto-applied every 10m10s)
- Loot Wait — Min/max seconds to wait before looting
- Colour Settings — Adjust bobber colour detection thresholds
- Auto Junk Delete — Toggle automatic deletion of junk items
- Live Screenshot — Shows what the bot sees with detected pixels highlighted
- Bobber Chart — Real-time bobber movement with strike threshold line
- Fish Tracker — Live count of caught fish with item names and percentages
- Addon Status — Shows whether the pixel bridge is connected and reading data
python main.py [options]| Option | Default | Description |
|---|---|---|
--cast-key |
0x34 (key 4) |
Virtual key code for cast |
--lure-key |
None | Virtual key code for lure macro |
--loot-min |
0.5 |
Min loot delay (seconds) |
--loot-max |
2.0 |
Max loot delay (seconds) |
--blue |
off | Use blue bobber mode |
--strike |
7 |
Bite detection threshold |
Run the calibration tool to auto-tune colour thresholds for your screen:
python bobber_calibration.pyCast your line, then the tool captures the screen and sweeps threshold values to find the tightest settings that reliably detect the bobber.
Generate an interactive HTML report of your fishing history:
python loot_report.pyOpens loot.html with all-time totals and per-session breakdowns.
build.batProduces Laksefisk.exe via PyInstaller.
- Cast — Sends the cast key to the WoW window
- Search — Captures the center of the screen and scans for red/blue pixels matching the bobber feather
- Stabilize — Locks the X-axis and applies EMA smoothing to Y to filter out noise
- Watch — Tracks the bobber's Y-position over time, building a median baseline
- Detect bite — When the bobber dips below the median by the strike threshold, a bite is detected
- Loot — Waits a random delay, moves the mouse along a curved Bezier path to the bobber (with ±5px random offset), and right-clicks
- Read loot — The pixel bridge reads what item was looted from the addon's pixel encoding
- Post-loot — Opens containers (clams, lockboxes) and deletes junk items if enabled
The addon encodes data as a row of 20 pixels using binary 0/255 values:
- Pixels 1–16: item ID in binary
- Pixels 17–20: flags (bobber active, fishing state, junk on cursor, etc.)
The Python pixel_bridge.py module reads these pixels via screen capture and decodes the game state without any memory reading or injection.
The bot captures the center half of the screen:
- X:
screen_width/4to3*screen_width/4 - Y:
screen_height/4to3*screen_height/4 - 100
The GUI sits in the top quarter of the screen, safely outside this zone.
Common keys for WoW keybinds:
| Key | Code | Key | Code |
|---|---|---|---|
| 1 | 0x31 |
6 | 0x36 |
| 2 | 0x32 |
7 | 0x37 |
| 3 | 0x33 |
8 | 0x38 |
| 4 | 0x34 |
9 | 0x39 |
| 5 | 0x35 |
0 | 0x30 |
Full list: Microsoft Virtual Key Codes
├── gui.py # tkinter GUI application
├── main.py # Console entry point
├── fishing_bot.py # Core bot loop (cast → find → watch → loot)
├── bobber_finder.py # Bobber detection with EMA stabilization
├── bite_watcher.py # Bite detection via Y-position tracking
├── pixel_bridge.py # Reads game state from addon pixel encoding
├── fish_tracker.py # Fish catch stats (via pixel bridge)
├── pixel_classifier.py # Red/blue pixel colour matching
├── bobber_calibration.py # Auto-tune bobber colour thresholds
├── loot_report.py # Generate interactive HTML loot report
├── item_lookup.json # Item ID → name mapping for pixel bridge
├── wow_screen.py # Screen capture (mss)
├── wow_process.py # Win32 API (key press, mouse movement)
├── models.py # Data classes and enums
├── timed_action.py # Timer utility
├── build.bat # PyInstaller build script
├── requirements.txt # Python dependencies
├── addon/
│ ├── Laksefisk.lua # WoW addon — pixel bridge encoder
│ └── Laksefisk.toc # Addon manifest
└── tests/ # Test suite
Based on FishingFun by Julian Perrott (C#/WPF). Ported to Python.
This software is provided for educational purposes. Use at your own risk. Botting may violate the World of Warcraft Terms of Service.