Time Hooker

Speed up or slow down any webpage by hooking JS timing functions

Tendrás que instalar una extensión para tu navegador como Tampermonkey, Greasemonkey o Violentmonkey si quieres utilizar este script.

You will need to install an extension such as Tampermonkey to install this script.

Tendrás que instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Userscripts para instalar este script.

Tendrás que instalar una extensión como Tampermonkey antes de poder instalar este script.

Necesitarás instalar una extensión para administrar scripts de usuario si quieres instalar este script.

(Ya tengo un administrador de scripts de usuario, déjame instalarlo)

Tendrás que instalar una extensión como Stylus antes de poder instalar este script.

Tendrás que instalar una extensión como Stylus antes de poder instalar este script.

Tendrás que instalar una extensión como Stylus antes de poder instalar este script.

Para poder instalar esto tendrás que instalar primero una extensión de estilos de usuario.

Para poder instalar esto tendrás que instalar primero una extensión de estilos de usuario.

Para poder instalar esto tendrás que instalar primero una extensión de estilos de usuario.

(Ya tengo un administrador de estilos de usuario, déjame instalarlo)

Autor
Kushagra Jain
Instalaciones diarias
1
Instalaciones totales
15
Calificaciones
0 0 0
Versión
2.0
Creado
25/3/2026
Actualizado
25/3/2026
Tamaño
16,7 KB
Licencia
MIT
Funciona en
Todos los sitios

⏱️ Time Hooker

Speed Up or Slow Down Any Webpage — Right From Your Browser

Install with Tampermonkey License: MIT Version Tampermonkey Greasemonkey

Time Hooker is a powerful Tampermonkey userscript that hooks into JavaScript's core timing APIs to let you speed up, slow down, or freeze time on any webpage. Control animations, countdowns, timers, and everything time-dependent — all with a sleek floating UI.

Install Now · Features · How It Works · Keyboard Shortcuts · FAQ


🎬 Preview

┌──────────────────────────────────────────────────────┐
│                                                      │
│  🟢 ← Green bubble (left edge, slides out on hover)  │
│  │                                                    │
│  │  ┌─────────────────────────┐                      │
│  │  │  ⏱ TIME HOOKER          │                      │
│  │  │       2x                │                      │
│  │  │ ┌──────┬──────┬──────┐  │                      │
│  │  │ │ 0.1x │ 0.25x│ 0.5x │  │                      │
│  │  │ ├──────┼──────┼──────┤  │                      │
│  │  │ │ 0.75x│  1x  │ 1.5x │  │                      │
│  │  │ ├──────┼──────┼──────┤  │                      │
│  │  │ │ [2x] │  3x  │  5x  │  │                      │
│  │  │ ├──────┼──────┼──────┤  │                      │
│  │  │ │ 10x  │ 20x  │      │  │                      │
│  │  │ └──────┴──────┴──────┘  │                      │
│  │  │ Fine-tune ──●────── 2x  │                      │
│  │  │ [Custom____] [Set]      │                      │
│  │  │ Hook Active      [●━━]  │                      │
│  │  │  Alt+T  Alt+R  Alt+↑/↓  │                      │
│  │  └─────────────────────────┘                      │
│                                                      │
└──────────────────────────────────────────────────────┘

A translucent green bubble peeks from the left edge. Hover to reveal it, click to open the full control panel.


✨ Features

Feature Description
🚀 Speed Presets One-click buttons: 0.1x 0.25x 0.5x 0.75x 1x 1.5x 2x 3x 5x 10x 20x
🎚️ Fine-Tune Slider Continuous range from 0.05x to 25x with 0.05 step precision
✏️ Custom Speed Type any value from 0.01x to 100x
⏸️ Freeze Time Set to 0.1x or lower to virtually freeze animations/timers
🔄 Instant Reset One shortcut (Alt+R) snaps back to real-time 1x
🎨 Non-Intrusive UI Translucent bubble hides at screen edge; Shadow DOM isolates all CSS
💾 Persistent Speed Your chosen speed survives page reloads (saved in localStorage)
🌐 Universal Works on every website@match *://*/*
⌨️ Keyboard Driven Full keyboard shortcut support for power users
🔒 Zero Permissions @grant none — no special Tampermonkey permissions needed

🛠️ What Gets Hooked

Time Hooker intercepts these core JavaScript timing APIs at document-start, before any page script loads:

API Effect
setTimeout / clearTimeout Delays are divided by the speed multiplier
setInterval / clearInterval Intervals are recalculated; live intervals restart on speed change
Date / Date.now() Virtual clock runs at the chosen speed
performance.now() Scaled to match the virtual clock
requestAnimationFrame Callbacks receive virtual timestamps

