Rose is an open-source automatic skin changer for League of Legends that enables seamless access to all skins in the game. The application runs silently in the system tray and automatically detects skin selections during champion select, injecting the chosen skin when the game loads.
Rose is built on two core technologies:
- ๐ฎ Pengu Loader: Plugin system that injects JavaScript plugins into the League Client, enabling enhanced UI interactions and quick skin detection
- ๐ง CSLOL: Safe skin injection framework that handles the actual skin injection process, fully compatible with Riot Vanguard
These technologies work together to provide a seamless and effortless automatic skin-changing experience without any manual intervention.
Rose consists of two main components:
- LCU API Integration: Communicates with the League Client via the League Client Update (LCU) API
- CSLOL Injection: Uses CSLOL tools for safe skin injection
- WebSocket Bridge: Operates a WebSocket server for real-time communication with frontend plugins
- Skin Management: Downloads and manages skins from the LeagueSkins repository
- Game Monitoring: Tracks game state, champion select phases, and loadout countdowns
- Analytics: Sends periodic pings to track unique users (configurable, runs in background thread)
Rose includes a suite of JavaScript plugins that extend the League Client UI:
- ROSE-UI: Unlocks locked skin previews in champion select, enabling hover interactions on all skins
- ROSE-SkinMonitor: Monitors currently selected skin's name and sends it to the Python backend via WebSocket
- ROSE-CustomWheel: Displays custom mod metadata for hovered skins and exposes quick access to the mods folder
- ROSE-ChromaWheel: Enhanced chroma selection interface for choosing any chroma variant
- ROSE-FormsWheel: Custom form selection interface for skins with multiple forms (Elementalist Lux, Sahn Uzal Mordekaiser, Spirit Blossom Morgana, Radiant Sett)
- ROSE-SettingsPanel: Settings panel accessible from the League of Legends Client
- ROSE-RandomSkin: Random skin selection feature
- ROSE-HistoricMode: Access to the last used skin for every champion
- League Client Integration: Rose activates Pengu Loader on startup, which injects the JavaScript plugins into the League Client
- Skin Detection: When you hover over a skin in champion select,
ROSE-SkinMonitordetects the selection and sends it to the Python backend - Game Opening Delay: To make sure the injection has time to occur we suspend League of Legend's game process as long as the overlay is not ran
- Game Injection: Using CSLOL tools, Rose injects the selected skin when the game starts
- Seamless Experience: The skin loads as if you owned it, with full chroma support and no gameplay impact (Rose will never provide any competitive advantage to its users)
- Automatic Skin Detection: Detects skin selections through hover events in champion select
- All Skins Accessible: Access to every skin for every champion
- Chroma Support: Select any chroma variant through the enhanced UI
- Random Skin Mode: Automatically select random skins
- Historic Mode: Access last used skin on every champion
- Custom Mod Insights: ROSE-CustomWheel surfaces installed mods relevant to the skin you're hovering over, along with timestamps and quick folder access
- Smart Injection: Never injects skins you already own
- Safe & Compatible: Uses CSLOL injection tools compatible with Riot Vanguard
- Multi-Language Support: Works with any client language
- Open Source: Fully open source and extensible
- Free: If you bought this software, you got scammed ๐
- Windows 10/11
- League of Legends installed
- Download the latest installer from Releases
- Run the installer as Administrator
- Launch Rose from the Start Menu or desktop shortcut
# Create conda environment with Python 3.11
conda create -n rose python=3.11 -y
# Activate the environment
conda activate rose
# Clone the repository
git clone https://github.com/Alban1911/Rose.git
# Navigate to project directory
cd Rose
# Switch to dev branch
git checkout dev
# Initialize and update submodules (Pengu Loader plugins)
git submodule update --init --recursive
# Install all dependencies
pip install -r requirements.txt
# Ready to develop! Run main.py as administrator when testingRose includes an optional analytics system that tracks unique users by sending periodic pings to a server. The analytics system:
- Runs in background: Operates as a daemon thread, doesn't affect app performance
- Sends pings every 5 minutes: Includes machine ID and app version
- Configurable: Can be enabled/disabled via
ANALYTICS_ENABLEDinconfig.py - Privacy-friendly: Uses machine identifiers, no personal data collected
Current Configuration:
- Server URL:
https://api.leagueunlocked.net/analytics/ping - Ping interval: 5 minutes (300 seconds)
- Enabled by default
To configure analytics:
- Edit
config.py - Update
ANALYTICS_SERVER_URLto your server endpoint - Adjust
ANALYTICS_PING_INTERVAL_Sif needed - Set
ANALYTICS_ENABLED = Falseto disable
For server setup instructions, see ANALYTICS_SERVER_SETUP.md.
Rose/
โโโ main.py # Application entry point
โโโ config.py # Configuration constants
โโโ requirements.txt # Python dependencies
โโโ assets/ # Application assets (icons, fonts, images)
โ
โโโ main/ # Main application package
โ โโโ core/ # Core initialization and lifecycle
โ โ โโโ initialization.py
โ โ โโโ threads.py
โ โ โโโ state.py
โ โ โโโ signals.py
โ โ โโโ lockfile.py
โ โ โโโ lcu_handler.py
โ โ โโโ cleanup.py
โ โโโ setup/ # Application setup and configuration
โ โ โโโ console.py
โ โ โโโ arguments.py
โ โ โโโ initialization.py
โ โโโ runtime/ # Main runtime loop
โ โโโ loop.py
โ
โโโ injection/ # CSLOL injection system
โ โโโ core/ # Core injection logic
โ โ โโโ manager.py # Injection manager & coordination
โ โ โโโ injector.py # CSLOL skin injector
โ โโโ game/ # Game detection and monitoring
โ โ โโโ game_detector.py
โ โ โโโ game_monitor.py
โ โโโ config/ # Configuration management
โ โ โโโ config_manager.py
โ โ โโโ threshold_manager.py
โ โโโ mods/ # Mod management
โ โ โโโ mod_manager.py
โ โ โโโ zip_resolver.py
โ โโโ overlay/ # Overlay process management
โ โ โโโ overlay_manager.py
โ โ โโโ process_manager.py
โ โโโ tools/ # CSLOL tools (cslol-dll.dll, mod-tools.exe, etc.)
โ โโโ tools_manager.py
โ
โโโ lcu/ # League Client API integration
โ โโโ core/ # Core LCU client components
โ โ โโโ client.py # Main LCU client orchestrator
โ โ โโโ lcu_api.py # LCU API wrapper
โ โ โโโ lcu_connection.py
โ โ โโโ lockfile.py
โ โโโ data/ # Data management
โ โ โโโ skin_scraper.py
โ โ โโโ skin_cache.py
โ โ โโโ types.py
โ โ โโโ utils.py
โ โโโ features/ # LCU feature implementations
โ โโโ lcu_properties.py
โ โโโ lcu_skin_selection.py
โ โโโ lcu_game_mode.py
โ โโโ lcu_swiftplay.py
โ
โโโ threads/ # Background threads
โ โโโ core/ # Core thread implementations
โ โ โโโ websocket_thread.py
โ โ โโโ phase_thread.py
โ โ โโโ lcu_monitor_thread.py
โ โโโ handlers/ # Event handlers
โ โ โโโ champ_thread.py
โ โ โโโ champion_lock_handler.py
โ โ โโโ game_mode_detector.py
โ โ โโโ injection_trigger.py
โ โ โโโ lobby_processor.py
โ โ โโโ phase_handler.py
โ โ โโโ swiftplay_handler.py
โ โโโ utilities/ # Thread utilities
โ โ โโโ timer_manager.py
โ โ โโโ loadout_ticker.py
โ โ โโโ skin_name_resolver.py
โ โโโ websocket/ # WebSocket components
โ โโโ websocket_connection.py
โ โโโ websocket_event_handler.py
โ
โโโ utils/ # Utility modules
โ โโโ core/ # Core utilities
โ โ โโโ logging.py
โ โ โโโ paths.py
โ โ โโโ utilities.py
โ โ โโโ validation.py
โ โ โโโ normalization.py
โ โ โโโ historic.py
โ โโโ download/ # Download utilities
โ โ โโโ skin_downloader.py
โ โ โโโ smart_skin_downloader.py
โ โ โโโ repo_downloader.py
โ โ โโโ hashes_downloader.py
โ โ โโโ hash_updater.py
โ โโโ integration/ # External integrations
โ โ โโโ pengu_loader.py
โ โ โโโ tray_manager.py
โ โ โโโ tray_settings.py
โ โโโ system/ # System utilities
โ โ โโโ admin_utils.py
โ โ โโโ win32_base.py
โ โ โโโ window_utils.py
โ โ โโโ resolution_utils.py
โ โโโ threading/ # Threading utilities
โ โโโ thread_manager.py
โ
โโโ ui/ # UI components
โ โโโ core/ # Core UI management
โ โ โโโ user_interface.py
โ โ โโโ lifecycle_manager.py
โ โโโ chroma/ # Chroma selection UI
โ โ โโโ selector.py
โ โ โโโ ui.py
โ โ โโโ panel.py
โ โ โโโ preview_manager.py
โ โ โโโ selection_handler.py
โ โ โโโ special_cases.py
โ โโโ handlers/ # UI feature handlers
โ โโโ historic_mode_handler.py
โ โโโ randomization_handler.py
โ โโโ skin_display_handler.py
โ
โโโ pengu/ # Pengu Loader integration
โ โโโ core/ # Core Pengu functionality
โ โ โโโ websocket_server.py
โ โ โโโ http_handler.py
โ โ โโโ skin_monitor.py
โ โโโ communication/ # Communication layer
โ โ โโโ message_handler.py
โ โ โโโ broadcaster.py
โ โโโ processing/ # Data processing
โ โโโ skin_processor.py
โ โโโ skin_mapping.py
โ โโโ flow_controller.py
โ
โโโ state/ # Shared application state
โ โโโ core/
โ โโโ shared_state.py
โ โโโ app_status.py
โ
โโโ launcher/ # Application launcher and updater
โ โโโ core/
โ โ โโโ launcher.py
โ โโโ sequences/ # Launch sequences
โ โ โโโ hash_check_sequence.py
โ โ โโโ skin_sync_sequence.py
โ โโโ update/ # Update system
โ โ โโโ update_sequence.py
โ โ โโโ update_downloader.py
โ โ โโโ update_installer.py
โ โ โโโ github_client.py
โ โโโ ui/
โ โ โโโ update_dialog.py
โ โโโ updater.py
โ
โโโ analytics/ # Analytics and user tracking
โ โโโ core/
โ โโโ machine_id.py # Machine ID retrieval (Windows Machine GUID)
โ โโโ analytics_client.py # HTTP client for analytics pings
โ โโโ analytics_thread.py # Background thread for periodic pings
โ
โโโ Pengu Loader/ # Pengu Loader and plugins
โโโ Pengu Loader.exe # Pengu Loader executable
โโโ plugins/ # JavaScript plugins
โโโ ROSE-UI/
โโโ ROSE-SkinMonitor/
โโโ ROSE-ChromaWheel/
โโโ ROSE-FormsWheel/
โโโ ROSE-CustomWheel/
โโโ ROSE-SettingsPanel/
โโโ ROSE-RandomSkin/
โโโ ROSE-HistoricMode/
- Python 3.11+: Backend application
- Pengu Loader: Plugin system for League Client
- CSLOL: Safe skin injection tools
- LCU API: League Client communication
- WebSocket: Real-time frontend-backend communication
- JavaScript/HTML/CSS: Client UI plugins
Rose is open source! Contributions are welcome:
- Report bugs or suggest features via GitHub Issues
- Submit pull requests for improvements
- Join our Discord for discussions
Important: This project is not endorsed by Riot Games and does not represent the views or opinions of Riot Games or any of its affiliates. Riot Games and all related properties are trademarks or registered trademarks of Riot Games, Inc.
The use of custom skin tools may violate Riot Games' Terms of Service. Users proceed at their own risk.
Custom skins are allowed under Riot's terms of service and do not trigger detection as long as you are not discussing or advertising the use of the skins within the game.
If you enjoy Rose and want to support its development:
Your support helps keep the project alive and motivates continued development!
Rose - League, unlocked.