Open-source'owy system donatów dla streamerów — Stripe + PayPal, alerty na overlay, TTS, wiadomości głosowe, cele, top donejtów. Postaw to u siebie, dostosuj pod swoją markę.
OpenDonate to gotowy do postawienia system donejtów dla streamerów, podobny w działaniu do TipeeeStream czy StreamElements, ale w 100% u Ciebie na serwerze i pod Twoją kontrolą. Widz wpłaca donate, na ekranie streamera pojawia się animowany alert z nickiem, kwotą, wiadomością i (opcjonalnie) głosówką TTS lub nagraną wiadomością głosową.
- 💳 Płatności Stripe — karty, BLIK, Revolut Pay, Klarna
- 💵 Płatności PayPal — bez konta biznesowego, z kartami
- 🎤 Alerty na stream — animowane, w pełni konfigurowalne
- 🗣️ TTS (Text-to-Speech) — czytanie wiadomości na żywo
- 🎙️ Wiadomości głosowe — widz może nagrać krótki audiowiadomość
- 🎯 Wiele celów donacji jednocześnie — widz wybiera na stronie wpłat, w overlay rotują
- 🏆 Top donejtów — overlay z rankingiem + opcjonalny auto-scroll pionowy
- 🕘 Last Donate — overlay ostatnich donatów + opcjonalny auto-scroll pionowy
- ⏱️ Odlicznik do końca transmisji — stream „przedłużany", np. 1 PLN = 60s; minimum, ręczne dodawanie czasu/kwoty, real-time
- 💎 Szablony kwotowe — różne animacje/dźwięki w zależności od kwoty
- 🛡️ Filtrowanie wiadomości — anty-spam, anty-link, anty-emoji
- 📊 Panel administracyjny — wszystko w jednym miejscu
- 🎨 Pełen branding — logo, nazwa, kolory, czcionki — wszystko z panelu
- 🔄 Real-time kontrola — pauzowanie, wyciszenie, pomijanie alertów na żywo
- 📍 Filtry rankingów — dzisiaj / tydzień / miesiąc / rok (auto) / od daty / wszystkie
- 🔁 Wyrównanie list — lewo / środek / prawo dla Top i Last Donate
- PHP 7.4+ (zalecane 8.x) — z rozszerzeniami:
pdo_mysql,curl,mbstring,json - MySQL 5.7+ lub MariaDB 10.3+
- Serwer www z obsługą PHP (Apache/Nginx)
- Konto Stripe (opcjonalnie) — stripe.com
- Konto PayPal (opcjonalnie) — paypal.com
- HTTPS na produkcji (wymagane przez Stripe i mikrofon do voice messages)
git clone https://github.com/TWOJ_USER/opendonate.git
cd opendonateAlbo pobierz ZIP z GitHuba i wgraj na serwer (np. przez FTP do /public_html/donate/).
W phpMyAdmin (lub przez CLI) utwórz bazę:
CREATE DATABASE opendonate CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;Wybierz bazę i zaimportuj plik db_init.sql.
Skopiuj szablon i uzupełnij dane:
cp config.example.php config.phpEdytuj config.php i ustaw:
define('DB_HOST', 'localhost');
define('DB_NAME', 'opendonate'); // nazwa Twojej bazy
define('DB_USER', 'opendonate_user'); // user MySQL
define('DB_PASS', 'TWOJE_HASLO'); // hasło MySQL
define('BASE_URL', 'https://twoja-domena.pl/donate'); // bez slasha na końcu!Upewnij się, że PHP może pisać do:
chmod 775 logs uploads uploads/voice_messages soundsOtwórz https://twoja-domena.pl/donate/admin.php i zaloguj się:
- Login:
admin - Hasło:
password
W panelu wejdź w Ustawienia ogólne → Branding i ustaw:
- Nazwa marki (Twój nick/kanał)
- URL logo (link do obrazka)
- URL favicon
- URL powrotu (np. link do Twojego Twitcha)
- Email kontaktowy (do regulaminu RODO)
- Nazwa operatora (Twoje imię/firma do regulaminu)
Stripe: Panel admin → Konfiguracja Stripe → wklej secret_key, publishable_key i webhook_secret.
Webhook URL: https://twoja-domena.pl/donate/api/notification_handler.php
PayPal: Panel admin → wpisz swój email PayPal. Na PayPal.com włącz IPN:
- Settings → Notifications → IPN
- URL:
https://twoja-domena.pl/donate/api/notification_handler.php
W OBS dodaj Browser Source z URL-ami:
- Alerty:
https://twoja-domena.pl/donate/alert_box.php— szerokość 800, wysokość 200 - Cel:
https://twoja-domena.pl/donate/goal_overlay.php— szerokość 400, wysokość 100 - Top:
https://twoja-domena.pl/donate/top_donate.php— szerokość 400, wysokość 600 - Last:
https://twoja-domena.pl/donate/last_donate.php— szerokość 400, wysokość 200 - Odlicznik:
https://twoja-domena.pl/donate/countdown_overlay.php— szerokość 600, wysokość 200
✅ Gotowe! Daj widzom link do https://twoja-domena.pl/donate/ i streamuj!
- Załóż konto na stripe.com
- Przejdź do Developers → API keys → skopiuj Publishable key i Secret key
- Przejdź do Developers → Webhooks → Add endpoint
- Endpoint URL:
https://twoja-domena.pl/donate/api/notification_handler.php - Eventy:
checkout.session.completed - Skopiuj Signing secret (
whsec_...) - Wklej wszystkie 3 klucze do panelu admina
- Wejdź na paypal.com → Settings (koło zębate)
- Account Settings → Notifications → Instant Payment Notifications
- Włącz IPN i wpisz URL:
https://twoja-domena.pl/donate/api/notification_handler.php - Skopiuj swój email PayPal
- Wklej email do panelu admina
opendonate/
├── admin.php # Panel administracyjny
├── alert_box.php # Overlay alertów (OBS)
├── api/ # Endpointy API
│ ├── process_donation.php # Tworzenie donatu
│ ├── notification_handler.php # Webhook Stripe / IPN PayPal + auto-doliczanie czasu/celu
│ ├── get_alert.php # Pobieranie alertu dla overlay
│ ├── get_top_donations.php # Top Donate (filtry, alignment, autoscroll)
│ ├── get_last_donations.php # Last Donate (filtry, alignment, autoscroll)
│ ├── get_goal_progress.php # Lista celów + rotacja overlay
│ ├── get_countdown.php # Stan odlicznika
│ ├── set_countdown.php # Start/pause/reset/add (tylko admin)
│ └── ...
├── countdown_overlay.php # Widget odlicznika (OBS)
├── config.example.php # Szablon konfiguracji
├── config.php # Twoja konfiguracja (gitignore!)
├── db_init.sql # Inicjalizacja bazy (kompletny schemat)
├── goal_overlay.php # Overlay celu/celów donacji (rotacja gdy wiele)
├── index.php # Strona główna — formularz + wybór celu
├── last_donate.php # Overlay ostatnich donatów
├── logs/ # Logi (gitignore)
├── sounds/ # Dźwięki intro (uploadowane)
├── thank_you.php # Strona po wpłacie
├── top_donate.php # Overlay top donejtów
└── uploads/voice_messages/ # Wiadomości głosowe (gitignore)
- ✅ Hasła hashowane przez
password_hash()(bcrypt) - ✅ Wszystkie zapytania przez PDO prepared statements
- ✅ Weryfikacja webhooków Stripe (HMAC SHA-256)
- ✅ Weryfikacja IPN PayPal
- ✅ Sesje z
httponlyisecurecookies - ✅ Plik
config.phpw.gitignore ⚠️ Pamiętaj o HTTPS na produkcji!
Nie działa overlay, pokazuje 404.
Sprawdź czy BASE_URL w config.php ma prawidłowy adres i nie ma slasha na końcu.
Webhook Stripe nie działa. Webhook musi być na HTTPS i URL musi być dokładnie taki sam jak w panelu Stripe (zwracaj uwagę na końcowy slash).
Nie odtwarza TTS. TTS używa Web Speech API przeglądarki. Sprawdź czy w OBS Browser Source masz włączoną opcję „Control audio via OBS".
Jak zmienić hasło admina?
Panel admina → Konto → zmień hasło. Można też ręcznie w bazie: hash bcrypt z php -r "echo password_hash('TWOJE_HASLO', PASSWORD_BCRYPT);"
Jak działa odlicznik? Wejdź w panel → Odlicznik → ustaw np. „1 PLN = 60s" i włącz. Każdy donate ≥ minimalnej kwoty automatycznie doliczy czas. Możesz też ręcznie dodać minuty lub kwotę z panelu (przyciski Start/Pause/Reset + pola dodawania). Licznik tyka real-time co sekundę, synchronizuje się z serwerem co 3s.
Jak długie nicki w Top/Last Donate? Długie nicki łamią się automatycznie w nowe linie zamiast być ucinane. Jeśli widget OBS jest węższy niż nick + kwota, układ adaptuje się.
Lista Top Donate jest za długa dla widgetu OBS. W panelu Top Donate włącz opcję Auto-scroll pionowy — gdy lista nie mieści się w widgecie, animuje powolny scroll w pionie. Możesz ustawić od 1 do 100 donatów i dowolną prędkość scrolla.
Jak skonfigurować wiele celów donacji? Panel → Cele donacji → dodaj dowolną ilość celów przez formularz „Dodaj nowy cel". Dla każdego ustawisz:
- Domyślny — który cel jest zaznaczony domyślnie na stronie wpłat (tylko 1 może być domyślny)
- Pokazuj na stronie wpłat — widz może wybrać ten cel kliknięciem na karcie
- Pokazuj w overlay — cel pojawi się w widgecie OBS (jeśli aktywnych jest kilka, będą rotować)
Po wybraniu celu przez widza, donate doliczy się tylko do tego celu, nie do innych.
Pull requesty mile widziane! Zgłaszaj bugi i pomysły w Issues.
MIT — używaj komercyjnie, modyfikuj, forkuj. Tylko zachowaj informację o oryginalnej licencji.
OpenDonate is a self-hosted, open-source donation system for streamers — similar to TipeeeStream or StreamElements, but fully under your control. Viewers send donations, animated alerts appear on the streamer's overlay with nickname, amount, message, and optionally TTS/voice messages.
- 💳 Stripe payments — cards, BLIK, Revolut Pay, Klarna
- 💵 PayPal payments — no business account required
- 🎤 Stream alerts — animated, fully configurable
- 🗣️ TTS (Text-to-Speech)
- 🎙️ Voice messages from donors
- 🎯 Donation goals with progress bar overlay
- 🏆 Top donators overlay
- 💎 Amount-based templates — different sounds/styles per donation amount
- 🛡️ Message filtering (anti-spam, anti-link, anti-emoji)
- 📊 Admin panel — everything in one place
- 🎨 Full branding — logo, name, colors, fonts via admin panel
- 🔄 Real-time controls — pause, mute, skip alerts live
- PHP 7.4+ (8.x recommended) with
pdo_mysql,curl,mbstring,json - MySQL 5.7+ or MariaDB 10.3+
- Web server with PHP support (Apache/Nginx)
- Stripe account (optional)
- PayPal account (optional)
- HTTPS in production
git clone https://github.com/YOUR_USER/opendonate.git
cd opendonate
cp config.example.php config.php
# Edit config.php with your DB credentials and BASE_URL
# Import db_init.sql into your MySQL database
chmod 775 logs uploads uploads/voice_messages soundsThen open /admin.php and log in with admin / password (change it immediately!).
Configure branding, Stripe/PayPal keys in the admin panel, and add OBS Browser Sources for the overlays.
MIT — see LICENSE.
Originally built as a private streaming donation system, now released as open-source for the streaming community. Pull requests and contributions welcome!
Made with ❤️ for streamers.