Example: At 2x speed, a setTimeout(fn, 1000) fires after 500ms real time. At 0.5x, it fires after 2000ms.


🚀 Quick Install

Prerequisites

You need a userscript manager extension:

Browser Extension Link
Chrome / Edge / Brave Tampermonkey Chrome Web Store
Firefox Tampermonkey Firefox Add-ons
Safari Tampermonkey Mac App Store
Any Greasemonkey Firefox Add-ons

Method 1 — One-Click Install (Recommended)

  1. Click the button below — Tampermonkey will detect it automatically:

Install TimeHooker

  1. Tampermonkey will show a confirmation dialog → click Install.
  2. Done. Visit any page and look for the green bubble on the left edge.

Method 2 — Manual Install

  1. Open your Tampermonkey Dashboard (click the extension icon → Dashboard).
  2. Click the + tab to create a new script.
  3. Delete the template code.
  4. Copy the entire contents of TimeHooker.user.js and paste it in.
  5. Press Ctrl+S (or Cmd+S) to save.
  6. Refresh any page — the green bubble appears on the left edge.

⌨️ Keyboard Shortcuts

Shortcut Action
Alt + T Toggle the control panel open/closed
Alt + R Reset speed to 1x (real-time)
Alt + Step speed up to the next preset
Alt + Step speed down to the previous preset

Tip: When between presets (e.g. from the slider), Alt+↑/ will multiply/divide by 1.5x instead.


🎯 Use Cases

  • Skip wait timers — Speed through countdown overlays, waiting screens, or loading delays
  • 🎮 Browser games — Speed up idle/incremental games, or slow down for precision
  • 🧪 Web development — Test CSS animations, transitions, and JS timers at different speeds
  • 📺 Animations — Slow down complex animations to study them frame-by-frame
  • 📊 Dashboards — Speed up auto-refresh intervals on monitoring dashboards
  • 🧩 Debugging — Reproduce race conditions by slowing time to a crawl
  • ⏱️ Productivity — Speed up Pomodoro timers, break reminders, or any timed interface

🔧 How It Works

┌─────────────────────────────────────────────────┐
│  @run-at document-start                         │
│                                                 │
│  1. Save references to REAL timing APIs         │
│  2. Replace them with hooked versions           │
│  3. Virtual clock tracks "fake" elapsed time    │
│  4. Speed change → recalibrate baselines        │
│     (no time-jump on speed switch)              │
│  5. All live setIntervals are restarted         │
│  6. Shadow DOM UI injected when <body> exists   │
│                                                 │
│  Page scripts only ever see the hooked APIs     │
└─────────────────────────────────────────────────┘

Key design decisions:

  • @grant none — Runs in the page's own JS context so window.setTimeout etc. are the real page globals, not a sandbox copy.
  • @run-at document-start — Hooks are installed before the page's own <script> tags execute, so nothing escapes.
  • Closed Shadow DOM — The UI is fully CSS-isolated from the page. No styles leak in or out.
  • Baseline recalibration — When you change speed, the virtual clock smoothly transitions without any timestamp jump.

❓ FAQ

Does it speed up videos/audio? No. HTML5 `
Does it work on SPAs (Single Page Applications)? Yes. The hooks are installed once at page load and affect all JavaScript that runs afterward, including dynamically loaded scripts from frameworks like React, Vue, or Angular.
Will websites detect this? Most won't. Some anti-cheat or anti-bot systems may detect timing inconsistencies (e.g. comparing `Date.now()` to server timestamps). Use responsibly.
Does it work with Web Workers? No — Web Workers have their own global scope that userscripts can't access. The hook only affects the main thread's timing APIs.
My speed setting resets on new domains? Speed is saved per-origin using `localStorage`. Each domain remembers its own speed setting independently.
The bubble doesn't appear on some pages? A few pages (like browser internal pages `chrome://`, `about:`, or pages with extremely aggressive CSP) may block userscripts. This is a browser limitation, not a bug.

🗂️ File Structure

TimeHooker/
├── TimeHooker.user.js          # The userscript (install this)
├── README.md                   # You are here
├── LICENSE                     # MIT License
├── CHANGELOG.md                # Version history
├── CONTRIBUTING.md             # Contribution guidelines
└── .github/
    └── ISSUE_TEMPLATE/
        ├── bug_report.md       # Structured bug report template
        └── feature_request.md  # Feature request template

🤝 Contributing

Contributions are welcome! Please see CONTRIBUTING.md for guidelines.


📜 License

This project is licensed under the MIT License — see the LICENSE file for details.


⭐ Star History

If you find Time Hooker useful, please consider giving it a ⭐ — it helps others discover the project!


**Made with ☕ and JavaScript** *Hook time. Control the web.*