Autonomous cryptocurrency tipping for Rumble creators โ powered by Tether WDK and AI.
Minty is a Chrome Extension (Manifest V3) that watches your Rumble sessions and automatically sends on-chain crypto tips to creators based on rules you define. Set it once, and Minty handles everything: detecting creators, tracking watch time, running AI-powered decisions, and broadcasting real blockchain transactions โ no clicks required.
- Autonomous tipping โ no interaction needed after setup; tips fire automatically when watch time thresholds are met
- Rule engine โ per-creator or wildcard rules with configurable rate/min, min watch time, max tip, token, and network
- AI reasoning โ optional LLM layer (OpenAI, Anthropic, Gemini, Ollama) that adjusts tip amounts and can veto low-confidence decisions
- Real on-chain transactions โ uses the official Tether WDK; no mocking
- Multi-network โ Ethereum (Sepolia), Polygon (Amoy), Arbitrum Sepolia, Bitcoin testnet
- Multi-token โ USDT, USAT (Alloy Dollar), XAUT (Tether Gold), BTC
- Budget guards โ daily spending cap + per-session cap with midnight resets
- Companion website โ full analytics dashboard, leaderboard, and streamer profiles bundled inside the extension
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ rumble.com (any video page) โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ content.js (content script, injected by manifest) โ โ
โ โ โ โ
โ โ 1. Detects video element & creator name โ โ
โ โ 2. Extracts creator wallet via silent 3-step HTMX fetchโ โ
โ โ 3. Tracks real watch time (play/pause/seek events) โ โ
โ โ 4. Reports to background every 30 seconds โ โ
โ โ 5. Shows "Minty Active" badge overlay on player โ โ
โ โ 6. Displays tip notification when a tip fires โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ chrome.runtime.sendMessage
โ WATCH_UPDATE / VIDEO_ENDED / CREATOR_DETECTED
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ background.js (service worker โ persistent orchestrator) โ
โ โ
โ handleWatchUpdate() โ
โ โ โ
โ โโโโบ agent.shouldTip() โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ (7-step decision pipeline) โ โ
โ โ โ โ
โ โโโโบ executeTip() โโโโโโโโโโโ decision: shouldTip โ โ
โ โ โ โ
โ โโโโบ wallet.sendTip() (Tether WDK) โ โ
โ โโโโบ storage.addTipRecord() โ โ
โ โโโโบ storage.addDailySpending() โ โ
โ โโโโบ chrome.tabs.sendMessage(TIP_SENT) โ โ
โ โโโโบ chrome.action.setBadgeText() โ โ
โ โ โ
โ agent.js โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ Rule Engine + AI Reasoning + Spending Guardian โ
โ โโโโบ Optional LLM call (OpenAI / Anthropic / Gemini / โ
โ Ollama) for confidence scoring & amount adjustment โ
โ โ
โ wallet.js โ
โ โโโโบ Tether WDK (WalletManagerEvm / WalletManagerBtc) โ
โ Real BIP-39 HD wallet. Real on-chain transfers. โ
โ โ
โ storage.js โ
โ โโโโบ chrome.storage.local โ
โ settings / tipHistory / watchSessions / โ
โ dailySpending / tipRules / creatorCache โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โฒ
โ chrome.runtime.sendMessage
โ GET_STATS / CREATE_RULE / INIT_WALLET / ...
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ popup/ (extension popup UI, 380ร580px) โ
โ popup.html / popup.css / popup.js โ
โ 4 tabs: Dashboard ยท Rules ยท History ยท Settings โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ chrome.tabs.create
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ website/ (companion web app, bundled in extension package) โ
โ index.html โ landing page (works standalone) โ
โ dashboard.html โ personal analytics + charts โ
โ leaderboard.html โ creator ranking from tip history โ
โ streamer.html โ per-creator profile search โ
โ css/ js/ โ vanilla JS, canvas charts, no framework โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Every 30 seconds while video plays:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ WATCH_UPDATE received โ
โ watchMinutes = watchSeconds / 60 โ
โโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโ
โ Already tipped โโโYESโโโบ skip (quiet)
โ this session? โ
โโโโโโโโโฌโโโโโโโโ
โ NO
โผ
โโโโโโโโโโโโโโโโโ
โ Creator addressโโโNOโโโโบ skip (quiet)
โ detected? โ
โโโโโโโโโฌโโโโโโโโ
โ YES
โผ
โโโโโโโโโโโโโโโโโ
โ Matching rule โโโNOโโโโบ skip
โ exists? โ
โโโโโโโโโฌโโโโโโโโ
โ YES
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ watchMin โฅ minWatchMinutes? โโโNOโโโบ skip (quiet)
โโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโ
โ YES
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ amount = min(watchMin ร rate, maxTipAmount) โ
โโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ todaySpent + amount โค maxDailySpend? โโโNOโโโบ skip (logs budget info)
โโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ YES
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโ
โ AI enabled? โโโNOโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โโโโโโโโโฌโโโโโโโโโโโโโโโโโ โ
โ YES โ
โผ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ LLM call โ { shouldTip, confidence, โ โ
โ adjustedAmount, reasoning, sentiment } โ โ
โ โ โ
โ confidence < 0.3 AND shouldTip=false? โ โ
โ โโโโบ veto โ โ
โ โ โ
โ LLM failure? โ non-blocking fallback โ โ
โโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ executeTip() โ
โ โ
โ 1. Double-check daily budget โ
โ 2. wallet.sendTip() โ Tether WDK โ
โ 3. storage.addTipRecord() โ
โ 4. storage.addDailySpending() โ
โ 5. TIP_SENT โ badge on video page โ
โ 6. Badge text = total tip count โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Rumble uses HTMX โ wallet addresses only appear inside dynamically-fetched HTML fragments. Minty extracts them silently via a 3-step fetch chain without opening any UI or modifying the DOM.
DOM: button[hx-get*="qr-modal"]
โ
โ Step 1: htmxFetch(hx-get, hx-vals)
โผ
Tip modal HTML
โโโ Check hx-vals for address โ found? โ DONE
โโโ Find button[hx-get*="qr-address"]
โ
โ Step 2: htmxFetch(hx-get, hx-vals)
โผ
Crypto network tabs HTML
โโโ querySelectorAll('button[hx-vals*="address"]')
โ
โ Step 3: Parse hx-vals JSON from each button
โผ
Address priority:
1st: blockchain=polygon + currency=usdt
2nd: blockchain=polygon (any currency)
3rd: any address found
Fallback: regex scan (0x... or bc1...) in raw HTML
This chain depends on Rumble's current HTMX DOM structure. If wallet extraction breaks, start debugging at Step 1 by checking whether
button[hx-get*="qr-modal"]still exists on video pages.
The AI layer is fully optional. If no credentials are configured, the agent runs in pure rule-based mode with no external calls.
How to enable:
- Open the popup โ Dashboard โ AI Agent section
- Select your provider and enter credentials
- Optionally specify a model override (blank = provider default)
- Click Connect AI Agent
What the AI does:
- Receives watch context: creator, watch duration, base amount, rule parameters, daily budget, recent tip history
- Returns a confidence score (0.0โ1.0) and can adjust the tip amount (bounded by
rule.maxTipAmount) - Vetoes the tip if
confidence < 0.3andshouldTip = false - AI failures are non-blocking โ any error falls back to rule-based logic
Provider quick reference:
| Provider | Default model | Credential needed |
|---|---|---|
| OpenAI | gpt-4o-mini |
API key from platform.openai.com |
| Anthropic | claude-haiku-4-5-20251001 |
API key from console.anthropic.com |
| Gemini | gemini-2.5-flash-lite |
API key from aistudio.google.com |
| Ollama | llama3.2 |
Local server URL (default: http://localhost:11434) |
All networks are configured for testnet by default. Mainnet values are in .env.example.
| Network | Testnet | RPC |
|---|---|---|
| Ethereum | Sepolia | https://1rpc.io/sepolia |
| Polygon | Amoy | https://rpc-amoy.polygon.technology |
| Arbitrum | Sepolia | https://sepolia-rollup.arbitrum.io/rpc |
| Bitcoin | Testnet | ElectrumWs |
| Token | Full name | Networks |
|---|---|---|
| USDT | USDโฎ (Tether Dollar) | Ethereum, Polygon, Arbitrum |
| USAT | USAโฎ (Alloy Dollar) | Ethereum |
| XAUT | XAUโฎ (Tether Gold) | Ethereum |
| BTC | Bitcoin | Bitcoin |
git clone https://github.com/charlesms1246/minty
cd minty
npm installnpm run build- Navigate to
chrome://extensions - Enable Developer mode (top-right toggle)
- Click Load unpacked
- Select the project root (the folder that contains
manifest.jsonandextension/)
- Click the Minty icon in the toolbar โ Settings โ Wallet
- Click Generate New for a fresh wallet, or paste an existing seed phrase
- Click Initialize Wallet
Save your seed phrase โ it is the only way to recover your wallet.
- Polygon Amoy USDT โ Polygon Faucet
- Ethereum Sepolia ETH โ Sepolia Google Faucet
- Arbitrum Sepolia โ bridge from Sepolia or use Arbitrum Faucet
- Rules tab โ fill in the form
- Recommended starting values: All Creators ยท $0.02/min ยท USDT ยท Polygon ยท 3 min min ยท $5 max
- Click Create Rule
Navigate to any video on rumble.com. The "Minty Active" badge appears in the top-right corner of the player. After the minimum watch time, a tip fires automatically.
Dashboard โ AI Agent โ select provider โ enter API key โ Connect AI Agent.
The extension ships in testnet mode. To switch to mainnet:
src/wallet.jsโ replaceRPC_PROVIDERSandTOKEN_CONTRACTSwith the mainnet values documented in.env.examplepopup/popup.jsโ updategetExplorerUrl()to mainnet explorers (polygonscan.com,etherscan.io,arbiscan.io,blockstream.info)wallet.jsโ updateElectrumWsendpoint to a mainnet Bitcoin Electrum server- Security โ implement proper seed phrase encryption before any mainnet use (see
TODOinwallet.js)