A comprehensive web-based management and monitoring tool for Android devices with MITM and PlayIntegrityFix support, designed for Pokemon GO automation and management.
Rotomina is built with a modern, scalable architecture:
- Backend: FastAPI with async/await support for high-performance concurrent operations
- Frontend: Alpine.js for reactive UI with Tailwind CSS for responsive design
- Real-time Communication: WebSocket connections for live device status updates
- Connection Management: Optimized ADB connection pooling and WebSocket connection reuse
- Background Tasks: Scheduled tasks for updates, monitoring, and maintenance
- Authentication: Session-based user authentication with secure credentials
- π± Device Management: Monitor and control multiple Android devices via ADB
- π Automatic Updates: Keep Pokemon GO, MITM apps, and PlayIntegrityFix up-to-date
- οΏ½ Real-time Monitoring: WebSocket-based live status updates with fallback AJAX polling
- οΏ½ Discord Bot: Full two-way control via slash commands and status notifications in Discord
- π οΈ Remote Management: Install apps, modules, and restart services remotely
- π Secure Authentication: User authentication with configurable credentials
- π Responsive Design: Mobile-friendly interface that works on all devices
- π§ Connection Optimization: Efficient connection pooling to minimize resource usage
- Python 3.8+
- ADB (Android Debug Bridge) installed and accessible
- Network access to Android devices
- Root access on Android devices
- Magisk installed
- PlayIntegrityFix module
- MITM apps compatible with Pokemon GO
- Network connectivity (WiFi or USB connection)
The easiest way to run Rotomina is using Docker Compose with pre-built image:
- Download the standalone configuration:
curl -O https://raw.githubusercontent.com/f3ger/rotomina/main/docker-compose-standalone.yml
mv docker-compose-standalone.yml docker-compose.yml- Create necessary directories:
mkdir -p data- Start Rotomina:
docker-compose up -d-
Complete the setup wizard β on first launch, a setup wizard will guide you through creating your admin account.
-
Access the web interface at http://localhost:8000
docker run -d \
--name rotomina \
--restart unless-stopped \
-p 8000:8000 \
-v $(pwd)/data:/app/data \
--privileged \
ghcr.io/f3ger/rotomina:latest# Clone the repository
git clone https://github.com/f3ger/rotomina.git
cd rotomina
# Build and run with Docker Compose
docker-compose build
docker-compose up -d# Clone repository
git clone https://github.com/f3ger/rotomina.git
cd rotomina
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Start the server
uvicorn main:app --host 0.0.0.0 --port 8000On first run, a setup wizard will guide you through creating your admin account. The config.json file is generated automatically β all configuration is managed through the web UI (Settings page).
Add devices via the web interface using:
- IP Address: For network-connected devices (format:
IP:PORT, e.g.,192.168.1.100:5555) - ADB Device ID: For USB-connected devices (format:
DEVICE_ID, e.g.,11131FDD4001BU)
memory_threshold: Memory limit in MB before automatic restartpogo_auto_update_enabled: Auto-update Pokemon GO when new versions availablepif_auto_update_enabled: Auto-update PlayIntegrityFix modulediscord_bot_token: Bot token from the Discord Developer Portaldiscord_bot_channel_id: Channel ID where slash commands are accepted (optional)discord_bot_role_id: Role ID required to execute bot commands (optional)discord_bot_notify_channel_id: Channel ID for status notifications (optional)device_token: Authentication token for external API access
- Access the web interface at
http://your-server-ip:8000 - Complete the setup wizard to create your admin account
- Add devices in the Settings page
- Monitor and manage devices from the Status page
The Status page provides comprehensive device information:
- Connection Status: Online/Offline with real-time updates
- Memory Usage: Current memory consumption with visual indicators
- Installed Versions: Pokemon GO, MITM, and module versions
- Update Controls: Manual update triggers for each component
- Runtime Tracking: How long devices have been running
- Device Controls: Restart, update, and manage individual devices
- Primary Connection: WebSocket for real-time updates (
ws://host:8000/ws/status) - Fallback Mechanism: AJAX polling every 60 seconds if WebSocket fails
- Connection Pooling: Optimized connection reuse to minimize overhead
- Automatic Reconnection: Handles connection drops gracefully
GET /api/status: Device status and system informationGET /api/all-module-versions: Available module versionsPOST /devices/add: Add new devicePOST /devices/remove: Remove deviceWebSocket /ws/status: Real-time status updates
Rotomina includes a Discord bot for two-way control: trigger updates and restarts via slash commands, and receive status notifications β all from within your Discord server.
- Go to the Discord Developer Portal and click New Application
- Give it a name (e.g.
Rotomina) and confirm - Open the Bot tab β click Add Bot β confirm
- Under Token click Reset Token, copy it and save it somewhere safe
- Privileged Gateway Intents are not required β leave all toggles off
- Open the OAuth2 tab β URL Generator
- Select scopes:
botandapplications.commands - Select bot permissions: Send Messages, Embed Links, View Channels
- Copy the generated URL, open it in a browser, and select your server
Enable Developer Mode in Discord:
User Settings β Advanced β Developer Mode β On
- Channel ID: Right-click any channel β Copy Channel ID
- Role ID: Server Settings β Roles β right-click the role β Copy Role ID
Open Settings in the Rotomina web UI and fill in the Discord Bot section:
| Field | Description |
|---|---|
| Bot Token | The token from Step 1 |
| Allowed Command Channel | Channel ID where slash commands are accepted. Leave empty to allow any channel. |
| Allowed Role | Role ID required to use bot commands. Leave empty to allow all users. |
| Notification Channel | Channel ID where the bot posts status alerts. Leave empty to disable notifications. |
Note: A server restart is required after changing the bot token.
| Command | Description |
|---|---|
/update_pogo |
Starts a PoGo update on all configured devices. Reports back when done. |
/status |
Shows all devices as a rich embed with ADB status, PoGo version, and free RAM. |
/restart |
Restarts PoGo/MITM on all devices. Reports back when done. |
Note: Slash commands are synced globally on bot startup. It can take up to 1 hour for them to appear in Discord after the first start.
The bot posts embedded alerts to the configured notification channel for:
| Event | Color |
|---|---|
| Device went offline | π΄ Red |
| Device back online | π’ Green |
| Low memory β app restarted | π Orange |
| New version downloaded | π΅ Blue |
| Update installed successfully | π’ Green |
| Installation failed / retry | π΄ / π |
| Invalid device token | π΄ Red |
# Pull latest image and restart
docker-compose pull
docker-compose up -d# Pull latest changes
git pull origin main
# Rebuild and restart
docker-compose build
docker-compose up -d- Symptom: Frequent API polling instead of WebSocket updates
- Solution: Check firewall settings, ensure port 8000 is accessible
- Fallback: System automatically uses AJAX polling if WebSocket fails
- Symptom: Devices showing as offline
- Solution:
- Verify ADB is installed and accessible
- Check network connectivity to device IP
- Ensure device has USB debugging enabled
- Confirm device is rooted with Magisk
- Symptom: Frequent device restarts
- Solution:
- Increase
memory_thresholdin config - Check for memory leaks in installed apps
- Monitor device performance logs
- Increase
- Symptom: Updates not installing
- Solution:
- Check internet connectivity
- Verify sufficient storage space
- Ensure device has proper permissions
- Review update logs for specific error messages
- Commands not showing up: Global slash command sync takes up to 1 hour after the first start. Wait and try again.
- "Not authorized" response: Verify you are posting in the configured command channel and that your account has the required role set in Settings.
- Bot appears offline: The bot token in Settings may be wrong or expired β reset it in the Developer Portal, update Settings, and restart the server.
- No notifications arriving: Make sure the Notification Channel ID is set in Settings and that the bot has Send Messages and Embed Links permissions in that channel.
- Connection Pooling: Automatically manages ADB connections efficiently
- WebSocket Optimization: Reuses connections to minimize overhead
- Background Tasks: Scheduled operations to prevent blocking
- Memory Management: Monitors and cleans up stale connections
- Admin Account: Set a strong password during the setup wizard
- Network Access: Restrict access to trusted networks
- API Tokens: Keep device tokens secure and rotate regularly
- HTTPS: Use SSL/TLS in production environments
- Firewall: Configure appropriate firewall rules
rotomina/
βββ main.py # Main FastAPI application
βββ templates/ # HTML templates
β βββ base.html # Base template with navigation
β βββ status.html # Device status dashboard
β βββ settings.html # Configuration management
β βββ login.html # Authentication page
βββ static/ # Static assets (CSS, JS, images)
βββ data/ # Application data directory
βββ config.json # Auto-generated configuration file
- ConnectionManager: WebSocket connection pooling and management
- ADBConnectionPool: Optimized ADB device connections
- VersionManager: Component version tracking and updates
- DeviceMonitor: Background device status monitoring
- UpdateManager: Automated update orchestration
This project is licensed under the MIT License - see the LICENSE file for details.
- The Pokemon GO community for tools and research
- MITM developers for interception capabilities
- PlayIntegrityFix module developers
- FastAPI framework contributors
- Alpine.js and Tailwind CSS teams
This project is not affiliated with Niantic or The PokΓ©mon Company. Use at your own risk and responsibility. Ensure compliance with Pokemon GO Terms of Service and local laws.
For issues, feature requests, or contributions:
- GitHub Issues: Create an issue
- Documentation: Check this README and inline code comments
- Community: Join the community discussions
