"I needed it. So I made it. It's useless β yet somehow incredibly useful."
β Harsh Vardhan Chopra
I was using Snapchat Web and realised it straight-up ignores arrow keys, Page Down, and even the middle mouse button scroll. There's no way to auto-scroll through stories without physically moving your scroll wheel every few seconds.
So I built this. It simulates the mouse wheel at the OS level, which means it works on any website, any browser, any app that blocks normal keyboard input. Set your speed, hit Start, switch to your browser, and forget about it. Move your mouse and it stops automatically.
Is it the most important tool ever built? No.
Will it save you from repetitive strain on Snapchat? Absolutely.
- π±οΈ Simulates middle-click wheel scroll β bypasses sites that block arrow keys
- π Auto-stops when you move your mouse β completely hands-free control
- β¨οΈ Global hotkeys β work even when the browser is focused, not this app
- ποΈ Fully customisable β speed, direction, ticks/sec, stop threshold, start delay
- πΎ Saves your settings β remembers everything across launches
- π» Laptop presets β safe hotkey suggestions per laptop model (HP, Dell, Lenovo, ASUS, Acer)
- πͺ Always-on-top mode β float the window beside your browser
- π Auto admin request β asks for elevated privileges on launch for reliable hotkeys
- π Windows + Linux β one codebase, both platforms, no compromise
βββββββββββββββββββββββββββββββββββββββββββ
β βββ AutoScroll v2.1 [β] β
β Made by Harsh Vardhan Chopra | @HVCREALMβ
βββββββββββββββββββββββββββββββββββββββββββ€
β β
Scrolling β’ move mouse to stop β² β
βββββββββββββββββββββββββββββββββββββββββββ€
β β¨ Global hotkeys active β
β [Ctrl+F9] Start [Ctrl+F10] Stop β
β [Ctrl+Alt+S] Toggle β
βββββββββββββββ[ Control ]ββ[ Hotkeys ]ββββ€
β Scroll speed ββββββββ 3 β
β Ticks / second ββββββββ 15 β
β Mouse stop (px) ββββββββ 6 β
β Start delay (sec) ββββββββ 3 β
β β
β Direction: [β² Up] [βΌ Down] β
βββββββββββββββββββββββββββββββββββββββββββ€
β [βΆ Start] [β Stop] β
βββββββββββββββββββββββββββββββββββββββββββ
# Clone the repo
git clone https://github.com/HVCREALM/AutoScroll.git
cd AutoScroll
# Install the one dependency
pip install pynput
# Run
python autoscroll.pyHead to Releases and grab:
| File | OS | Notes |
|---|---|---|
AutoScroll.exe |
Windows 10/11 | No Python needed |
AutoScroll |
Linux (x64) | No Python needed |
:: Double-click this file, or run in cmd:
build_windows.batWhat it does automatically:
- Checks Python is installed
- Installs
pynput+PyInstaller - Builds
dist\AutoScroll.exeβ single portable file, no install required - Embeds UAC admin request into the
.exe
chmod +x build_linux.sh
./build_linux.shWhat it does automatically:
- Detects your distro (apt / dnf / pacman / zypper)
- Installs all system dependencies including
python3-tkandpolkit - Builds
dist/AutoScrollβ single portable binary - Creates a
.desktopshortcut in your app menu - Installs a polkit policy for GUI sudo (no terminal popup)
All hotkeys are globally active β they work even when AutoScroll is minimised and your browser is in focus.
| Hotkey | Action |
|---|---|
Ctrl + F9 |
Start scrolling (with countdown delay) |
Ctrl + F10 |
Stop scrolling immediately |
Ctrl + Alt + S |
Toggle start/stop (always works as backup) |
All hotkeys are fully customisable from the Hotkeys tab inside the app.
You can pick any modifier + any F-key combination that doesn't conflict with your laptop's function row.
The app ships with presets that map safe hotkeys per laptop model, avoiding conflicts with media keys:
| Laptop | Avoid | Safe keys |
|---|---|---|
| HP Victus 15-fb0 | F7 (Volβ), F8 (Vol+) | Ctrl+F9 / Ctrl+F10 |
| HP Pavilion / Envy | F6 (Mute), F7 (Volβ), F8 (Vol+) | Ctrl+F9 / Ctrl+F10 |
| Dell XPS / Inspiron | F1 (Mute), F2 (Volβ), F3 (Vol+) | Ctrl+F8 / Ctrl+F9 |
| Lenovo IdeaPad / Legion | F1 (Mute), F5 (Refresh) | Ctrl+F9 / Ctrl+F10 |
| ASUS ROG / TUF | F10 (Mic), F11 (Volβ), F12 (Vol+) | Ctrl+F8 / Ctrl+F9 |
| Acer Nitro / Aspire | F7 (Brightβ), F8 (Bright+) | Ctrl+F9 / Ctrl+F10 |
On launch, the app shows a dialog asking if you want elevated privileges.
βββββββββββββββββββββββββββββββββββββββββββ
β AutoScroll β Admin Permission β
β β
β AutoScroll works WITHOUT admin rights. β
β β
β However, global hotkeys work MORE β
β RELIABLY with administrator privileges.β
β β
β Do you want to restart with admin? β
β (You can say No β it still works fine) β
β β
β [ Yes ] [ No ] β
βββββββββββββββββββββββββββββββββββββββββββ
| Response | Result |
|---|---|
| Yes | Re-launches with UAC (Windows) or pkexec GUI dialog (Linux) |
| No | Continues normally β everything still works |
No admin is required. It's offered because some systems restrict global keyboard hooks for non-admin processes.
| Setting | Range | Default | Description |
|---|---|---|---|
| Scroll speed | 1 β 20 | 3 | How many scroll units per tick |
| Ticks / second | 3 β 40 | 15 | How often a scroll event fires |
| Mouse stop (px) | 2 β 30 | 6 | Pixels of mouse movement to trigger auto-stop |
| Start delay (sec) | 0 β 10 | 3 | Countdown before scrolling begins (gives you time to switch windows) |
| Direction | Up / Down | Up | Scroll direction |
| Window on top | On / Off | On | Keep AutoScroll floating above other windows |
Settings are saved automatically to autoscroll_config.json next to the executable on every change and on close.
| OS | Status | Notes |
|---|---|---|
| Windows 10 | β Full support | |
| Windows 11 | β Full support | |
| Ubuntu 20.04 + | β Full support | X11 |
| Debian 11 + | β Full support | X11 |
| Fedora 36 + | β Full support | X11 |
| Arch Linux | β Full support | X11 |
| Linux (Wayland) | Global hotkeys need xdotool |
|
| macOS | β Not supported | Not tested, not planned |
AutoScroll/
βββ autoscroll.py β Main application
βββ build_windows.bat β Windows build script (PyInstaller)
βββ build_linux.sh β Linux build script (PyInstaller)
βββ README.md β You are here
βββ LICENSE β MIT
βββ autoscroll_config.json β Created at runtime (not committed)
This project is open source and contributions are welcome β but let me be honest about how I'd prefer things work.
Just tell me the problem. Open an Issue describing what's broken or what you'd like. I'll look at it and fix it myself if I have time. That's genuinely more useful than a surprise PR landing in my inbox.
I won't reject a good PR, but here's what I ask:
- Open an issue first β describe the problem before writing any code. Let's agree it's worth fixing.
- Keep changes focused. One problem = one PR.
- Don't refactor things that aren't broken.
- Test on at least one platform (Windows or Linux) before submitting.
- Write a clear description of what changed and why.
- Bug fixes (especially Linux / Wayland issues)
- New laptop presets (if your model has a different Fn key layout)
- macOS support (if someone wants to build and maintain it β I don't own a Mac)
- Complete UI rewrites
- Switching to a different GUI framework
- Adding network features or telemetry of any kind
MIT β do whatever you want, just keep the credit line.
MIT License β Copyright (c) 2025 Harsh Vardhan Chopra (@HVCREALM)