OBS browser source overlay for kick.com/amateurgamer. When a viewer gifts a sub on Kick, a Pokémon booster pack opens on stream: top of the pack rips, card back rises out, then the card spins for ~7 seconds (fast → slow), landing on a random Kanto Pokémon. Each viewer builds a personal Pokédex they can view on a public page. First viewer to collect all 151 wins the prize.
| File | Purpose |
|---|---|
overlay.html |
OBS browser source — plays the pack opening |
pokedex.html |
Public page viewers visit to see their own collection |
cards.js |
All 151 Kanto Pokémon data + sprite URLs |
config.js |
Your Firebase URL, Streamer.bot connection, shiny odds, etc. |
pokepack with the gifter’s name + gift count.overlay.html (your OBS browser source) is connected to Streamer.bot’s WebSocket server, sees the event, and plays the pack animation.pokedex.html?viewer=theirname to see their collection any time.Skip this step if you only want local-only tracking (viewers won’t be able to see their dex).
amateurgamer-pokedex).https://amateurgamer-pokedex-default-rtdb.firebaseio.com.config.js as firebaseUrl.Set proper security rules (Realtime Database → Rules tab). Replace with:
{
"rules": {
"collections": {
".read": true,
"$user": { ".write": true }
},
"completers": {
".read": true,
".write": true
}
}
}
This lets anyone read (so viewers can see their dex) and anyone write (so the overlay can save pulls). The trade-off: a determined troll who finds the database URL could pollute the data. To lock it down further later, use Firebase Anonymous Auth + a write key — out of scope for v1.
Easiest free option: GitHub Pages.
amateurgamer-pokedex) and upload all four files.main branch root.https://YOUR_USER.github.io/amateurgamer-pokedex/overlay.html?debug=0https://YOUR_USER.github.io/amateurgamer-pokedex/pokedex.html?viewer=NAMEFor OBS the overlay can also be loaded from your local disk — but if you host it, the same URL works across machines.
127.0.0.1:8080 (the default). If you change it, update config.js.Pokemon Pack Trigger.user, value: %userName% (or %gifter% depending on Streamer.bot version)count, value: %quantity% (or %giftCount%)pokepackuser, countIf your Streamer.bot version uses different variable names (
%gifter%,%giftCount%etc.), open the action’s Test menu and inspect the available variables. The overlay readsdata.user/data.gifter/data.usernameanddata.count/data.gifts/data.quantityso any of those names will work.
file:///C:/path/to/overlay.html or your GitHub Pages URL.1920, Height 1080.Open overlay.html?debug=1 in a normal browser (Chrome). You’ll see a debug panel bottom-left:
After testing, remove ?debug=1 from the OBS URL.
Edit config.js:
shinyOdds: 100 — 1-in-100 shiny rate. Bump to 50 for more excitement on stream, 4096 for true Pokemon odds.giftsPerPack: 2 — viewers must accumulate this many gifted subs before they earn a pack. Partial credits persist across streams per viewer (gift 1 today, 1 tomorrow → pack tomorrow).cardsPerPack: 1 — cards revealed per earned pack. Bump to 3 for a “real booster pack” feel (still no dupes — all unique pulls from what’s missing).animMs / lingerMs — total animation length and how long the card sits on screen after the spin.URL parameters override config values, e.g. overlay.html?shinyOdds=20 to temporarily boost shiny rate for a special event.
In your panels / chat command (Streamer.bot can do this too):
!dex → https://YOUR_USER.github.io/amateurgamer-pokedex/pokedex.html?viewer={user}
Where {user} is replaced by the requester’s username. Streamer.bot’s chat command action can post that URL with %user% substitution.
?debug=1 mode — it should say connected. If it says connecting… forever, Streamer.bot isn’t running or the port is wrong.cardSprites() in cards.js.lingerMs or set cardsPerGift: 1 and have Streamer.bot only fire once per bomb if you want it tighter.firebaseUrl is set in both config.js files (same value) and that you used the security rules above.