El centro de control definitivo, modular y ligero para streamers en Kick, Twitch y YouTube
MiniKick es una aplicación de escritorio nativa diseñada para orquestar transmisiones en vivo sin sacrificar el rendimiento de tus juegos ni los FPS de tu stream. Al operar completamente fuera del navegador web, reduce drásticamente el consumo de memoria RAM y ciclos de CPU, unificando en tiempo real la interacción simultánea de Kick, Twitch y YouTube Live con síntesis de voz neuronal local (Piper TTS), moderación automatizada sin falsos positivos, control multimedia y un potente servidor de overlays para OBS.
| Módulo | Función | Descripción |
|---|---|---|
| Ingestión Multi-Plataforma | Kick + Twitch + YouTube | Captura simultánea de chat, eventos, SuperChats, suscripciones y roles en tiempo real sin cuotas de API. |
| Pipeline de Chat Unidireccional | Procesamiento Seguro | Tubería desacoplada de interceptores puros (Spam -> UI -> Comandos -> TTS) con despacho en tiempo constante |
| Lienzo y Overlays Web | OBS Studio (Puerto 8090) | Servidor local HTTP + WebSockets (RFC 6455) con 5 identidades visuales (Glass, Neon, Card, Cyber, Minimal), soporte de emotes de Kick, Twitch y YouTube, widgets de explosión y combos. |
| Voz Neuronal Local (TTS) | Piper TTS ONNX | Síntesis de voz neuronal de alta calidad que corre 100% local en CPU (~19x velocidad real) con gestor de descarga de voces a demanda, control de velocidad (50%-150%) y precalentamiento sin pausas (Zero-Latency Warm-Up). |
| Reproductor Multimedia | Control de Puntos & Comandos | Reproductor integrado con resolución rápida (yt-dlp), canje de canciones (!sr), saltos (!skip), caché inteligente en disco |
| AutoMod y Moderación | Filtros Inteligentes | Protección activa contra exceso de mayúsculas, repeticiones, enlaces y símbolos, con exclusión previa de emotes para eliminar falsos positivos. |
| Persistencia SQLite WAL | Almacenamiento Seguro | Base de datos local transaccional en modo WAL con reintentos automáticos, migraciones automáticas y respaldo seguro en %LOCALAPPDATA%\.Minikick. |
| Diagnóstico y Reportes | Estabilidad Continua | Captura global de excepciones con registro detallado de fallos, visor de logs en vivo e informes de incidentes automatizados. |
Note
Todas las preferencias de usuario, bases de datos locales (SQLite), modelos neuronales descargados y tokens cifrados de sesión persisten de forma aislada y segura en el directorio nativo del sistema: %LOCALAPPDATA%\.Minikick.
MiniKick está construido bajo estándares estrictos de Ingeniería de Software a Escala, priorizando la Separación de Responsabilidades (SoR), Inversión de Dependencias (IoC) y Eficiencia Algorítmica Big-O.
flowchart TD
subgraph SOURCELAYER["1. Plataformas Externas (Ingestión de Datos)"]
KICK_EXT["Kick (Pusher WebSocket)"]
TWITCH_EXT["Twitch (IRC WebSocket)"]
YT_EXT["YouTube Live (Polling pytchat)"]
end
subgraph WORKERS["2. Hilos de Conexión en Paralelo (QThread)"]
K_WORKER["ChatWorker\n(Pusher Protocol)"]
T_WORKER["TwitchChatWorker\n(IRC Protocol + Ping/Pong)"]
Y_WORKER["YouTubeChatWorker\n(Deduplicación & Polling)"]
end
subgraph CORE_ORCH["3. Orquestador Central (MainWindowCore)"]
ROUTE["_route_incoming_message(dto)\nNormaliza a ChatMessageDTO"]
end
subgraph PIPELINE["4. Pipeline de Procesamiento de Mensajes (MessagePipeline)"]
STEP_SPAM["1. SpamService\n• Filtro Mayúsculas\n• Párrafos / Símbolos\n• Emotes ignorados en O(1)"]
STEP_UI["2. Dispatch a UI\n• Emisión de señal Qt\n• Ring Buffer deque(maxlen=200)"]
STEP_CMD["3. CommandService\n• Regex & Prefijos\n• Cooldowns O(1)\n• Permisos de Rol\n• Detección de Plugins"]
STEP_TTS["4. TTS Pipeline\n• Filtro de roles y bots\n• Normalización de texto"]
end
subgraph ENGINES["5. Servicios y Motores de Ejecución"]
MUSIC_SRV["YouTubeMusicProvider\n• Resuelve URLs (yt-dlp)\n• Cache en disco O(1)\n• Reproductor QMediaPlayer"]
TTS_MGR["TTSManager (2 Threads)\n• Downloader Worker\n• Synthesis Worker\n• Piper ONNX / Local SAPI / Web"]
OVERLAY_SRV["OverlayServerManager (Puerto 8090)\n• Servidor HTTP + WebSockets\n• Envío a OBS (Chat, Widgets, Music)"]
SCHED_SRV["ScheduleService / Worker\n• Actualización automática\n• Categorías y Títulos"]
TIMER_SRV["TimerWorker\n• Notificaciones periódicas"]
end
subgraph DATABASE["6. Capa de Persistencia (SQLite en Modo WAL)"]
DB["DatabaseManager\nPRAGMA journal_mode=WAL\nPRAGMA busy_timeout=5000"]
T_TOKENS[("Tokens & OAuth")]
T_SETTINGS[("Ajustes Generales")]
T_COMMANDS[("Comandos y Alias")]
T_SPAM[("Filtros y Banned Words")]
T_TIMERS[("Timers y Programación")]
T_MUSIC[("Historial de Música")]
end
KICK_EXT --> K_WORKER
TWITCH_EXT --> T_WORKER
YT_EXT --> Y_WORKER
K_WORKER --> ROUTE
T_WORKER --> ROUTE
Y_WORKER --> ROUTE
ROUTE --> STEP_SPAM
STEP_SPAM --> STEP_UI
STEP_UI --> STEP_CMD
STEP_CMD --> STEP_TTS
STEP_CMD -->|"!sr o comandos de música"| MUSIC_SRV
STEP_CMD -->|"[PLUGIN_WIDGET]"| OVERLAY_SRV
STEP_TTS --> TTS_MGR
PIPELINE <--> DATABASE
MUSIC_SRV <--> DATABASE
SCHED_SRV <--> DATABASE
TIMER_SRV <--> DATABASE
-
Aceleración JSON en C/Rust (
msgspec/orjson): Deserialización de alta velocidad con fallback transparente a la librería estándar, reduciendo el consumo de CPU por mensaje en un ~60%. -
Eficiencia Algorítmica
$\mathcal{O}(1)$ : Erradicación de bucles anidados en rutas críticas. Desalojo de historiales mediante colas de doble extremocollections.dequeenSpamService,RewardWorkeryLogService. - Carga Perezosa (Lazy Loading): Los módulos secundarios, workers de descarga y librerías externas pesadas se cargan bajo demanda, logrando un arranque en frío ~50% más rápido (de 4.17 s a 2.13 s).
-
Patrón Pipeline (Chain of Responsibility): Desacoplamiento total del procesamiento de mensajes. Cada mensaje es un
ChatMessageDTOinmutable que atraviesa etapas independientes de sanitización, filtrado y despacho. -
Gestión Segura de Memoria y Concurrencia: Hilos secundarios aislados en
QThreadcon señales/ranuras Qt (Signals/Slots), bloqueos atómicos (threading.Lock) y limpieza determinista de recursos.
Important
Normativa de Contribución: Cualquier propuesta de cambio debe pasar auditoría de complejidad algorítmica, mantener la paridad total en internacionalización (locales/es.json y locales/en.json) y respetar el desacoplamiento de capas para ser integrada.
- Core & GUI: Python 3.14.5 | PySide6 (Qt for Python) | Qt Style Sheets (QSS contextual y tokens HSL)
- Aceleración JSON:
msgspec(C) |orjson(Rust) - Servicios de Red & WebSockets: Servidor HTTP Local multihilo | WebSockets RFC 6455 nativo | Server-Sent Events (SSE) | Requests | Cloudscraper
- Motores de Voz (TTS): Piper TTS (Modelos ONNX locales) | Edge-TTS (Nube) | SAPI5 (Windows Local)
- Audio & Multimedia: YT-DLP | PySide6 QtMultimedia (
QMediaPlayer,QAudioOutput) - Base de Datos: SQLite3 (Modo WAL con transacciones atómicas)
- Gestión de Paquetes & Build:
uv| PyInstaller
- Dirígete a la sección de Releases Oficiales.
- Descarga la versión más reciente (
MiniKick.exeo el instalador ejecutable). - Ejecuta la aplicación en Windows 10/11 sin configuraciones adicionales.
Configuración del entorno local utilizando uv:
# 1. Clonar el repositorio
git clone https://github.com/Andro2k/MiniKick.git
cd MiniKick
# 2. Sincronizar el entorno virtual y dependencias con uv
uv sync
# 3. Ejecutar la aplicación
uv run python main.py
# 4. Compilar ejecutable de producción
uv run pyinstaller --clean --noconfirm MiniKick.specTip
Si experimentas algún comportamiento inesperado de red o desconexión, consulta la vista interna Developer -> Logs de la aplicación o revisa el registro en %LOCALAPPDATA%\.Minikick\logs\minikick.log.
Diseñado y desarrollado con estándares de arquitectura por TheAndro2K • Distribuido bajo la Licencia MIT



